#Matrix Factorization ###①linearNetwork Hypothesis 機器學習的做用就是要從一堆數據中學習到學習到某種能力,而後用這種skill來預測將來的結果。好比一個電影推薦的例子,咱們手上有不少的電影數據,如今就須要訓練一個機器學習的模型來使得這個模型能夠預測一個新來的用戶會喜歡什麼電影,而後推薦過去。或者是對用戶沒有看過的電影進行評分預測。git
Nefix公司曾經舉辦過一場比賽,包含了大量的電影數據信息和近一億個排名信息。用$$x_n = (n)$$那麼,問題來了,第幾個用戶的這個n是沒有什麼實際意義的,也就是一個抽象特徵,意味着只是一個編號,隨便給只要不重複便可。可是輸出方面就是很正常了:$$y_n = r_{nm}$$表示的就是第n個用戶對第m部電影的排名預測。
仔細看一下這些ID特徵,一般就是數字表示,好比1126,5566,6211等。這些數字編號並無什麼太大的意義,都只是一種ID編號而已。這類特徵,被稱爲類別特徵,好比:ID號,blood type,programming languages等等,而許多機器學習模型都是數值特徵,好比linear model,都是一串的數據,決策樹例外,能夠是類別區分。
因此要創建一個推薦系統的機器學習模型,就要把用戶的ID號這些categorical features轉換成numerical features,這種轉換其實就是一個編碼的過程了。
一種比較簡單的就是binary vector encode。也就是說,若是輸入樣本有N個,就構造一個維度爲N的向量。對應第n個樣本那麼第n個位置就是1其餘都是0,好比下面的一個例子:
有點像one-hot向量,但不是。編碼以後,那麼用戶的ID就是binary vector了。要注意的是用戶是不必定對每個電影都會進行評分,能夠就是評了一部分而已:
咱們就是要預測那些沒有被評分的電影。**對於這個過程,咱們要作的就是掌握每個用戶對於不一樣電影的喜好程度,掌握這個電影的各類特徵factor,好比有多少的喜劇,有多少的懸疑等等。這其實就是一個特徵提取的過程。**這裏使用的是$$N - d - M$$的網絡,N就是輸入的個數,d就是隱藏層的個數,也就是提取出特徵的個數,M就是最後輸出類別的個數。這個結構和以前咱們所看的autoencode很是像,可是不一樣的就是autoencode是最後輸出儘量的要擬合輸入。
中間還有一個小問題,中間有一個非線性的函數,目的就是要使得整個模型nonlinear化,能夠處理非線性的數據,**可是在這裏需不須要呢?**實際上是不須要的,由於輸入的向量是encoding獲得的,大部分是0,小部分是1,那麼就意味着這後面乘上的W權值其實就是隻用一行有用,其餘都是0,至關於只有一個權重值進入到tanh函數進行運算。從效果上來講,tanh(x)與x是無差異的,只是單純通過一個函數的計算,並不影響最終的結果,修改權重值便可獲得一樣的效果。由於進入計算以後,修改權值就能夠達到效果了,而以前須要的緣由是,以前的結果都是須要多個權值就行組合,不加tanh就是線性組合了,因此加來變成非線性。這裏就只有一個,不存在什麼組合,因此直接使用便可。 改進一下,就是下面的圖像了: github
對於這種結構,天然就是linearNetwork了,這個網絡結構裏面:$$W_{ni}^{(1)}$$就是Nxd,用V來表示,其實應該是$$V^T$$V的轉置,隱藏層到輸出層:$$W_{im}^{(2)}$$是dxM,因此進行線性模型以後:算法
###②Basic Matrix Factorization 上面的變換VX咱們看作是一種特徵轉換,φ(x),那麼就能夠變成這樣:
咱們須要作的就是看看排名WV和y的結果要差很少,也就是作擬合,因此error function就是square error function:
上式中,灰色的部分是常數,並不影響最小化求解,因此能夠忽略。接下來,咱們就要求出Ein最小化時對應的V和W解。 根據上式的分解: