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

5次阅读

共计 4569 个字符,预计需要花费 12 分钟才能阅读完成。

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

正文完
 0