ALS推荐算法
Spark MLlib中实现了ALS(Alternating Least Squares)基于协同过滤的推荐算法。
MovieLens数据集
MovieLens数据集收集了大量用户对不同电影的评分,详情见数据集官网http://grouplens.org/datasets/movielens。
下载ml-100k数据至工作目录中,终端输入命令:
mkdir -p ~/pythonwork/PythonProject/data
cd ~/pythonwork/PythonProject/data
wget http://files.grouplens.org/datasets/movielens/ml-100k.zip
unzip -j ml-100k
启动 Hadoop Muti Node Cluster,复制ml-100k至HDFS中
start-all.sh
hadoop fs -mkdir /user/yyf/data
hadoop fs -copyFromLocal -f ~/pythonwork/PythonProject/data /user/yyf/
hadoop fs -ls /user/yyf/data
启动Ipython Notebook(Hadoop YARN-client模式)
终端输入命令:
cd ~/pythonwork/ipynotebook
PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook" HADOOP_CONF_IR=/usr/local/hadoop/etc/hadoop MASTER=yarn-client pyspark
准备数据
ALS算法训练数据的格式是Rating RDD数据类型
1、配置文件读取路径(IPython/Jupyter Notebook中键入以下命令)
global Path
if sc.master[:5]=="local":
Path="file:/home/yyf/pythonwork/PythonProject"
else:
Path="hdfs://master:9000/user/yyf/"
2、导入ml-100k数据u.data
rawUserData=sc.textFile(Path+"data/u.data")
rawUserData.count()
上图,4个字段分别是:用户id、项目(电影)id、评分、评分日期
导入Rating模块,读取rawUserData前3个字段,按照用户id、电影id、用户对电影的评分来编写rawRatings
rawRatings=rawUserData.map(lambda line:line.split("\t")[:3])
## 取前5项
rawRatings.take(5)
3、准备ALS训练数据
ALS训练数据格式 Rating RDD数据类型定义如下:
Rating(user,product,rating)
其中,user字段是用户编号,product是产品编号,rating是用户对产品的评价
第一行表示:编号为196的用户对编号为242的电影的评分为3
统计用户数和电影数:
训练模型
1、导入ALS模块
from pyspark.mllib.recommendation import ALS
使用ALS.train进行训练,两种训练模式:显式评分训练与隐士评分训练:
- 显式评分(Explicit Rating)训练
使用实际的电影评分,ALS.train(ratings,rank,iterations