协同过滤算法

简介

协同过滤算法常用语推荐系统中,旨在填补用户项目关联矩阵的缺失条目,spark.mllib目前支持基于模型的协同过滤,其中用户和产品由一小组潜在因素描述,可用于预测缺失的条目。spark.mllib使用交替最小二乘法(ALS)算法来学习这些潜在因素。

原理

(先占位,等我这两天搞懂了就填上)

低秩矩阵

最小二乘法

Python实现

参数

参数含义
numBlocks用于并行计算的块数(设置为-1为自动配置)。
rank要使用的特征的数量(也称为潜在因素的数量)。
iterations运行ALS的迭代次数。 ALS通常在20次迭代或更少次收敛到合理的解决方案。
lambda在ALS中指定正则化参数。
implicitPrefs指定是使用显式反馈ALS变体还是适用于隐式反馈数据。
alpha适用于控制偏好观测的基线置信度的ALS的隐式反馈变体的参数。

实现

from __future__ import print_function
from pyspark.mllib.recommendation import ALS, MatrixFactorizationModel, Rating
from pyspark import SparkContext

sc = SparkContext(appName="ALS_Example")

# Load and parse the data
data = sc.textFile("test.data")
ratings = data.map(lambda l: l.split(','))\
    .map(lambda l: Rating(int(l[0]), int(l[1]), float(l[2])))
print("ratings:")
print(ratings.collect())
print("===============")


# Build the recommendation model using Alternating Least Squares
rank = 10
numIterations = 10
model = ALS.train(ratings, rank, numIterations)

# Evaluate the model on traing data
# testdata = ratings.map(lambda p: (p[0], p[1]))
testdata = sc.parallelize([(4, 4), (1, 1), (3, 4)])
print("testdata:")
print(testdata.collect())
print("================")

#
predictions = model.predictAll(testdata).map(lambda r: ((r[0], r[1]), r[2]))
print("predictions:")
print(predictions.collect())
print("================")

ratesAndPreds = ratings.map(lambda r: ((r[0], r[1]), r[2])).join(predictions)
print("ratesAndPreds:")
print(ratesAndPreds.collect())
print("================")

MSE = ratesAndPreds.map(lambda r: (r[1][0] - r[1][1]) **2).mean()
print("Mean Squared Error = " + str(MSE))
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值