降維具體到技術就是奇異值分解SVD,SVD怎麼去實現數據降維,怎麼把這些維度在儘可能少的損失原始信息的狀況下達到比較好的效果,這是SVD的要作的核心。算法
矩陣的行秩和列秩是相等的。 函數
會有一些損失,由於那些垂直於這個空間的座標被咱們給剔除了。SVD試圖去找到一個正交的基底,很好的把咱們的維度給降下來,因此他體現的效果會更好。他的實現很複雜,咱們的重點是理解它。 優化
A[m*n]的理解例如:m(每行)表明一篇文章,n(每列)表明整個詞彙表中詞是否是在咱們的文章裏出現。U和V是不惟一的,他們的行和列可能會交換順序,對角陣上的奇異值怎麼換順序,你相應的U的列就怎麼換順序和相應的V轉置的行就怎麼換順序。3d
科幻-主題的「強度」,U矩陣的每一列都是單位正交基 也就是說每一列的元素平方和是1,V矩陣每一行也都是單位正交基 每一行的元素平方和也是1,因此U和V矩陣相乘,他的長度不會大於1,須要奇異值對他進行放大和縮小進行規約才能體現出最終計算後獲得的矩陣。cdn
V是「電影-主題」類似矩陣,V矩陣每一行對應一個主題,每一列對應一個電影 blog
咱們選前面兩個電影(黑客帝國,異形),把它畫成圖。橫座標能夠理解成黑客帝國,縱座標能夠理解成異形。從座標圖中的能夠看出,它搜索黑客帝國的次數越多,搜索異形的次數也越多。若是咱們用一條直線強硬的表示他的數據分佈的話,假設我就把V1這個向量命名成科幻向量,那麼你在科幻這個向量上的得分高,你在黑客帝國和異形上的得分就高。直線周圍的距離點,咱們能夠理解成偏差。在這個層面上,咱們能夠把原來兩個座標歸一到一個方向上去,這個方向V1其實就是第一個右奇異向量的那個方向。 V1座標軸的方差(「擴散」)其實就是奇異值矩陣對角陣的奇異值的大小。SVD和PCA本質上是同樣,但能用PCA的地方必定能用SVD,能用SVD的地方不必定能用PCA!!it
怎麼證實呢?主成分分析,咱們要算一個A的主成分矩陣其實是算A*A的轉置,而後求出他的特徵根和對應的特徵向量矩陣,而這個特徵向量矩陣其實就是咱們SVD的右奇異向量矩陣(V)io
咱們要觀察兩個用戶是否類似,在原始的維度上很差觀察,但咱們經過將他們降維到主題維度就好觀察了。在主題空間中求向量的夾角。若是他們相近的話,那麼咱們就能夠把d看過而q用戶沒看過的電影推薦推q用戶。在原始的座標系下面q和d他們是徹底正交的,看不出他們任何的關係,而降維到主題維度下他們的夾角是相近的,找到了他們的相關性,即對他們進行了聚類,聚在一塊兒他們比較近。這就是咱們作推薦所用到的一種算法,咱們是經過降維來實現的,降維把不是那麼重要的特徵給剔除出去,而後又保留他的核心主題,找到本來看似不那麼相關,實際上在主題層面上有相關的這種相關性,基於這種相關性給用戶作推薦。微博
這個案例不是由於數據量過大才對他降維,而是由於原始的相關性看不出來,把他降維到主題層面卻可以看出相關性,這是更高級的用法。class
疑問?若是沒有打分數據怎麼辦,那就想辦法找數據,豆瓣的影評,微博評論中提到某部電影的次數等等,給蒐集下來(爬蟲)。
思想是:從A中抽出來一些列做爲一個新的矩陣C,而後從A中也抽出來一些行做爲一個新的矩陣R,而U矩陣咱們能夠認爲是C與R相交的元素位置所對應的那些值(圖中畫的圓圈)求違逆獲得的,保持他們原來的順序不變。在國內工業界用的不是不少,他的特色是算的特別快。
SVD和LFM(在隱語義模型)在推薦系統中那個更經常使用?其實都很經常使用,在實際應用時兩個都試一下,那個好就用哪一個。