mahout基于矩阵分解的协同过滤实例 ALS——WR

问题提出:对于协同过滤,我们就是要预测用户所喜欢的但是又没有发现的物品,下面给出一个明确的评分矩阵,设为A,但是A有一部分没有值,表明用户没有对此物品评分,于是我们需要预测出没有值的评分部分。

解决方法:
我们知道有基于用户和基于物品的协同过滤算法,通过计算用户或物品的相似度来求得所缺失的打分。这里将潜在因子模型方法。 用户和物品分布在一个K维的特征空间,用户的未知评分可以简单的通过相应的用户和物品的向量的乘积得到。 也就是将矩阵A分解成两个矩阵U(用户特征矩阵)和M(物品特征矩阵)

可以通过计算U和M’的乘积A_k来接近A
A_k=UM’

这样就预测到了用户对未知物品的评分。

在mohout上实践

解压出ratings.dat文件,利用如下命令转换成用逗号分开的ratings.csv文件,
$cat ratings.dat |sed -e s/::/,/g| cut -d, -f1,2,3 > ratings.csv

将数据上传到hdfs

1.将rating分为预测集(10%)和训练集(90%$mahout splitDataset -i /cf/movieLens/ratings.csv -o /cf/movieLens/dataset –trainingPercentage 0.9 –probePercentage 0.1


2. 运行分布式的ALS-WR算法来进行矩阵的分解(matrix factorization)

    $mahout parallelALS –i /cf/movieLens/dataset/trainingSet/ -o /cf/movieLens/als/out –numFeatures 20 –numIterations 10 –lambda 0.065
之后会在/cf/movieLens/als/out生成M和U以及保存的评分


3. 通过预测集来对模型进行评价,评价标准是RMSE

    $mahout evaluateFactorization –i /cf/movieLens/dataset/probeSet/ -o /cf/movieLens/als/rmse/ -userFeatures /cf/movieLens/als/out/U/ –itemFeatures /cf/movieLens/als/out/M/

RMSE结果会输出在/cf/movieLens/als/rmse/rmse.txt


4. 最后进行推荐

    $mahout recommendfactorized –i /cf/movieLens/als/out/userRatings/ -o /cf/movieLens/recommendations/ –userFeatures /cf/movieLens/als/out/U/ –itemFeatures /cf/movieLens/als/out/M/ –numRecommendations 6 –maxRating 5

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值