天天看點

機器學習面試- 推薦系統的常用算法

● 請你說一說推薦算法,fm,lr,embedding

參考回答:

推薦算法:

基于人口學的推薦、基于内容的推薦、基于使用者的協同過濾推薦、基于項目的協同過濾推薦、基于模型的協同過濾推薦、基于關聯規則的推薦

FM:

機器學習面試- 推薦系統的常用算法

LR:

邏輯回歸本質上是線性回歸,隻是在特征到結果的映射中加入了一層邏輯函數g(z),即先把特征線性求和,然後使用函數g(z)作為假設函數來預測。g(z)可以将連續值映射到0 和1。g(z)為sigmoid function.

機器學習面試- 推薦系統的常用算法

機器學習面試- 推薦系統的常用算法

sigmoid function 的導數如下:

機器學習面試- 推薦系統的常用算法

邏輯回歸用來分類0/1 問題,也就是預測結果屬于0 或者1 的二值分類問題。這裡假設了二值滿足伯努利分布,也就是

機器學習面試- 推薦系統的常用算法

其也可以寫成如下的形式:

機器學習面試- 推薦系統的常用算法

對于訓練資料集,特征資料x={x1, x2, … , xm}和對應的分類标簽y={y1, y2, … , ym},假設m個樣本是互相獨立的,那麼,極大似然函數為:

機器學習面試- 推薦系統的常用算法

log似然為:

機器學習面試- 推薦系統的常用算法

如何使其最大呢?與線性回歸類似,我們使用梯度上升的方法(求最小使用梯度下降),那麼

機器學習面試- 推薦系統的常用算法

機器學習面試- 推薦系統的常用算法

如果隻用一個訓練樣例(x,y),采用随機梯度上升規則,那麼随機梯度上升更新規則為:

機器學習面試- 推薦系統的常用算法

Embedding:

Embedding在數學上表示一個maping:

機器學習面試- 推薦系統的常用算法

,也就是一個function。其中該函數滿足兩個性質:1)injective (單射的):就是我們所說的單射函數,每個Y隻有唯一的X對應;2)structure-preserving(結構儲存):比如在X所屬的空間上

機器學習面試- 推薦系統的常用算法

,那麼映射後在Y所屬空間上同理

機器學習面試- 推薦系統的常用算法

那麼對于word embedding,就是找到一個映射(函數)将單詞(word)映射到另外一個空間(其中這個映射具有injective和structure-preserving的特點),生成在一個新的空間上的表達,該表達就是word representation。

● 協同過濾的itemCF,userCF差別适用場景

參考回答:

Item CF 和 User CF兩個方法都能很好的給出推薦,并可以達到不錯的效果。但是他們之間還是有不同之處的,而且适用性也有差別。下面進行一下對比

計算複雜度:

Item CF 和 User CF 是基于協同過濾推薦的兩個最基本的算法,User CF 是很早以前就提出來了,Item CF 是從 Amazon 的論文和專利發表之後(2001 年左右)開始流行,大家都覺得 Item CF 從性能和複雜度上比 User CF 更優,其中的一個主要原因就是對于一個線上網站,使用者的數量往往大大超過物品的數量,同時物品的資料相對穩定,是以計算物品的相似度不但計算量較小,同時也不必頻繁更新。但我們往往忽略了這種情況隻适應于提供商品的電子商務網站,對于新聞,部落格或者微内容的推薦系統,情況往往是相反的,物品的數量是海量的,同時也是更新頻繁的,是以單從複雜度的角度,這兩個算法在不同的系統中各有優勢,推薦引擎的設計者需要根據自己應用的特點選擇更加合适的算法。

适用場景:

