根据用户对品牌偏好打分训练ALS模型

2.3 根据用户对品牌偏好打分训练ALS模型

from pyspark.sql.types import StructType, StructField, StringType, IntegerType

schema = StructType([
    StructField("userId", IntegerType()),
    StructField("brandId", IntegerType()),
    StructField("pv", IntegerType()),
    StructField("fav", IntegerType()),
    StructField("cart", IntegerType()),
    StructField("buy", IntegerType())
])
# 从hdfs加载预处理好的品牌的统计数据
brand_count_df = spark.read.csv("hdfs://localhost:8020/preprocessing_dataset/brand_count.csv", header=True, schema=schema)
# brand_count_df.show()
def process_row(r):
    # 处理每一行数据:r表示row对象
    
    # 偏好评分规则:
	#     m: 用户对应的行为次数
    #     该偏好权重比例,次数上限仅供参考,具体数值应根据产品业务场景权衡
	#     pv: if m<=20: score=0.2*m; else score=4
	#     fav: if m<=20: score=0.4*m; else score=8
	#     cart: if m<=20: score=0.6*m; else score=12
	#     buy: if m<=20: score=1*m; else score=20
    
    # 注意这里要全部设为浮点数,spark运算时对类型比较敏感,要保持数据类型都一致
	pv_count = r.pv if r.pv else 0.0
	fav_count = r.fav if r.fav else 0.0
	cart_count = r.cart if r.cart else 0.0
	buy_count = r.buy if r.buy else 0.0

	pv_score = 0.2*pv_count if pv_count<=20 else 4.0
	fav_score = 0.4*fav_count if fav_count<=20 else 8.0
	cart_score = 0.6*cart_count if cart_count<=20 else 12.0
	buy_score = 1.0*buy_count if buy_count<=20 else 20.0

	rating = pv_score + fav_score + cart_score + buy_score
	# 返回用户ID、品牌ID、用户对品牌的偏好打分
	return r.userId, r.brandId, rating
# 用户对品牌的打分数据
brand_rating_df = brand_count_df.rdd.map(process_row).toDF(["userId", "brandId", "rating"])
# brand_rating_df.show()
  • 基于Spark的ALS隐因子模型进行CF评分预测

    • ALS的意思是交替最小二乘法(Alternating Least Squares),是Spark中进行基于模型的协同过滤(model-based CF)的推荐系统算法,也是目前Spark内唯一一个推荐算法。

      同SVD,它也是一种矩阵分解技术,但理论上,ALS在海量数据的处理上要优于SVD。

      更多了解:pyspark.ml.recommendation.ALS

      注意:由于数据量巨大,因此这里不考虑基于内存的CF算法

      参考:为什么Spark中只有ALS

  • 使用pyspark中的ALS矩阵分解方法实现CF评分预测

# 使用pyspark中的ALS矩阵分解方法实现CF评分预测
# 文档地址:https://spark.apache.org/docs/latest/api/python/pyspark.ml.html?highlight=vectors#module-pyspark.ml.recommendation
from pyspark.ml.recommendation import ALS

als = ALS(userCol='userId', itemCol='brandId', ratingCol='rating', checkpointInterval=2)
# 利用打分数据,训练ALS模型
# 此处训练时间较长
model = als.fit(brand_rating_df)
# model.recommendForAllUsers(N) 给用户推荐TOP-N个物品
model.recommendForAllUsers(3).show()
# 将模型进行存储
model.save("hdfs://localhost:9000/models/userBrandRatingModel.obj")
# 测试存储的模型
from pyspark.ml.recommendation import ALSModel
# 从hdfs加载模型
my_model = ALSModel.load("hdfs://localhost:9000/models/userBrandRatingModel.obj")
my_model
# model.recommendForAllUsers(N) 给用户推荐TOP-N个物品
my_model.recommendForAllUsers(3).first()

k.ml.recommendation
from pyspark.ml.recommendation import ALS

als = ALS(userCol=‘userId’, itemCol=‘brandId’, ratingCol=‘rating’, checkpointInterval=2)

利用打分数据,训练ALS模型

此处训练时间较长

model = als.fit(brand_rating_df)

model.recommendForAllUsers(N) 给用户推荐TOP-N个物品

model.recommendForAllUsers(3).show()

将模型进行存储

model.save(“hdfs://localhost:9000/models/userBrandRatingModel.obj”)

测试存储的模型

from pyspark.ml.recommendation import ALSModel

从hdfs加载模型

my_model = ALSModel.load(“hdfs://localhost:9000/models/userBrandRatingModel.obj”)
my_model

model.recommendForAllUsers(N) 给用户推荐TOP-N个物品

my_model.recommendForAllUsers(3).first()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您提供使用ALS算法对csv文件进行推荐模型训练的代码示例。请注意,这是一个基本的示例,您需要根据自己的数据和需求进行修改和优化。 首先,您需要导入必要的库,包括pyspark和pandas: ```python from pyspark.sql import SparkSession from pyspark.ml.recommendation import ALS from pyspark.ml.evaluation import RegressionEvaluator import pandas as pd ``` 接下来,您需要使用SparkSession创建一个Spark应用程序: ```python spark = SparkSession.builder.appName("MovieRecommendation").getOrCreate() ``` 然后,您需要加载您的csv文件并将其转换为Spark DataFrame: ```python data = spark.read.csv("path/to/your/file.csv", header=True, inferSchema=True) ``` 接下来,您需要将DataFrame拆分为训练集和测试集: ```python (training, test) = data.randomSplit([0.8, 0.2]) ``` 然后,您可以使用ALS算法创建推荐模型: ```python als = ALS(maxIter=5, regParam=0.01, userCol="user_id", itemCol="item_id", ratingCol="rating", coldStartStrategy="drop") model = als.fit(training) ``` 在创建模型后,您可以使用测试集评估模型的性能: ```python predictions = model.transform(test) evaluator = RegressionEvaluator(metricName="rmse", labelCol="rating", predictionCol="prediction") rmse = evaluator.evaluate(predictions) print("Root-mean-square error = " + str(rmse)) ``` 最后,您可以使用模型进行预测并获得推荐结果: ```python userRecs = model.recommendForAllUsers(10) userRecs_df = userRecs.toPandas() ``` 这是一个基本的示例,您可以根据自己的数据和需求进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lucky-zhao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值