MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集

简介: MATLAB模糊C均值聚类FCM改进的推荐系统协同过滤算法分析MovieLens电影数据集

全文链接:http://tecdat.cn/?p=32594


在当今信息爆炸的时代,电影作为人们生活中不可或缺的娱乐方式,受到了越来越多的关注点击文末“阅读原文”获取完整代码数据


而为了让观众能够更好地选择适合自己口味的电影,推荐系统成为了一个备受关注的研究领域。协同过滤算法是其中一种被广泛使用的方法。

本文将以MovieLens数据集为基础,帮助客户分析MATLAB模糊C均值聚类改进的协同过滤算法在推荐系统中的应用。针对MovieLens数据集进行实验,并比较传统协同过滤算法和改进后的模糊C均值聚类协同过滤算法的性能差异。最后结合实验结果进行分析和总结。

1. 首先需要了解什么是模糊C均值聚类和协同过滤算法。

  • 模糊C均值聚类(FCM)是一种基于隶属度的聚类方法,它将每个数据点对应到各个聚类中心的隶属度上。
  • 协同过滤算法是一种推荐系统算法,主要用于预测用户对未评价物品的喜欢程度。该算法基于相似性进行推荐,即根据用户行为历史信息来发现不同用户之间的相似性,并根据这些相似性为用户推荐物品。

2. 然后需要了解如何将这两种算法结合起来实现数据分析。

  • 在协同过滤算法中,我们需要计算不同用户之间或者不同物品之间的相似度。而这里可以使用模糊C均值聚类来实现。
  • 具体地说,在MovieLens数据集中,我们可以将每一个电影看作是一个向量,其中包括电影名称、导演、演员、类型等特征。然后使用模糊C均值聚类将这些电影聚类到不同的簇中。
  • 接着,我们可以计算用户和簇之间的相似度,进而推荐给用户可能感兴趣的电影。

3. 最后需要注意哪些细节问题。

  • 在使用模糊C均值聚类时,需要选择合适的参数来控制隶属度和聚类个数等因素。这需要根据具体情况进行调整。本文使用了4个聚类有效性函数值来选取最优聚类数。
  • 在计算相似度时,需要选择合适的距离或者相似性度量方法。同时还要考虑如何处理缺失数据、异常值等问题。


数据


MovieLens数据是美国Minnesota大学GroupLens项目组提供的Movielens数据集ml-100k中的u2数据。这个数据集包含了943名用户对1682部电影的评价(评分值为数字1到5,若数值越高则用户喜爱该电影的程度越高),并含有电影项目的分类特征。该数据集仅包含了评价过20部以上电影的用户评价数据,没有评分的电影数据占所有数据的比重(稀疏度)为94%。

image.png

名称 描述 简介 每个用户至少评分物品
MovieLens 对电影的评分从1到5 943名用户对1682部电影的评价 100

评分预测的预测准确度一般通过平均绝对误差 (MAE) 计算,平均绝对偏差越小,预测的准确度越高。

 

过程与结果分析


(1)确定最佳聚类数

首先,通过比较不同聚类数相应的聚类有效性函数值来选出最佳聚类数cmax。实验结果如图所示。

图中的横坐标为聚类数,纵坐标为相应的4个聚类有效性函数值。由上述结果可知,在2到的最佳搜索范围中,不同的聚类数c得到的VPE值与VFC值呈单调趋势,而VXB与VK函数值均在c=12时单调性发生改变。

image.png

图1  MovieLens不同聚类数对应的聚类有效性函数值


点击标题查阅往期内容


python推荐系统实现(矩阵分解来协同过滤)


01

02

03

04


类似的,图1中的横坐标为聚类数,纵坐标为相应的4个聚类有效性函数值。由上述结果可知,在2到的最佳搜索范围中,不同的聚类数c得到的VPE值与VFC值呈单调趋势,而VXB与VK函数值均在c=12时单调性发生改变。

最后得到不同判别函数在不同数据集上的指标值如表1所示。

%XB 用Xie和Beni的准则来求最优聚类数
%   u为隶属度矩阵,center为聚类中心矩阵
V=0;
for i=1:size(u,1)
    for j=1:size(u,2)
    V=V+(u(i,j))^2*(norm(data(j,:)-center(i,:)))^2;    
    end