在非社交網絡的網站中,内容内在的聯系是很重要的推薦原則,它比基于相似使用者的推薦原則更加有效。比如在購書網站上,當你看一本書的時候,推薦引擎會給你推薦相關的書籍,這個推薦的重要性遠遠超過了網站首頁對該使用者的綜合推薦。可以看到,在這種情況下,Item CF 的推薦成為了引導使用者浏覽的重要手段。同時 Item CF 便于為推薦做出解釋,在一個非社交網絡的網站中,給某個使用者推薦一本書,同時給出的解釋是某某和你有相似興趣的人也看了這本書,這很難讓使用者信服,因為使用者可能根本不認識那個人;但如果解釋說是因為這本書和你以前看的某本書相似,使用者可能就覺得合理而采納了此推薦。

相反的,在現今很流行的社交網絡站點中,User CF 是一個更不錯的選擇,User CF 加上社會網絡資訊,可以增加使用者對推薦解釋的信服程度。

● 推薦系統的大概步驟,解決冷啟動。。。

參考回答:

步驟:1)收集使用者的所有資訊。2)使用大資料計算平台對收集的資訊進行處理,的到使用者偏好資料。3)将偏好資料導入喜好類型計算算法中進行預算計算,的到預算結果。4)将推薦的結果導入資料庫(redis、hbase)。5)發開一個推薦引擎,對外開放接口,輸出推薦結果。

解決冷啟動的方案:

1)提供非個性化的推薦

最簡單的例子就是提供熱門排行榜,可以給使用者推薦熱門排行榜,等到使用者資料收集到一定的時候,再切換為個性化推薦。例如Netflix的研究也表明新使用者在冷啟動階段确實是更傾向于熱門排行榜的,老使用者會更加需要長尾推薦

2)利用使用者注冊資訊

使用者的注冊資訊主要分為3種:(1)擷取使用者的注冊資訊;(2)根據使用者的注冊資訊對使用者分類;(3)給使用者推薦他所屬分類中使用者喜歡的物品。

3)選擇合适的物品啟動使用者的興趣

使用者在登入時對一些物品進行回報,收集使用者對這些物品的興趣資訊,然後給使用者推薦那些和這些物品相似的物品。一般來說,能夠用來啟動使用者興趣的物品需要具有以下特點:

比較熱門,如果要讓使用者對物品進行回報,前提是使用者得知道這是什麼東西;

具有代表性和區分性,啟動使用者興趣的物品不能是大衆化或老少鹹宜的,因為這樣的物品對使用者的興趣沒有區分性;

啟動物品集合需要有多樣性,在冷啟動時,我們不知道使用者的興趣,而使用者興趣的可能性非常多,為了比對多樣的興趣,我們需要提供具有很高覆寫率的啟動物品集合,這些物品能覆寫幾乎所有主流的使用者興趣

4)利用物品的内容資訊

用來解決物品的冷啟動問題,即如何将新加入的物品推薦給對它感興趣的使用者。物品冷啟動問題在新聞網站等時效性很強的網站中非常重要,因為這些網站時時刻刻都有新物品加入,而且每個物品必須能夠再第一時間展現給使用者,否則經過一段時間後,物品的價值就大大降低了。

5)采用專家标注

很多系統在建立的時候,既沒有使用者的行為資料,也沒有充足的物品内容資訊來計算物品相似度。這種情況下,很多系統都利用專家進行标注。

6)利用使用者在其他地方已經沉澱的資料進行冷啟動

以QQ音樂舉例:QQ音樂的猜你喜歡電台想要去猜測第一次使用QQ音樂的使用者的口味偏好,一大優勢是可以利用其它騰訊平台的資料,比如在QQ空間關注了誰,在騰訊微網誌關注了誰,更進一步,比如在騰訊視訊剛剛看了一部動漫,那麼如果QQ音樂推薦了這部動漫裡的歌曲,使用者會覺得很人性化。這就是利用使用者在其它平台已有的資料。

再比如今日頭條:它是在使用者通過新浪微網誌等社交網站登入之後,擷取使用者的關注清單,并且爬取使用者最近參與互動的feed(轉發/評論等),對其進行語義分析,進而擷取使用者的偏好。

是以這種方法的前提是,引導使用者通過社交網絡賬号登入,這樣一方面可以降低注冊成本提高轉化率;另一方面可以擷取使用者的社交網絡資訊,解決冷啟動問題。

