
一、基于協同過濾的推薦系統
協同過濾(Collaborative Filtering)的推薦系統的原理是通過將用戶和其他用戶的數據進行比對來實現推薦的。比對的具體方法就是通過計算兩個用戶數據之間的相似性,通過相似性的計算來說明兩個用戶數據之間的相似程度。相似度函數的設計必須滿足度量空間的三點要求,即非負性,對稱性和三角不等性。常用的相似度的計算方法有:歐式距離法、皮爾遜相關系數法和夾角余弦相似度法。具體的可以參見上一篇文章“協同過濾推薦算法(1) ”。
二、面臨的問題
在基本的協同過濾的推薦系統中(主要指上面所提到的基本模型中),我們是在整個空間上計算相似度,進而實現推薦的。但是現實中的數據往往并不是那么規整,普遍的現象就是在用戶數據中出現很多未評分項,如下面所示的數據:
對于這樣的稀疏矩陣,我們利用基本的協同過濾推薦算法的效率必將很低。對于這樣的稀疏矩陣,我們可以利用SVD對其進行降維,將這樣的稀疏矩陣映射到另一個具體的主題空間,SVD降維的原理可以參見博文“SVD奇異值分解”。
三、利用SVD構造主題空間
我們對上面所示的這樣一個矩陣進行SVD分解,分解的結果為:
1、U矩陣
(U矩陣,矩陣U主要反應的是用戶信息)
2、對角陣S
(S矩陣,矩陣S主要反映的是11個奇異值)
3、VT矩陣
(VT矩陣,矩陣VT主要反映的是物品信息)
4、選取奇異值并映射主題空間
奇異值分解公式為:,現在我們要將原始數據映射到反映物品的相互關系中。選取前5個奇異值,奇異值的選取符合能量的規則,選擇出來的奇異值的能量要能反映90%的原始信息。這樣新的主題空間的計算方式為:數據分析師培訓
即可得新的主題空間:
四、實驗的仿真
我們在這樣的數據集上做推薦計算。其中user為2號用戶。
(相似度的計算)
(推薦結果)
MATLAB代碼
主程序
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% 主函數
% 導入數據
%data = [4,4,0,2,2;4,0,0,3,3;4,0,0,1,1;1,1,1,2,0;2,2,2,0,0;1,1,1,0,0;5,5,5,0,0];
data = [2,0,0,4,4,0,0,0,0,0,0;0,0,0,0,0,0,0,0,0,0,5;0,0,0,0,0,0,0,1,0,4,0;3,3,4,0,3,0,0,2,2,0,0;5,5,5,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,5,0,0,5,0;4,0,4,0,0,0,0,0,0,0,5;0,0,0,0,0,4,0,0,0,0,4;0,0,0,0,0,0,5,0,0,5,0;0,0,0,3,0,0,0,0,4,5,0;
1,1,2,1,1,2,1,0,4,5,0];
% reccomendation
%[sortScore, sortIndex] = recommend(data, 3, 'cosSim');
[sortScore, sortIndex] = recommend(data, 2, 'cosSim');
len = size(sortScore);
finalRec = [sortIndex, sortScore];
disp(finalRec);
SVD空間映射的函數
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [ score ] = SVDEvaluate( data, user, simMeas, item )
[m,n] = size(data);
simTotal = 0;
ratSimTotal = 0;
% 奇異值分解
[U S V] = svd(data);
% 求使得保留90%能量的奇異值
sizeN = 0;%記錄維數
[m_1,n_1] = size(S);
a = 0;%求總能量
for i = 1:m_1
a = a + S(i,i)*S(i,i);
end
b = a*0.9;%能量的90%
c = 0;
for i = 1:n_1
c = c + S(i,i)*S(i,i);
if c >= b
sizeN = i;
break;
end
end
%物品降維后的空間
itemTransformed = data' * U(:,1:sizeN) * S(1:sizeN,1:sizeN)^(-1);
for j = 1:n
userRating = data(user, j);%此用戶評價的商品
if userRating == 0 || j == item%只是找到已評分的商品
continue;
end
vectorA = itemTransformed(item,:);
vectorB = itemTransformed(j,:);
switch simMeas
case {'cosSim'}
similarity = cosSim(vectorA,vectorB);
case {'ecludSim'}
similarity = ecludSim(vectorA,vectorB);
case {'pearsSim'}
similarity = pearsSim(vectorA,vectorB);
end
disp(['the ', num2str(item), ' and ', num2str(j), ' similarity is ', num2str(similarity)]);
simTotal = simTotal + similarity;
ratSimTotal = ratSimTotal + similarity * userRating;
end
if simTotal == 0
score = 0;
else
score = ratSimTotal./simTotal;
end
end
推薦的函數
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [ sortScore, sortIndex ] = recommend( data, user, simMeas )
% 獲取data的大小
[m, n] = size(data);%m為用戶,n為商品
if user > m
disp('The user is not in the dataBase');
end
% 尋找用戶user未評分的商品
unratedItem = zeros(1,n);
numOfUnrated = 0;
for j = 1:n
if data(user, j) == 0
unratedItem(1,j) = 1;%0表示已經評分,1表示未評分
numOfUnrated = numOfUnrated + 1;
end
end
if numOfUnrated == 0
disp('the user has rated all items');
end
% 對未評分項打分,已達到推薦的作用
itemScore = zeros(numOfUnrated,2);
r = 0;
for j = 1:n
if unratedItem(1,j) == 1%找到未評分項
r = r + 1;
%score = evaluate(data, user, simMeas, j);
score = SVDEvaluate(data, user, simMeas, j);
itemScore(r,1) = j;
itemScore(r,2) = score;
end
end
%排序,按照分數的高低進行推薦
[sortScore, sortIndex_1] = sort(itemScore(:,2),'descend');
[numOfIndex,x] = size(sortIndex_1(:,1));
sortIndex = zeros(numOfIndex,1);
for m = 1:numOfIndex
sortIndex(m,:) = itemScore(sortIndex_1(m,:),1);
end
end
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25在當今數字化時代,數據分析師的重要性與日俱增。但許多人在踏上這條職業道路時,往往充滿疑惑: 如何成為一名數據分析師?成為 ...
2025-04-24