end
fenmu=(min(pdist(center,'euclidean')))^2;

表1 Xie-Beni方法确定的最佳聚类数cmax

判别函数 VPE VXB VFC VK
Movielens数据集 cmax>25 cmax=12 cmax>25 cmax=12

因此,根据Xie-Beni方法,本文选取Flixster数据集的最佳聚类数cmax为10,本文选取MovieLens数据集的最佳聚类数cmax为12。

(2)MAE指标比较

模糊C均值聚类算法的关键步骤是确定最佳聚类簇数,为检验本节给出的FCMC CF算法,我们在Movielens和Flixster数据集上进行了实验分析,并将其同K-means、K-medoids和K-mode聚类协同过滤算法进行了比较,实验结果如图所示。

%FCMC data为模糊C均值聚类的实验数据,top代表XB准则下的前10个最佳聚类数,b为该10个最佳聚类数的PE指标值
%  
for k=2:sqrt(size(data,1))
    [center u]=fcm(data,k);
    Vpe(k-1)=Bezdek(u);
    Vxb(k-1)=XB(u,center,data);
    Vfs(k-1)=FS( u,center,data);
    Vk(k-1)=Kwon( u,center,data);
end
k=2:sqrt(size(data,1));
    subplot(2,2,1),plot(k,Vpe(k-1),'- *'),xlabel('x(聚类簇数)'),ylabel('y(Vpe指标)')
k=2:sqrt(size(data,1));
subplot(2,2,2),plot(k,Vxb(k-1),'- or'),xlabel('x(聚类簇数)'),ylabel('y(Vxb指标)')
 
k=2:sqrt(size(data,1));
subplot(2,2,3),plot(k,Vfs(k-1),'- or'),xlabel('x(聚类簇数)'),ylabel('y(Vfs指标)')
k=2:sqrt(size(data,1));
Predict(i,j,D,data,itemN)
%j代表目标用户,i为j用户的邻居用户为i用户集,data为用户-物品矩阵,D为相似系数矩阵,item为用户j要预测的物品编号
tempu= find(data(j,:)~=0);%发现用户所有已评分的项目
Ru=mean(data(j,tempu));%计算用户评分的平均值
a=length(i);
fenzi=0;
for k=1:a
tempv=find(data(i(k),:)~=0);
Rv=mean(data(i(k),tempv));
fenzi=fenzi+D(j,i(k)).*(data(i(k),itemN)-Rv);
end
fenmu=0;
for k=1:a

image.png

图2 Movielens数据集不同算法MAE的比较

unction mae = MAE(CS,udata,udatatest,Fuz)
%CS为相似度矩阵,data为训练集用户项目矩阵,datatest为测试集用户项目矩阵,Fuz为标记变量(1为模糊C均值聚类协同过滤,0为传统系统过滤)
j=1;
for n=1:5:80%########最近邻数
mae(j)=0;%mae为最近邻为n的情况下的最小均方误差 
k=0;%计数变量
   for t=1:size(udatatest,1)
    
    i=topn(CS,t,n);%计算出该用户的最近邻用户集合,t为i目标用户编号,i为相邻用户编号(按相似度从高到低排列),n为n个邻居用户数,应设为?
    item=find(udatatest(t,:)~=0);%item为测试集中用户的评价项目
    if n>length(i)
           continue;

在图中,横轴为最近邻个数 k,纵轴为平均绝对偏差 MAE。曲线CF代表传统的协同过滤算法,曲线Kmean CF代表基于K均值聚类的协同过滤算法,曲线FCMC CF代表基于模糊C均值聚类有效性的协同过滤算法,曲线K medoids CF代表基于K medoids聚类的协同过滤算法。

由图可以看到基于有效性指标改进的FCMC CF算法在MAE指标上要明显优于其他算法。在Movielens数据集上的实验结果表明,FCMC CF得到的MAE值要优于其他几个算法。

(3)召回率和覆盖率的比较

在接下来的TOP-N实验中,我们选择FCMC CF算法与其他算法在召回率、覆盖率指标上进行比较。