7)利用使用者的手機等興趣偏好進行冷啟動

Android手機開放的比較高,是以在安裝自己的app時,就可以順路了解下手機上還安裝了什麼其他的app。比如一個使用者安裝了美麗說、蘑菇街、辣媽幫、大姨媽等應用,就可以判定這是女性了,更進一步還可以判定是備孕還是少女。目前讀取使用者安裝的應用這部分功能除了app應用商店之外,一些新聞類、視訊類的應用也在做,對于解決冷啟動問題有很好的幫助。

● 傳統的機器學習算法了解嗎

參考回答:

常見的機器學習算法:

1). 回歸算法:回歸算法是試圖采用對誤差的衡量來探索變量之間的關系的一類算法。回歸算法是統計機器學習的利器。 常見的回歸算法包括:最小二乘法(Ordinary Least Square),邏輯回歸(Logistic Regression),逐漸式回歸(Stepwise Regression),多元自适應回歸樣條(Multivariate Adaptive Regression Splines)以及本地散點平滑估計(Locally Estimated Scatterplot Smoothing)。

2). 基于執行個體的算法:基于執行個體的算法常常用來對決策問題建立模型,這樣的模型常常先選取一批樣本資料,然後根據某些近似性把新資料與樣本資料進行比較。通過這種方式來尋找最佳的比對。是以,基于執行個體的算法常常也被稱為“赢家通吃”學習或者“基于記憶的學習”。常見的算法包括 k-Nearest Neighbor(KNN), 學習矢量量化(Learning Vector Quantization, LVQ),以及自組織映射算法(Self-Organizing Map,SOM)。深度學習的概念源于人工神經網絡的研究。含多隐層的多層感覺器就是一種深度學習結構。深度學習通過組合低層特征形成更加抽象的高層表示屬性類别或特征,以發現資料的分布式特征表示。

3). 決策樹學習:決策樹算法根據資料的屬性采用樹狀結建構立決策模型, 決策樹模型常常用來解決分類和回歸問題。常見的算法包括:分類及回歸樹(Classification And Regression Tree,CART),ID3 (Iterative Dichotomiser 3),C4.5,Chi-squared Automatic Interaction Detection(CHAID), Decision Stump, 随機森林(Random Forest),多元自适應回歸樣條(MARS)以及梯度推進機(Gradient Boosting Machine,GBM)。

4). 貝葉斯方法:貝葉斯方法算法是基于貝葉斯定理的一類算法,主要用來解決分類和回歸問題。常見算法包括:樸素貝葉斯算法,平均單依賴估計(Averaged One-Dependence Estimators,AODE),以及Bayesian Belief Network(BBN)。

5). 基于核的算法:基于核的算法中最著名的莫過于支援向量機(SVM)了。基于核的算法把輸入資料映射到一個高階的向量空間,在這些高階向量空間裡,有些分類或者回歸問題能夠更容易的解決。常見的基于核的算法包括:支援向量機(Support Vector Machine,SVM), 徑向基函數(Radial Basis Function,RBF),以及線性判别分析(Linear Discriminate Analysis,LDA)等。

6). 聚類算法:聚類,就像回歸一樣,有時候人們描述的是一類問題,有時候描述的是一類算法。聚類算法通常按照中心點或者分層的方式對輸入資料進行歸并。是以的聚類算法都試圖找到資料的内在結構,以便按照最大的共同點将資料進行歸類。常見的聚類算法包括 k-Means算法以及期望最大化算法(Expectation Maximization,EM)。

7). 降低次元算法:像聚類算法一樣,降低次元算法試圖分析資料的内在結構,不過降低次元算法是以非監督學習的方式試圖利用較少的資訊來歸納或者解釋資料。這類算法可以用于高維資料的可視化或者用來簡化資料以便監督式學習使用。常見的算法包括:主成份分析(Principle Component Analysis,PCA),偏最小二乘回歸(Partial Least Square Regression,PLS),Sammon映射,多元尺度(Multi-Dimensional Scaling, MDS), 投影追蹤(Projection Pursuit)等。

