現在要給所有的使用者推薦電影
首先我們要計算電影之間的相似度,相似度用皮爾遜相關來求電影之間的相似性。
求出相識度如下表所示
比如我們要給a推薦電影,那麼根據a看過的電影與其他電影相似度,進行加權評分,得出要給a推薦的電影。
如表是我們要給所有使用者推薦的電影,其中0代表該使用者看過電影,不需要推薦。
從表中我們可以看出給a推薦最高的電影是4,即尋龍訣電影推薦給a使用者。
**如下所示:
電影相似度**:
[plain]view plain
copy
load('score.mat');
[rowsize,colsize] = size(a);
sim = zeros(colsize);
%% pearson相關係數求電影相似性
for i = 1:colsize-1
for j = i+1:colsize
sum1=0;
sum2=0;
sum3=0;
sum4=0;
sum5=0;
temp = a(:,i)&a(:,j);
index = find(temp);
for k = 1:size(index,1)
sum1 = sum1 + a(index(k),i)*a(index(k),j);
sum2 = sum2 + a(index(k),i);
sum3 = sum3 + a(index(k),j);
sum4 = sum4 + a(index(k),i)^2;
sum5 = sum5 + a(index(k),j)^2;
end
sum23 = (sum2 * sum3)/k;
sum42 = sum4 - sum2^2/k;
sum53 = sum5 - sum3^2/k;
if (sum42~=0&&sum53~=0)
sim(i,j)=(sum1 - sum23)/sqrt(sum42 * sum53);
end
end
end
[plain]view plain
copy
%% 給使用者推薦電影評分
predict_score = zeros(rowsize,colsize);
for i = 1:rowsize
%% 找到使用者已評價的電影的索引
find_temp = find(a(i,:));
%% 找到使用者沒有評價的電影索引
ufind_temp = find(a(i,:)==0);
%% **使用者沒有評價電影的評分值
for j = 1:size(ufind_temp,2)
%% 利用某使用者對所有評價電影乘以未評價電影相似度
for k=1:size(find_temp,2)
predict_score(i,ufind_temp(j)) = predict_score(i,ufind_temp(j)) + a(i,find_temp(k))*sim(find_temp(k),ufind_temp(j));
end
end
end
協同過濾推薦演算法 推薦演算法 基於協同過濾CF
前邊我們已經介紹了推薦演算法裡的基於內容的推薦演算法cb,今天我們來介紹一下基於協同的推薦演算法collaboration filtering cf 協同過濾是乙個利用群體智慧型的乙個演算法,舉乙個簡單的例子,如果放假了你想去北京玩幾天,但是不知道北京都有哪些好玩的,你會怎麼做?你可能會上網查一下的...
協同過濾演算法 基於使用者
背景 使用基於使用者的協同過濾演算法進行 讀取檔案,處理每一行資料,把使用者id和 id轉化為long型別 因為協同過濾模型這兩列為long類 並轉化為datamodel 模型輸入資料 轉化出使用者評分矩陣 沒有的填充0 如下表所示 部分 使用者id id110 100101 102103 1041...
協同過濾 基於使用者的協同過濾itemCF
基於使用者的協同過濾演算法也被稱為最近鄰協同過濾或knn k nearest neighbor,k最近鄰演算法 其核心思想就是,首先根據相似度計算出目標使用者的鄰居集合,然後用鄰居使用者評分的加權組合來為目標使用者作推薦。通常這些演算法都可以總結成三步 首先,使用使用者已有的評分來計算使用者之間的相...