奇異值分解(singular value decomposition)演算法,可以將資料對映到低維空間,常用於從有雜訊資料中抽取相關特徵。
(1)先利用svd從資料中構建乙個主題空間;
(2)然後在該空間下計算相似度;
(1)優點:簡化資料,去除雜訊,提高演算法的結果
(2)缺點:資料的轉換可能難以理解
(3)應用:最優化問題、特徵值問題、最小乘方問題、廣義逆矩陣問題、資訊檢索、影象壓縮等。
協同過濾是通過將使用者和其他使用者的資料進行對比來實現推薦。當知道兩個使用者或兩個物品之間的相似度時,就可以利用已有資料來**未知使用者的喜好。協同過濾不關心物品的描述屬性,而是按照許多使用者的觀點來計算相似度。
相似度的計算主要有兩種方法:基於物品(item-based)的相似度和基於使用者(user-based)的相似度。具體選擇哪一種,取決於使用者或物品的數量。當使用者數量遠大於物品種類時(如電商**推薦、電影推薦),更傾向於使用基於物品相似度的計算方法。
常見的相似度計算方法有三種:
(1)歐氏距離計算相似度:
(2)pearson相關係數計算相似度:
(3)余弦計算相似度:
現在構建乙個推薦引擎,該推薦引擎關注的是餐館食物的推薦。當乙個人外出吃飯時,如果不能確定該到哪兒吃飯,該點什麼菜。我們的推薦系統就可以給他提供乙個個性化推薦。
構建餐館菜餚推薦系統時,主要分兩個階段:
第一階段,先構建乙個基本的推薦系統,能夠尋找使用者沒有嚐過的菜餚。
第二階段,通過svd來減少特徵空間並提高推薦的效果。
推薦系統的過程流程是:給定乙個使用者,系統會為此使用者返回n個最好的推薦菜。為了實現這一點,我們需要做到:
(1)尋找使用者沒有評級的菜餚,即使用者—物品矩陣中的0值;
(2)在使用者沒有評級的所有物品中,對每個物品預計乙個可能的評級分數。
(3)對這些物品的評分從高到低進行排序,返回前n個物品。
基本推薦系統的**如下所示:
# -*- coding: utf-8 -*-
"""created on thu dec 15 11:02:00 2016
@author: administrator
"""from numpy import *
from numpy import linalg as la
defloadexdata
():return [[1,1,1,0,0],
[2,2,2,0,0],
[1,1,1,0,0],
[5,5,5,0,0],
[1,1,0,2,2],
[0,0,0,3,3],
[0,0,0,1,1]]
#相似度計算
#1.使用歐氏距離計算相似度
defeulidsim
(ina,inb):
return
1.0/(1.0 + la.norm(ina - inb))
#2.使用pearson相關係數計算相似度
defpearsonsim
(ina,inb):
if len(ina) < 3 :
return
1.0return
0.5 + 0.5 * corrcoef(ina,inb,rowvar = 0)[0][1]
#3.使用余弦相似度計算相似度
defcosinesim
(ina,inb):
num = float(ina.t*inb)
denom = la.norm(ina) * la.norm(inb)
return
0.5 + 0.5 * (num / denom)
#基於物品相似度的推薦引擎
defstandest
(datamat,user,simmeas,item):
n = shape(datamat)[1]
simtotal = 0.0
ratsimtotal = 0.0
for j in range(n):
userrating = datamat[user,j]
if userrating == 0:
continue
overlap = nonzero(logical_and(datamat[:,item].a>0,datamat[:,j].a>0))[0]
if len(overlap) == 0:
similarity = 0
else:
similarity = simmeas(datamat[overlap,item],datamat[overlap,j])
#simtotal += similarity
ratsimtotal += similarity * userrating
if simtotal == 0 :
return
0else:
return ratsimtotal / simtotal
#def
recommend
(datamat,user,n=3,simmeas=cosinesim,estmethod=standest):
unrateditems = nonzero(datamat[user,:].a == 0)[1]
if len(unrateditems) == 0 :
return
'you rated everything'
itemscores =
for item in unrateditems:
estimatedscore = estmethod(datamat,user,simmeas,item)
return sorted(itemscores,key=lambda jj:jj[1],reverse=true)[:n]
機器學習 奇異值分解
奇異值分解是一種矩陣因子分解方法,是線性代數概念,但在統計學習中被廣泛使用,成為其重要工具 主要應用 在主成分分析 潛在語義分析上 奇異值分解的矩陣不需要是方陣,任意矩陣都可以進行分解,都可以表示為三個矩陣的乘積 因子分解 形式,分別是m階正交矩陣 由降序排列的非負對角線元素組成的m n矩形對角矩陣...
奇異值分解 SVD 機器學習實戰第14章)
svd 奇異值分解 優點 簡化資料,去除雜訊點,提高演算法的結果 缺點 資料的轉換可能難以理解 適用於資料型別 數值型。通過svd對資料的處理,我們可以使用小得多的資料集來表示原始資料集,從有雜訊的資料中抽取相關特徵,這樣做實際上是去除了雜訊和冗餘資訊,以此達到了優化資料 提高結果的目的。最早的sv...
SVD奇異值分解 機器學習
簡介 奇異值分解 singular value decomposition 是線性代數中一種重要的矩陣分解,是在機器學習領域廣泛應用的演算法,它不光可以用於降維演算法中的特徵分解,還可以用於推薦系統,以及自然語言處理等領域。是很多機器學習演算法的基石。奇異值分解在資料降維中有較多的應用,這裡把它的原...