8). 關聯規則學習:關聯規則學習通過尋找最能夠解釋資料變量之間關系的規則,來找出大量多中繼資料集中有用的關聯規則。常見算法包括 Apriori算法和Eclat算法等。

9). 內建算法:內建算法用一些相對較弱的學習模型獨立地就同樣的樣本進行訓練,然後把結果整合起來進行整體預測。內建算法的主要難點在于究竟內建哪些獨立的較弱的學習模型以及如何把學習結果整合起來。這是一類非常強大的算法,同時也非常流行。常見的算法包括:Boosting,Bootstrapped Aggregation(Bagging),AdaBoost,堆疊泛化(Stacked Generalization,Blending),梯度推進機(Gradient Boosting Machine, GBM),随機森林(Random Forest)。

10). 人工神經網絡:人工神經網絡算法模拟生物神經網絡,是一類模式比對算法。通常用于解決分類和回歸問題。人工神經網絡是機器學習的一個龐大的分支,有幾百種不同的算法。(其中深度學習就是其中的一類算法,我們會單獨讨論),重要的人工神經網絡算法包括:感覺器神經網絡(Perceptron Neural Network), 反向傳遞(Back Propagation),Hopfield網絡,自組織映射(Self-Organizing Map, SOM)。學習矢量量化(Learning Vector Quantization, LVQ)。

RF:通過對訓練資料樣本以及屬性進行有放回的抽樣(針對某一個屬性随機選擇樣本)這裡有兩種,一種是每次都是有放回的采樣,有些樣本是重複的,組成和原始資料集樣本個數一樣的資料集;另外一種是不放回的抽樣,抽取出大約60%的訓練資訊。由此生成一顆CART樹,剩下的樣本資訊作為袋外資料,用來當作驗證集計算袋外誤差測試模型;把抽取出的樣本資訊再放回到原資料集中,再重新抽取一組訓練資訊,再以此訓練資料集生成一顆CART樹。這樣依次生成多顆CART樹,多顆樹組成森林,并且他們的生成都是通過随機采樣的訓練資料生成,是以叫随機森林。RF可以用于資料的回歸,也可以用于資料的分類。回歸時是由多顆樹的預測結果求均值;分類是由多棵樹的預測結果進行投票。正式由于它的随機性,RF有極強的防止過拟合的特性。由于他是由CART組成,是以它的訓練資料不需要進行歸一化,因為每課的建立過程都是通過選擇一個能最好的對資料樣本進行選擇的屬性來建立分叉,是以有以上好處的同時也帶來了一個缺點,那就是忽略了屬性與屬性之間的關系。

K-meas:基本K-Means算法的思想很簡單,事先确定常數K,常數K意味着最終的聚類類别數,首先随機標明初始點為質心,并通過計算每一個樣本與質心之間的相似度(這裡為歐式距離),将樣本點歸到最相似的類中,接着,重新計算每個類的質心(即為類中心),重複這樣的過程,知道質心不再改變,最終就确定了每個樣本所屬的類别以及每個類的質心。由于每次都要計算所有的樣本與每一個質心之間的相似度,故在大規模的資料集上,K-Means算法的收斂速度比較慢。

初始化常數K,随機選取初始點為質心

重複計算一下過程,直到質心不再改變

計算樣本與每個質心之間的相似度,将樣本歸類到最相似的類中

重新計算質心

輸出最終的質心以及每個類

● 用mapreduce實作10億級以上資料的kmeans

參考回答:

算法1.map(key,value)

輸入:全局變量centers,偏移量key,樣本value

輸出:<key’,value>對,其中key’是最近中心的索引,value’是樣本資訊的字元串

從value構造樣本的instance;

minDis=Double.MAX_VALUE;
Index=-1;
For i=0 to centers.length do
dis=ComputeDist(instance,centers[i]);
If dis<minDis{
minDis=dis;
index=i;
}
End For      

把index作為key’;

把不同次元的values構造成value’;

輸出<key’,value’>對;

End

