MATLAB模糊C均值聚類FCM改進的推薦系統(tǒng)協(xié)同過濾算法分析MovieLens電影數(shù)據(jù)集
全文鏈接:http://tecdat.cn/?p=32594
原文出處:拓端數(shù)據(jù)部落公眾號
在當今信息爆炸的時代,電影作為人們生活中不可或缺的娛樂方式,受到了越來越多的關(guān)注。而為了讓觀眾能夠更好地選擇適合自己口味的電影,推薦系統(tǒng)成為了一個備受關(guān)注的研究領(lǐng)域。協(xié)同過濾算法是其中一種被廣泛使用的方法。
本文將以MovieLens數(shù)據(jù)集為基礎(chǔ),幫助客戶分析MATLAB模糊C均值聚類改進的協(xié)同過濾算法在推薦系統(tǒng)中的應(yīng)用。針對MovieLens數(shù)據(jù)集進行實驗,并比較傳統(tǒng)協(xié)同過濾算法和改進后的模糊C均值聚類協(xié)同過濾算法的性能差異。最后結(jié)合實驗結(jié)果進行分析和總結(jié)。
1. 首先需要了解什么是模糊C均值聚類和協(xié)同過濾算法。
模糊C均值聚類(FCM)是一種基于隸屬度的聚類方法,它將每個數(shù)據(jù)點對應(yīng)到各個聚類中心的隸屬度上。
協(xié)同過濾算法是一種推薦系統(tǒng)算法,主要用于預(yù)測用戶對未評價物品的喜歡程度。該算法基于相似性進行推薦,即根據(jù)用戶行為歷史信息來發(fā)現(xiàn)不同用戶之間的相似性,并根據(jù)這些相似性為用戶推薦物品。
2. 然后需要了解如何將這兩種算法結(jié)合起來實現(xiàn)數(shù)據(jù)分析。
在協(xié)同過濾算法中,我們需要計算不同用戶之間或者不同物品之間的相似度。而這里可以使用模糊C均值聚類來實現(xiàn)。
具體地說,在MovieLens數(shù)據(jù)集中,我們可以將每一個電影看作是一個向量,其中包括電影名稱、導(dǎo)演、演員、類型等特征。然后使用模糊C均值聚類將這些電影聚類到不同的簇中。
接著,我們可以計算用戶和簇之間的相似度,進而推薦給用戶可能感興趣的電影。
3. 最后需要注意哪些細節(jié)問題。
在使用模糊C均值聚類時,需要選擇合適的參數(shù)來控制隸屬度和聚類個數(shù)等因素。這需要根據(jù)具體情況進行調(diào)整。本文使用了4個聚類有效性函數(shù)值來選取最優(yōu)聚類數(shù)。
在計算相似度時,需要選擇合適的距離或者相似性度量方法。同時還要考慮如何處理缺失數(shù)據(jù)、異常值等問題。
數(shù)據(jù)
MovieLens數(shù)據(jù)是美國Minnesota大學GroupLens項目組提供的Movielens數(shù)據(jù)集ml-100k中的u2數(shù)據(jù)。這個數(shù)據(jù)集包含了943名用戶對1682部電影的評價(評分值為數(shù)字1到5,若數(shù)值越高則用戶喜愛該電影的程度越高),并含有電影項目的分類特征。該數(shù)據(jù)集僅包含了評價過20部以上電影的用戶評價數(shù)據(jù),沒有評分的電影數(shù)據(jù)占所有數(shù)據(jù)的比重(稀疏度)為94%。