%D为相似系数矩阵,i为第i个目标用户,n为前n个最相似的用户数,输出为前n个用户的坐标信息
[a,b]=sort(D(i,:),'descend');%a为从高到低排的相似系数
top=b(1:n);
I= ind2sub(size(D), top);%J目标用户编号,I相邻用户编号(按相似度从高到低排列)
 Recall(udata,udatatest,CS,Fuz)
Recall(udata,udatatest,CS,Fuz)
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
%N为推荐列表的长度,udata为用户项目评分矩阵
j=1;
for N=5:5:50
n=30;%n为目标用户的最近邻居用户数#######默认为3个
for q=1:size(udata,1)%计算每位用户对每个物品的预测评分
    for w=1:size(udata,2)
    I=topn(CS,q,n);%D为相似系数矩阵,i为第i个目标用户(即为q),n为前n个最相似的用户数(默认为3),输出为最近邻居用户的前n个用户的坐标信息
    rank(q,w)=Predict(I,q,CS,udata,w);%rank为用户项目预测评分矩阵,j代表目标用户(即为q),i为j用户的邻居用户为i用户集,data为用户-物品矩阵,D为相似系数矩阵,item为用户j要预测的物品编号(即为w)
    end
end

实验结果如图所示。

image.png

image.png

图4 不同算法召回率的比较

在图中,横轴代表推荐列表长度N,纵轴分别为召回率和覆盖率。其中,每个N值对应的两条曲线图分别为FCMC CF与CF、Kmeans CF对应的函数值。

FCMC CF算法与传统CF算法和Kmeans CF算法相比,在不同的最近邻水平下具有较高的召回率和覆盖率,即新算法在推荐质量上有所改善,有效地提升了推荐精度。

%%预测函数
predictfun2( CS, t,item ,n,udata)
%%其中CS为相似度矩阵
%%item为预测的项目编号
%%t为目标用户
%%n为近邻个数
%%udata为用户-项目评分矩阵
 
%%得到的预测评分为2.24
%%实际评分为3

image.png

相关文章
|
14天前
|
算法 BI Serverless
基于鱼群算法的散热片形状优化matlab仿真
本研究利用浴盆曲线模拟空隙外形,并通过鱼群算法(FSA)优化浴盆曲线参数,以获得最佳孔隙度值及对应的R值。FSA通过模拟鱼群的聚群、避障和觅食行为,实现高效全局搜索。具体步骤包括初始化鱼群、计算适应度值、更新位置及判断终止条件。最终确定散热片的最佳形状参数。仿真结果显示该方法能显著提高优化效率。相关代码使用MATLAB 2022a实现。
|
2天前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
|
2天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
本项目展示了一种结合粒子群优化(PSO)与分组卷积神经网络(GroupCNN)的时间序列预测算法。该算法通过PSO寻找最优网络结构和超参数,提高预测准确性与效率。软件基于MATLAB 2022a,提供完整代码及详细中文注释,并附带操作步骤视频。分组卷积有效降低了计算成本,而PSO则智能调整网络参数。此方法特别适用于金融市场预测和天气预报等场景。
|
5天前
|
算法
基于极大似然算法的系统参数辨识matlab仿真
本程序基于极大似然算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计,并计算估计误差及收敛曲线,对比不同信噪比下的误差表现。在MATLAB2022a版本中运行,展示了参数估计值及其误差曲线。极大似然估计方法通过最大化观测数据的似然函数来估计未知参数,适用于多种系统模型。
|
7天前
|
机器学习/深度学习 算法
基于小波神经网络的数据分类算法matlab仿真
该程序基于小波神经网络实现数据分类,输入为5个特征值,输出为“是”或“否”。使用MATLAB 2022a版本,50组数据训练,30组数据验证。通过小波函数捕捉数据局部特征,提高分类性能。训练误差和识别结果通过图表展示。
|
1月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
3月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的电影推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
3月前
|
搜索推荐 算法 小程序
基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)
基于Java协同过滤算法的图书推荐系统设计和实现(源码+LW+调试文档+讲解等)
|
1月前
|
搜索推荐 前端开发 数据可视化
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
本文介绍了一个基于Python协同过滤算法的旅游景点推荐系统,该系统采用Django框架、MySQL数据库、Bootstrap前端和echarts数据可视化技术,旨在为用户提供个性化的旅游推荐服务,提升用户体验和旅游市场增长。
基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现
|
1月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库