注意這裡的Step 2和Step 3初始化了輔助變量minDis和index;Step 4通過計算找出了與樣本最近的中心點,函數ComputeDist(instance,centers[i])傳回樣本和中心點centers[i]的距離;Step 8輸出了用來進行下一個過程(combiner)的中間資料。

Combine函數. 每個map任務完成之後,我們用combiner去合并同一個map任務的中間結果。因為中間結果是存儲在結點的本地磁盤上,是以這個過程不會耗費網絡傳輸的代價。在combine函數中,我們把屬于相同簇的values求和。為了計算每個簇的對象的平均值,我們需要記錄每個map的每個簇中樣本的總數。Combine函數的僞代碼見算法2.

算法2.combine(key,V)

輸入:key為簇的索引,V為屬于該簇的樣本清單

輸出:<key’,value’>對,key’為簇的索引,value’是由屬于同一類的所有樣本總和以及樣本數所組成的字元串。

初始化一個數組,用來記錄同一類的所有樣本的每個次元的總和,樣本是V中的元素;

初始化一個計數器num為0來記錄屬于同一類的樣本總數;

While(V.hasNext()){

從V.next()構造樣本執行個體instance;

把instance的不同次元值相加到數組

num++;

}

把key作為key’;

構造value’:不同次元的求和結果+num;

輸出<key’,value’>對;

End

Reduce函數. Reduce函數的輸入資料由每個結點的combine函數獲得。如combine函數所描述,輸入資料包括部分樣本(同一類)的求和以及對應樣本數。在reduce函數中,我們可以把同一類的所有樣本求和并且計算出對應的樣本數。是以,我們可以得到用于下一輪疊代的新中心。Reduce函數的僞代碼見算法3。

算法3.Reduce(key,V)

輸入:key為簇的索引,V為來自不同結點的部分總和的樣本清單

輸出:<key’,value’>對,key’為簇的索引,value’是代表新的聚類中心的字元串

初始化一個數組,用來記錄同一類的所有樣本的每個次元的總和,樣本是V中的元素;

初始化一個計數器NUM為0來記錄屬于同一類的樣本總數;

While(V.hasNext()){

從V.next()構造樣本執行個體instance;

把instance的不同次元值相加到數組

NUM+=num;

}

數組的每個元素除以NUM來獲得新的中心坐标;

把key作為key’;

構造value’為所有中心坐标的字元串;

輸出<key’,value’>對;

End

● Kmeans

參考回答:

基本K-Means算法的思想很簡單,事先确定常數K,常數K意味着最終的聚類類别數,首先随機標明初始點為質心,并通過計算每一個樣本與質心之間的相似度(這裡為歐式距離),将樣本點歸到最相似的類中,接着,重新計算每個類的質心(即為類中心),重複這樣的過程,知道質心不再改變,最終就确定了每個樣本所屬的類别以及每個類的質心。由于每次都要計算所有的樣本與每一個質心之間的相似度,故在大規模的資料集上,K-Means算法的收斂速度比較慢。

初始化常數K,随機選取初始點為質心

重複計算一下過程,直到質心不再改變

計算樣本與每個質心之間的相似度,将樣本歸類到最相似的類中

重新計算質心

輸出最終的質心以及每個類

● 協同過濾中的算法怎麼細分

參考回答:

協同過濾算法通過對使用者曆史行為資料挖掘發現使用者的偏好,基于不同的偏好對使用者進行群組劃分并推薦相似的商品。協同過的算法分為兩類分為基于使用者的協同過濾算法和基于物品的協同過濾的算法。基于使用者的協同過濾是基于使用者對物品的偏好找到相鄰鄰居使用者然後将鄰居使用者喜歡的推薦給目前的使用者。基于物品的協同過濾是計算鄰居時采用物品本身,基于使用者對物品的偏好找到相似的物品,然後根據使用者的曆史偏好推薦相似的物品給他。

● FM公式

參考回答:

機器學習面試- 推薦系統的常用算法

● FM公式

參考回答:

機器學習面試- 推薦系統的常用算法

繼續閱讀