很多网站都有猜你喜欢,我对淘宝的推荐还是比较满意的。很多算法都可以实现推荐功能,下面来看一看机器学习的算法:
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);
这个结果好这并不能说明效果就好,我正在研究如何用数据来评价算法好坏,下文见。