2015年1月14日 星期三

[機器學習](八)基於內容之推薦系統(Content Based Recommendations)

直接舉例:


這裡給出一些定義:

${ n }_{ u }$代表使用者數量
${ n }_{ m }$代表電影數量
r(i,j)代表使用者j是否有對電影i評過分,有則為1,沒有則為0
若使用者j有對電影i評過分,則${ y }^{ (i,j) }$代表使用者j對電影i的評分(0~5顆星)

所以,基於內容之推薦系統的目的就是根據以上資訊,來推測出那些沒有被某使用者評過分的電影可能會是幾分,並將它推薦給那個使用者。


基於內容之推薦:



這邊假設有額外兩個變數:
${ x }_{ 1 }$:負責計算此電影的浪漫指數。
${ x }_{ 2 }$:負責計算此電影的動作指數。

對於每部電影的特徵我們可以把它寫成一個特徵向量。例如電影1有兩個特徵${ x }_{ 1 }$與${ x }_{ 2 }$,以及總是會加上的${ x }_{ 0 }$=1:

其特徵向量${ x }^{ (1) }=\begin{bmatrix} 1 \\ 0.9 \\ 0 \end{bmatrix}$,以此類推。

為了做預測,我們可以將「對使用者評分的預測」看作是獨立的線性回歸問題。我們可以針對每個使用者j去學習一個參數向量${ \Theta  }^{ ( j ) }\in { R }^{ 3 }$,其中${ R }^{ ( n+1 ) }$,n為特徵數目。再來,就是預測使用者j會對電影i評${ ({ \Theta  }^{ (j) }) }^{ T }{ x }^{ (i) }$分,這就是使用者的參數向量${ \Theta  }^{ (j) }$與電影的特徵向量${ x }^{ (i) }$之間的內積。

首先,我們想預測Alice會對其還沒評過分的電影3評幾分,則我們有:

Alice的參數向量(假設的):${ \Theta  }^{ (1) }=\begin{bmatrix} 0 \\ 5 \\ 0 \end{bmatrix}$

電影3的特徵向量:${ x }^{ (3) }=\begin{bmatrix} 1 \\ 0.99 \\ 0 \end{bmatrix}$

則對於電影3,我們預測Alice可能的評分為:${ ({ \Theta  }^{ (1) }) }^{ T }{ x }^{ (3) }=5 * 0.99=4.95$

因此,針對使用者j,其對電影i,我們所預測的評分為${ ({ \Theta  }^{ (j) }) }^{ T }{ x }^{ (i) }$分。


假設現在又有一個變數${ m }^{ (j) }$代表被使用者j評分過的電影數量,則為了學習${ \Theta  }^{ ( j ) }$,這又是個線性回歸與正規化的問題,也就是:

$\underset { { \Theta  }^{ (j) } }{ min } \frac { 1 }{ 2{ m }^{ (j) } } \sum _{ i:r(i,j)=1 }^{  }{ { ({ ({ \Theta  }^{ (j) }) }^{ T }({ x }^{ (i) })-{ y }^{ (i,j) }) }^{ 2 } } +\frac { \lambda  }{ 2{ m }^{ (j) } } \sum _{ k=1 }^{ n }{ { ({ \Theta  }_{ k }^{ (j) }) }^{ 2 } }$

在推薦系統中,我們要簡化這個式子,丟掉${ m }^{ (j) }$這個常數,結果應該還會是一樣,也就是:

$\underset { { \Theta  }^{ (j) } }{ min } \frac { 1 }{ 2 } \sum _{ i:r(i,j)=1 }^{  }{ { ({ ({ \Theta  }^{ (j) }) }^{ T }({ x }^{ (i) })-{ y }^{ (i,j) }) }^{ 2 } } +\frac { \lambda  }{ 2 } \sum _{ k=1 }^{ n }{ { ({ \Theta  }_{ k }^{ (j) }) }^{ 2 } }$

以上是針對單一使用者j的${ \Theta  }^{ ( j ) }$,然而推薦系統是要學習所有使用者的$\Theta$,也就是:

$\underset { { \Theta  }^{ (1) },...,{ \Theta  }^{ ({ n }_{ u }) } }{ min } \frac { 1 }{ 2 } \sum _{ j=1 }^{ { n }_{ u } }{ \sum _{ i:r(i,j)=1 }^{  }{ { ({ ({ \Theta  }^{ (j) }) }^{ T }({ x }^{ (i) })-{ y }^{ (i,j) }) }^{ 2 } }  } +\frac { \lambda  }{ 2 } \sum _{ j=1 }^{ { n }_{ u } }{ \sum _{ k=1 }^{ n }{ { ({ \Theta  }_{ k }^{ (j) }) }^{ 2 } }  } $

這樣就可以得到屬於每個使用者的參數向量${ \Theta  }^{ (1) }$到${ \Theta  }^{ ({ n }_{ u }) }$。

這個最佳化演算法我們叫它$J({ \Theta  }^{ (1) }, ... ,{ \Theta  }^{ ({ n }_{ u }) })$,並搭配梯度下降法來更新${ \Theta  }_{ k }^{ (j) }$。


以上就是基於內容之推薦系統的眼算法,因為我們假設我們擁有每部電影的一些特徵,例如這部電影浪漫指數為多少,動作指數為多少等等,藉由這些特徵來判斷每部電影的內容偏向何種類型,並藉此判斷該如何推薦。

但對於許多電影我們並沒有這些特徵,因為這些特徵必須依靠別人看完電影後告訴你每部電影有多浪漫或是多動作,這很困難且耗時,而且你不只會希望擁有浪漫與動作這兩種特徵的指數而已,你還會想要更多特徵的指數,而你該怎樣得到這些特徵?

因此,下一節我們將要討論不是基於內容的推薦系統,其不需要依靠電影的特徵,就可以判斷該如何推薦,也就是基於「協同過濾」之推薦系統。

沒有留言:

張貼留言