原文鏈接:https://www.cnblogs.com/zhangyang520/p/10969951.html
參考回答:
基於人口學的推薦、基於內容的推薦、基於用戶的協同過濾推薦、基於項目的協同過濾推薦、基於模型的協同過濾推薦、基於關聯規則的推薦
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 是基於協同過濾推薦的兩個最基本的算法,User CF 是很早以前就提出來了,Item CF 是從 Amazon 的論文和專利發表之后(2001 年左右)開始流行,大家都覺得 Item CF 從性能和復雜度上比 User CF 更優,其中的一個主要原因就是對於一個在線網站,用戶的數量往往大大超過物品的數量,同時物品的數據相對穩定,因此計算物品的相似度不但計算量較小,同時也不必頻繁更新。但我們往往忽略了這種情況只適應於提供商品的電子商務網站,對於新聞,博客或者微內容的推薦系統,情況往往是相反的,物品的數量是海量的,同時也是更新頻繁的,所以單從復雜度的角度,這兩個算法在不同的系統中各有優勢,推薦引擎的設計者需要根據自己應用的特點選擇更加合適的算法。
適用場景:
在非社交網絡的網站中,內容內在的聯系是很重要的推薦原則,它比基於相似用戶的推薦原則更加有效。比如在購書網站上,當你看一本書的時候,推薦引擎會給你推薦相關的書籍,這個推薦的重要性遠遠超過了網站首頁對該用戶的綜合推薦。可以看到,在這種情況下,Item CF 的推薦成為了引導用戶瀏覽的重要手段。同時 Item CF 便於為推薦做出解釋,在一個非社交網絡的網站中,給某個用戶推薦一本書,同時給出的解釋是某某和你有相似興趣的人也看了這本書,這很難讓用戶信服,因為用戶可能根本不認識那個人;但如果解釋說是因為這本書和你以前看的某本書相似,用戶可能就覺得合理而采納了此推薦。
相反的,在現今很流行的社交網絡站點中,User CF 是一個更不錯的選擇,User CF 加上社會網絡信息,可以增加用戶對推薦解釋的信服程度。
● 推薦系統的大概步驟,解決冷啟動。。。
參考回答:
解決冷啟動的方案:
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
參考回答:
輸入:全局變量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,隨機選取初始點為質心
重復計算一下過程,直到質心不再改變
計算樣本與每個質心之間的相似度,將樣本歸類到最相似的類中
重新計算質心
輸出最終的質心以及每個類
● 協同過濾中的算法怎么細分
參考回答:
● FM公式
參考回答:

● FM公式
參考回答:
