mahout 学习

本文详细介绍了Mahout推荐系统的应用场景与实现方式,包括基于用户的推荐和基于物品的推荐算法,以及这两种方法的特点和适用场景。此外还探讨了Mahout在实际应用中的局限性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------
运行
hadoop jar mahout-examples-0.9-job.jar org.apache.mahout.cf.taste.hadoop.item.RecommenderJob --input /input2/intro.txt --output /out3 --usersFile /users.txt --booleanData --similarityClassname SIMILARITY_COOCCURRENCE

mahout不与hadoop2.2兼容,需要重新编译下载
csdn: mahout0.9 jar支持hadoop2
http://download.youkuaiyun.com/download/fansy1990/7166055

运行n长时间 多个mapper reducer 但是出来的结果还是不对
用户3的结果 3 [106:3.3,102:3.0833333,103:3.0625]
但是正确答案是 103
吐槽一下 mahout太山寨了

-----------------------
Mahout用两种方式来实现推荐引擎
1, 单机
用基于用户,物品,模型的方式
-- 出来的结果很奇怪,很多都不对
2, 分布式
共现矩阵
-- 简单易于理解
-- 易用性好, 可以支持评分或不评分


---------------[b]推荐[/b]------------------
[b]场景[/b]
1, 推荐用户可能感兴趣的商品
2, 推荐用户可能认识的好友
3, 分析大量文章之间的超链接关系
4, 去哪里吃饭

[b]实际运用[/b]
当当,豆瓣会展现买了X1的人也会买X2
淘宝会在一些页面侧面推荐一些你所查询过的物品


[b]推荐算法分为基于用户, 基于物品的[/b]

[b]基于物品 (物以类聚)更加实用 [/b]
基于物品的算法容易理解,更适合于大数据, 而且如果产品小于用户数的话, 性能更优。

公式
物物之间的共生矩阵 * 该用户偏好值的向量
共生矩阵 - 两件商品被同时购买的次数 - 针对所有选定的用户
[table]
||A|B|C|D|
|A|NA|3|4|4|
|B|3|NA|3|2|
|C|4|3|NA|3|
|D|4|2|3|NA|
[/table]

原理
如果用户喜欢物品A, 而且物品A和物品B同时出现的次数很多, 推荐物品B

[b]基于用户 (人以群分)[/b]
从相邻用户中找到推荐物品。
问题是
如何找到相邻用户,选取几个相邻用户作为参考呢?
寻找相邻用户的方法(排除随机寻找)
1, 皮尔逊相关系数 (默认) PersonCorrelationSimiliarity
线性关系, 偏好值一起增大或减小。
类似于余弦相似性,用角度来判断。
再用权重来优化 (Weighting)

2, 欧式距离 最简单
计算偏好度的直线距离


3, 对数似然 LogLikelihood
当偏好度是个boolean型的, 即没有具体的数字时使用。
是谷本系数的增强版


4, 基于聚类
将物品推荐给相似的用户族,而不是具体用户


-----------[b]分类(有监督学习)[/b]----------
[b]分类场景[/b]
1, 过滤垃圾邮件
2, 信用卡欺诈
3, 保险,电信预测客户流失

[b]步骤[/b]
1, 提取特征值
a> 预处理 产生用作训练样本的可分类数据(将多张表的数据转成一行记录)
b> 转换成向量 Vector -- 就是一个map的形式

2, 选择/训练算法 生成model目录
Logistic (S函数, 梯度下降)
朴素贝叶斯 (概率统计)
P(yes|E) = P(E1|yes) *  P(E2|yes) *  P(E3|yes) *  P(E4|yes) *  P(yes) /P(E)
P(no|E) = P(E1|no) *  P(E2|no) *  P(E3|no) *  P(E4|no) *  P(no) /P(E)

随机森林(先训练大量的简单的分类器,然后通过投票机制得出唯一的结果)
k近邻算法 (距离计算,但是运行量大)
决策树 (香农熵, 信息增益)

3, 检验结果
summary
confusion matrix


