1. 程式人生 > >搜索系統10:機器學習算法淺析

搜索系統10:機器學習算法淺析

eric 功能 ood 簡單的 ons 線性回歸 不知道 效果 大堆

很多網站都有猜你喜歡,我對淘寶的推薦還是比較滿意的。很多算法都可以實現推薦功能,下面來看一看機器學習的算法:
1.回歸算法。
回歸的意思大概是,估計這堆數據這個規律,然後找出這個規律,這個過程就是回歸。spark的MLlib中有線性回歸、邏輯回歸、保序回歸三種。

比如, 假設訂單數與價格有f(x)=wx+b這麽一個關系(線性模型),那我就收集一大堆訂單和訂單的價格。但我並不知道w和b這兩個參數是啥,那麽我就可以用mllib來通過我的數據計算出這兩個參數來。
2.聚類與分類算法。
聚類與分類的區別:
聚類是以前不知道有那些分類,通過機器學習來得到分類,比如評價標簽就可以這麽做。
分類是有一些分類,不知一大堆數據中的每個到底該歸為哪一類。比如圖書館有很多書、我們有10個書架分別對應10個分類,怎麽把書分成10類?

分類算法有:貝葉斯、svm支持向量機、決策樹
聚類算法有:Kmeans,LDA主題模型

3.推薦算法

a.ALS交替最小二乘法。
b.協同過濾。
關於基於用戶的協同過濾和基於作品的協同過濾,很多書上都有些。我看《mahout in action》裏有例子,但看了幾遍都沒明白,翻譯的書就是有這個缺點。下圖是另一本中文書裏說的,比較清楚:

技術分享
其實區別就是一個是要算用戶的鄰居,另一個不需要算鄰居就算全部作品的得分,但數據源都是一樣的。在mahout中就只有方法名不一樣,其它都一樣。

如果用mahout,其實代碼是很簡單的,如下:
//model是數據源
UserSimilarity similarity = new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model);
Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
List recommendations = recommender.recommend(1, 1);

這個算法到底好不好呢?如果用mahout的方法,得到查準率與查全率:
RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator();
IRStatistics stats = evaluator.evaluate(recommenderBuilder,null, model, null, 2,GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,1.0);

這個結果好這並不能說明效果就好,我正在研究如何用數據來評價算法好壞,下文見。
技術分享

搜索系統10:機器學習算法淺析