名稱描述簡介每個用戶至少評分物品MovieLens對電影的評分從1到5943名用戶對1682部電影的評價100
評分預(yù)測的預(yù)測準確度一般通過平均絕對誤差 (MAE) 計算,平均絕對偏差越小,預(yù)測的準確度越高。
?
過程與結(jié)果分析
(1)確定最佳聚類數(shù)
首先,通過比較不同聚類數(shù)相應(yīng)的聚類有效性函數(shù)值來選出最佳聚類數(shù)cmax。實驗結(jié)果如圖所示。
圖中的橫坐標為聚類數(shù),縱坐標為相應(yīng)的4個聚類有效性函數(shù)值。由上述結(jié)果可知,在2到的最佳搜索范圍中,不同的聚類數(shù)c得到的VPE值與VFC值呈單調(diào)趨勢,而VXB與VK函數(shù)值均在c=12時單調(diào)性發(fā)生改變。

圖1 ?MovieLens不同聚類數(shù)對應(yīng)的聚類有效性函數(shù)值
類似的,圖1中的橫坐標為聚類數(shù),縱坐標為相應(yīng)的4個聚類有效性函數(shù)值。由上述結(jié)果可知,在2到的最佳搜索范圍中,不同的聚類數(shù)c得到的VPE值與VFC值呈單調(diào)趨勢,而VXB與VK函數(shù)值均在c=12時單調(diào)性發(fā)生改變。
最后得到不同判別函數(shù)在不同數(shù)據(jù)集上的指標值如表1所示。
%XB 用Xie和Beni的準則來求最優(yōu)聚類數(shù)
% ? 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方法確定的最佳聚類數(shù)cmax
判別函數(shù)VPEVXBVFCVKMovielens數(shù)據(jù)集cmax>25cmax=12cmax>25cmax=12
因此,根據(jù)Xie-Beni方法,本文選取Flixster數(shù)據(jù)集的最佳聚類數(shù)cmax為10,本文選取MovieLens數(shù)據(jù)集的最佳聚類數(shù)cmax為12。
(2)MAE指標比較
模糊C均值聚類算法的關(guān)鍵步驟是確定最佳聚類簇數(shù),為檢驗本節(jié)給出的FCMC CF算法,我們在Movielens和Flixster數(shù)據(jù)集上進行了實驗分析,并將其同K-means、K-medoids和K-mode聚類協(xié)同過濾算法進行了比較,實驗結(jié)果如圖所示。
%FCMC data為模糊C均值聚類的實驗數(shù)據(jù),top代表XB準則下的前10個最佳聚類數(shù),b為該10個最佳聚類數(shù)的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(聚類簇數(shù))'),ylabel('y(Vpe指標)')
k=2:sqrt(size(data,1));
subplot(2,2,2),plot(k,Vxb(k-1),'- or'),xlabel('x(聚類簇數(shù))'),ylabel('y(Vxb指標)')
k=2:sqrt(size(data,1));
subplot(2,2,3),plot(k,Vfs(k-1),'- or'),xlabel('x(聚類簇數(shù))'),ylabel('y(Vfs指標)')
k=2:sqrt(size(data,1));
Predict(i,j,D,data,itemN)
%j代表目標用戶,i為j用戶的鄰居用戶為i用戶集,data為用戶-物品矩陣,D為相似系數(shù)矩陣,item為用戶j要預(yù)測的物品編號
tempu= find(data(j,:)~=0);%發(fā)現(xiàn)用戶所有已評分的項目
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數(shù)據(jù)集不同算法MAE的比較
unction mae = MAE(CS,udata,udatatest,Fuz)
%CS為相似度矩陣,data為訓練集用戶項目矩陣,datatest為測試集用戶項目矩陣,Fuz為標記變量(1為模糊C均值聚類協(xié)同過濾,0為傳統(tǒng)系統(tǒng)過濾)
j=1;
for n=1:5:80%########最近鄰數(shù)
mae(j)=0;%mae為最近鄰為n的情況下的最小均方誤差
k=0;%計數(shù)變量
? for t=1:size(udatatest,1)
? ?
? ?i=topn(CS,t,n);%計算出該用戶的最近鄰用戶集合,t為i目標用戶編號,i為相鄰用戶編號(按相似度從高到低排列),n為n個鄰居用戶數(shù),應(yīng)設(shè)為?
? ?item=find(udatatest(t,:)~=0);%item為測試集中用戶的評價項目
? ?if n>length(i)
? ? ? ? ? continue;
在圖中,橫軸為最近鄰個數(shù) k,縱軸為平均絕對偏差 MAE。曲線CF代表傳統(tǒng)的協(xié)同過濾算法,曲線Kmean CF代表基于K均值聚類的協(xié)同過濾算法,曲線FCMC CF代表基于模糊C均值聚類有效性的協(xié)同過濾算法,曲線K medoids CF代表基于K medoids聚類的協(xié)同過濾算法。
由圖圖和圖可以看到基于有效性指標改進的FCMC CF算法在MAE指標上要明顯優(yōu)于其他算法。在Movielens數(shù)據(jù)集上的實驗結(jié)果表明,F(xiàn)CMC CF得到的MAE值要優(yōu)于其他幾個算法。
(3)召回率和覆蓋率的比較
在接下來的TOP-N實驗中,我們選擇FCMC CF算法與其他算法在召回率、覆蓋率指標上進行比較。
%D為相似系數(shù)矩陣,i為第i個目標用戶,n為前n個最相似的用戶數(shù),輸出為前n個用戶的坐標信息
[a,b]=sort(D(i,:),'descend');%a為從高到低排的相似系數(shù)
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為目標用戶的最近鄰居用戶數(shù)#######默認為3個
for q=1:size(udata,1)%計算每位用戶對每個物品的預(yù)測評分
? ?for w=1:size(udata,2)
? ?I=topn(CS,q,n);%D為相似系數(shù)矩陣,i為第i個目標用戶(即為q),n為前n個最相似的用戶數(shù)(默認為3),輸出為最近鄰居用戶的前n個用戶的坐標信息
? ?rank(q,w)=Predict(I,q,CS,udata,w);%rank為用戶項目預(yù)測評分矩陣,j代表目標用戶(即為q),i為j用戶的鄰居用戶為i用戶集,data為用戶-物品矩陣,D為相似系數(shù)矩陣,item為用戶j要預(yù)測的物品編號(即為w)
? ?end
end
實驗結(jié)果如圖所示。