[b]归一化数值[/b]
将特征值的数据都换算成0-1, 避免结果被特征中的大值所左右。


[b]文本转换成向量[/b]
文本数据是海量的, 其中蕴含大量的知识,文本转换成向量是发现知识的第一步。

[b]向量空间模型 Vector Space Model[/b]
[table]
||word1|w2|w3|
|document1|1|2||
|d2||3||
|d3|10||11|
[/table]


[b]TF-IDF 词频-逆文档频率[/b]
如果包含词语w的文档越少, IDF就越大, 说明w具有很好的类别区分能力。

[b]问题[/b]
自带的贝叶斯只能针对20news, 如果自己新建一个简单的测试用例,就无法运行。


mahout
优点:
和hadoop无缝集成 / 有现存的API,可以直接调用

缺点:
缺少对底层算法的理解 / 出了问题难以解决

python
优点: 对底层比较理解
缺点: 和hadoop集成, 算法都需要自己来写


-----------[b]聚类(无监督学习)[/b]-----------
--聚类有点像自动分类

[b]场景:[/b]
新闻聚类
查看排名靠前的关键字
地图中的中心点 center hub

[b]K-Means步骤[/b]
1, 寻找聚类中心
2, 计算每个点到聚类中心的距离, 并将每个点划分到离该点最近的中心(聚类)。
3, 计算聚类中所有点的坐标平均值,并将这个平均值设为新的聚类中心。
循环上述步骤, 直到聚类收敛 即本次迭代与上次迭代的结果相同。


运行reuters的实例, 可以看到Top Terms(每个聚类中的前10个词的排名)

Top Terms:
comp.graphics => 68.00439453125
jpeg => 55.91266632080078
gif => 29.98711585998535
image => 28.28740692138672
jfif => 27.233814239501953
graphics => 26.90915870666504
tiff => 26.35403060913086
phigs => 25.4221248626709
siggraph => 24.714284896850586

3d => 23.99508666992187


-------------[b]脚本[/b]-----------------
--------------------------------
基于20news 的贝叶斯分类测试
mahout prepare20newsgroups -p 20news-bydate-train/ -o 20news-train/ -a org.apache.lucene.analysis.standard.StandardAnalyzer -c UTF-8
mahout prepare20newsgroups -p 20news-bydate-test/ -o 20news-test/ -a org.apache.lucene.analysis.standard.StandardAnalyzer -c UTF-8
mahout trainclassifier -i 20news-train -o 20news-model -type cbayes -ng 1
mahout testclassifier -d 20news-test -m 20news-model -type cbayes -ng 1 -method sequential
---------------------------------

-------------------------------
logistic分类 - donut.csv
mahout trainlogistic --input donut.csv \
--output ./model \
--target color --categories 2 \
--predictors x y --types numeric \
--features 20 --passes 100 --rate 50

mahout runlogistic --input donut.csv --model ./model \
--auc --confusion
------------------------------


--------------------------
查看mahout生成的文件内容
mahout seqdumper -s part-r-00000 -o part-0
--------------------------

------------------------------
基于20news-test 的聚类测试
mahout seqdirectory -c UTF-8 -i 20news-test/ -o 20news-seqfiles
mahout seq2sparse -i 20news-seqfiles/ -o 20news-vectors -ow
mahout kmeans -i 20news-vectors/tfidf-vectors/ -c 20news-initial-clusters -o 20news-kmeans-clusters -dm org.apache.mahout.common.distance.SquaredEuclideanDistanceMeasure -cd 1.0 -k 20 -x 20 -cl
#mahout clusterdump --seqFileDir 20news-kmeans-clusters/clusters-1 -d 20news-vectors/dictionary.file-0 -dt sequencefile -n 10 -o 2.txt
mahout clusterdump --seqFileDir 20news-kmeans-clusters/clusters-1 -p 20news-kmeans-clusters/clusteredPoints/ -d 20news-vectors/dictionary.file-0 -dt sequencefile -n 10 -o 3.txt
----------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值