● 請你說一說推薦算法,fm,lr,embedding
參考回答:
基於人口學的推薦、基於內容的推薦、基於用戶的協同過濾推薦、基於項目的協同過濾推薦、基於模型的協同過濾推薦、基於關聯規則的推薦redis
FM:算法
LR:數據庫
邏輯迴歸本質上是線性迴歸,只是在特徵到結果的映射中加入了一層邏輯函數g(z),即先把特徵線性求和,而後使用函數g(z)做爲假設函數來預測。g(z)能夠將連續值映射到0 和1。g(z)爲sigmoid function.api
則數組
sigmoid function 的導數以下:網絡
邏輯迴歸用來分類0/1 問題,也就是預測結果屬於0 或者1 的二值分類問題。這裏假設了二值知足伯努利分佈,也就是app
其也能夠寫成以下的形式:dom
對於訓練數據集,特徵數據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,隨機選取初始點爲質心
重複計算一下過程,直到質心再也不改變
計算樣本與每一個質心之間的類似度,將樣本歸類到最類似的類中
從新計算質心
輸出最終的質心以及每一個類