?圖4 不同算法召回率的比較
在圖中,橫軸代表推薦列表長度N,縱軸分別為召回率和覆蓋率。其中,每個N值對應(yīng)的兩條曲線圖分別為FCMC CF與CF、Kmeans CF對應(yīng)的函數(shù)值。
FCMC CF算法與傳統(tǒng)CF算法和Kmeans CF算法相比,在不同的最近鄰水平下具有較高的召回率和覆蓋率,即新算法在推薦質(zhì)量上有所改善,有效地提升了推薦精度。
%%預(yù)測函數(shù)
predictfun2( CS, t,item ,n,udata)
%%其中CS為相似度矩陣
%%item為預(yù)測的項目編號
%%t為目標用戶
%%n為近鄰個數(shù)
%%udata為用戶-項目評分矩陣
?
%%得到的預(yù)測評分為2.24
%%實際評分為3

最受歡迎的見解
1.R語言k-Shape算法股票價格時間序列聚類
2.R語言基于溫度對城市層次聚類、kmean聚類、主成分分析和Voronoi圖
3.R語言對用電負荷時間序列數(shù)據(jù)進行K-medoids聚類建模和GAM回歸
4.r語言鳶尾花iris數(shù)據(jù)集的層次聚類
5.Python Monte Carlo K-Means聚類實戰(zhàn)
6.用R進行網(wǎng)站評論文本挖掘聚類
7.R語言KMEANS均值聚類和層次聚類:亞洲國家地區(qū)生活幸福質(zhì)量異同可視化
8.PYTHON用戶流失數(shù)據(jù)挖掘:建立邏輯回歸、XGBOOST、隨機森林、決策樹、支持向量機、樸素貝葉斯模型和KMEANS聚類用戶畫像
9.R語言基于Keras的小數(shù)據(jù)集深度學習圖像分類