全文链接: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到5943名用户对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;        endendfenmu=(min(pdist(center,'euclidean')))^2;

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

判别函数VPEVXBVFCVK
Movielens数据集cmax\>25cmax=12cmax\>25cmax=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);endk=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:atempv=find(data(i(k),:)~=0);Rv=mean(data(i(k),tempv));fenzi=fenzi+D(j,i(k)).*(data(i(k),itemN)-Rv);endfenmu=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:50n=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)    endend

试验后果如图所示。


图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的小数据集深度学习图像分类