機器學習實戰學習筆記4 奇異值分解(SVD)

2021-07-25 01:44:10 字數 3027 閱讀 1941

奇異值分解(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 是線性代數中一種重要的矩陣分解,是在機器學習領域廣泛應用的演算法,它不光可以用於降維演算法中的特徵分解,還可以用於推薦系統,以及自然語言處理等領域。是很多機器學習演算法的基石。奇異值分解在資料降維中有較多的應用,這裡把它的原...