十六、推薦系統(Recommender Systems)
16.1 問題形式化
參考視頻: 16 - 1 - Problem Formulation (8 min).mkv
在接下來的視頻中,我想講一下推薦系統。我想講推薦系統有兩個原因:
第一、僅僅因爲它是機器學習中的一個重要的應用。在過去幾年,我偶爾訪問硅谷不同的技術公司,我常和工作在這兒致力於機器學習應用的人們聊天,我常問他們,最重要的機器學習的應用是什麼,或者,你最想改進的機器學習應用有哪些。我最常聽到的答案是推薦系統。現在,在硅谷有很多團體試圖建立很好的推薦系統。因此,如果你考慮網站像亞馬遜,或網飛公司或易趣,或iTunes Genius,有很多的網站或系統試圖推薦新產品給用戶。如,亞馬遜推薦新書給你,網飛公司試圖推薦新電影給你,等等。這些推薦系統,根據瀏覽你過去買過什麼書,或過去評價過什麼電影來判斷。這些系統會帶來很大一部分收入,比如爲亞馬遜和像網飛這樣的公司。因此,對推薦系統性能的改善,將對這些企業的有實質性和直接的影響。
推薦系統是個有趣的問題,在學術機器學習中因此,我們可以去參加一個學術機器學習會議,推薦系統問題實際上受到很少的關注,或者,至少在學術界它佔了很小的份額。但是,如果你看正在發生的事情,許多有能力構建這些系統的科技企業,他們似乎在很多企業中佔據很高的優先級。這是我爲什麼在這節課討論它的原因之一。
我想討論推薦系統地第二個原因是:這個班視頻的最後幾集我想討論機器學習中的一些大思想,並和大家分享。這節課我們也看到了,對機器學習來說,特徵是很重要的,你所選擇的特徵,將對你學習算法的性能有很大的影響。因此,在機器學習中有一種大思想,它針對一些問題,可能並不是所有的問題,而是一些問題,有算法可以爲你自動學習一套好的特徵。因此,不要試圖手動設計,而手寫代碼這是目前爲止我們常乾的。有一些設置,你可以有一個算法,僅僅學習其使用的特徵,推薦系統就是類型設置的一個例子。還有很多其它的,但是通過推薦系統,我們將領略一小部分特徵學習的思想,至少,你將能夠瞭解到這方面的一個例子,我認爲,機器學習中的大思想也是這樣。因此,讓我們開始討論推薦系統問題形式化。
我們從一個例子開始定義推薦系統的問題。
假使我們是一個電影供應商,我們有 5 部電影和 4 個用戶,我們要求用戶爲電影打分。
前三部電影是愛情片,後兩部則是動作片,我們可以看出Alice和Bob似乎更傾向與愛情片, 而 Carol 和 Dave 似乎更傾向與動作片。並且沒有一個用戶給所有的電影都打過分。我們希望構建一個算法來預測他們每個人可能會給他們沒看過的電影打多少分,並以此作爲推薦的依據。
下面引入一些標記:
代表用戶的數量
代表電影的數量
如果用戶j給電影 i 評過分則
代表用戶 j給電影i的評分
代表用戶 j評過分的電影的總數
16.2 基於內容的推薦系統
參考視頻: 16 - 2 - Content Based Recommendations (15 min).mkv
在一個基於內容的推薦系統算法中,我們假設對於我們希望推薦的東西有一些數據,這些數據是有關這些東西的特徵。
在我們的例子中,我們可以假設每部電影都有兩個特徵,如代表電影的浪漫程度,代表電影的動作程度。
則每部電影都有一個特徵向量,如是第一部電影的特徵向量爲[0.9 0]。
下面我們要基於這些特徵來構建一個推薦系統算法。 假設我們採用線性迴歸模型,我們可以針對每一個用戶都訓練一個線性迴歸模型,如是第一個用戶的模型的參數。 於是,我們有:
用戶 j 的參數向量
電影 i 的特徵向量
對於用戶 j 和電影 i,我們預測評分爲:
代價函數
針對用戶 j,該線性迴歸模型的代價爲預測誤差的平方和,加上正則化項:
其中 表示我們只計算那些用戶 j評過分的電影。在一般的線性迴歸模型中,誤差項和正則項應該都是乘以1/2m,在這裏我們將m去掉。並且我們不對方差項進行正則化處理。
上面的代價函數只是針對一個用戶的,爲了學習所有用戶,我們將所有用戶的代價函數求和:
如果我們要用梯度下降法來求解最優解,我們計算代價函數的偏導數後得到梯度下降的更新公式:
16.3 協同過濾
參考視頻: 16 - 3 - Collaborative Filtering (10 min).mkv
在之前的基於內容的推薦系統中,對於每一部電影,我們都掌握了可用的特徵,使用這些特徵訓練出了每一個用戶的參數。相反地,如果我們擁有用戶的參數,我們可以學習得出電影的特徵。
但是如果我們既沒有用戶的參數,也沒有電影的特徵,這兩種方法都不可行了。協同過濾算法可以同時學習這兩者。
我們的優化目標便改爲同時針對和進行。
對代價函數求偏導數的結果如下:
注:在協同過濾從算法中,我們通常不使用方差項,如果需要的話,算法會自動學得。 協同過濾算法使用步驟如下:
1.初始 爲一些隨機小值
2.使用梯度下降算法最小化代價函數
3.在訓練完算法後,我們預測爲用戶 j 給電影 i的評分
通過這個學習過程獲得的特徵矩陣包含了有關電影的重要數據,這些數據不總是人能讀懂的,但是我們可以用這些數據作爲給用戶推薦電影的依據。
例如,如果一位用戶正在觀看電影,我們可以尋找另一部電影,依據兩部電影的特徵向量之間的距離的大小。
16.4 協同過濾算法
參考視頻: 16 - 4 - Collaborative Filtering Algorithm (9 min).mkv
協同過濾優化目標:
給定,估計:
給定,估計:
同時最小化和:
16.5 向量化:低秩矩陣分解
參考視頻: 16 - 5 - Vectorization_ Low Rank Matrix Factorization (8 min).mkv
在上幾節視頻中,我們談到了協同過濾算法,本節視頻中我將會講到有關該算法的向量化實現,以及說說有關該算法你可以做的其他事情。
舉例子:
1.當給出一件產品時,你能否找到與之相關的其它產品。
2.一位用戶最近看上一件產品,有沒有其它相關的產品,你可以推薦給他。
我將要做的是:實現一種選擇的方法,寫出協同過濾算法的預測情況。
我們有關於五部電影的數據集,我將要做的是,將這些用戶的電影評分,進行分組並存到一個矩陣中。
我們有五部電影,以及四位用戶,那麼 這個矩陣 Y就是一個5行4列的矩陣,它將這些電影的用戶評分數據都存在矩陣裏:
Movie | Alice (1) | Bob (2) | Carol (3) | Dave (4) |
---|---|---|---|---|
Love at last | 5 | 5 | 0 | 0 |
Romance forever | 5 | ? | ? | 0 |
Cute puppies of love | ? | 4 | 0 | ? |
Nonstop car chases | 0 | 0 | 5 | 4 |
Swords vs. karate | 0 | 0 | 5 | ? |
推出評分:
找到相關影片:
現在既然你已經對特徵參數向量進行了學習,那麼我們就會有一個很方便的方法來度量兩部電影之間的相似性。例如說:電影 i 有一個特徵向量,你是否能找到一部不同的電影 j,保證兩部電影的特徵向量之間的距離和很小,那就能很有力地表明電影i和電影 j 在某種程度上有相似,至少在某種意義上,某些人喜歡電影 i,或許更有可能也對電影 j感興趣。總結一下,當用戶在看某部電影 i的時候,如果你想找5部與電影非常相似的電影,爲了能給用戶推薦5部新電影,你需要做的是找出電影 j,在這些不同的電影中與我們要找的電影 i 的距離最小,這樣你就能給你的用戶推薦幾部不同的電影了。
通過這個方法,希望你能知道,如何進行一個向量化的計算來對所有的用戶和所有的電影進行評分計算。同時希望你也能掌握,通過學習特徵參數,來找到相關電影和產品的方法。
16.6 推行工作上的細節:均值歸一化
參考視頻: 16 - 6 - Implementational Detail_ Mean Normalization (9 min).mkv
讓我們來看下面的用戶評分數據:
如果我們新增一個用戶 Eve,並且 Eve 沒有爲任何電影評分,那麼我們以什麼爲依據爲Eve推薦電影呢?
我們首先需要對結果 Y 矩陣進行均值歸一化處理,將每一個用戶對某一部電影的評分減去所有用戶對該電影評分的平均值:
然後我們利用這個新的 Y 矩陣來訓練算法。 如果我們要用新訓練出的算法來預測評分,則需要將平均值重新加回去,預測,對於Eve,我們的新模型會認爲她給每部電影的評分都是該電影的平均分。