全文链接: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%。
名称 | 形容 | 简介 | 每个用户至多评分物品 |
---|---|---|---|
MovieLens | 对电影的评分从 1 到 5 | 943 名用户对 1682 部电影的评估 | 100 |
评分预测的预测准确度个别通过均匀绝对误差(MAE)计算,均匀相对偏差越小,预测的准确度越高。
过程与后果剖析
(1) 确定最佳聚类数
首先,通过比拟不同聚类数相应的聚类有效性函数值来选出最佳聚类数 cmax。试验后果如图所示。
图中的横坐标为聚类数,纵坐标为相应的 4 个聚类有效性函数值。由上述后果可知,在 2 到的最佳搜寻范畴中,不同的聚类数 c 失去的 VPE 值与 VFC 值呈枯燥趋势,而 VXB 与 VK 函数值均在 c =12 时枯燥性产生扭转。
图 1 MovieLens 不同聚类数对应的聚类有效性函数值
相似的,图 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
图 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
试验后果如图所示。
图 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
最受欢迎的见解
1. R 语言 k -Shape 算法股票价格工夫序列聚类
2. R 语言基于温度对城市档次聚类、kmean 聚类、主成分剖析和 Voronoi 图
3. R 语言对用电负荷工夫序列数据进行 K -medoids 聚类建模和 GAM 回归
4. r 语言鸢尾花 iris 数据集的档次聚类
5.Python Monte Carlo K-Means 聚类实战
6. 用 R 进行网站评论文本开掘聚类
7. R 语言 KMEANS 均值聚类和档次聚类:亚洲国家地区生存幸福品质异同可视化 **
8.PYTHON 用户散失数据挖掘:建设逻辑回归、XGBOOST、随机森林、决策树、反对向量机、奢侈贝叶斯模型和 KMEANS 聚类用户画像
9. R 语言基于 Keras 的小数据集深度学习图像分类