ALS 参数与超参数

使用 PySpark 构建推荐引擎

Jamen Long

Data Scientist at Nike

ALS 模型示例代码

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)
使用 PySpark 构建推荐引擎

列名

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

参数

  • userCol:包含用户 ID 的列名
  • itemCol:包含物品 ID 的列名
  • ratingCol:包含评分的列名
使用 PySpark 构建推荐引擎

空的原始评分矩阵与两个空的分解矩阵

使用 PySpark 构建推荐引擎

与前图相同,突出显示潜在维度

使用 PySpark 构建推荐引擎

Rank(秩)

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

超参数

  • rank, $k$:潜在特征数
使用 PySpark 构建推荐引擎

MaxIter(最大迭代)

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

超参数

  • rank, $k$:潜在特征数
  • maxIter:迭代次数
使用 PySpark 构建推荐引擎

RegParam(正则项)

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

超参数

  • rank, $k$:潜在特征数
  • maxIter:迭代次数
  • regParam:Lambda
使用 PySpark 构建推荐引擎

Alpha(隐式权重)

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

超参数

  • rank, $k$:潜在特征数
  • maxIter:迭代次数
  • regParam:Lambda
  • alpha:稍后讨论。仅用于隐式评分。
使用 PySpark 构建推荐引擎

非负约束

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

其他参数

  • nonnegative = True:保证结果为正
使用 PySpark 构建推荐引擎

冷启动策略

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

其他参数

  • nonnegative = True:保证结果为正
  • coldStartStrategy = "drop":处理训练/测试划分的冷启动问题
使用 PySpark 构建推荐引擎

隐式偏好

als_model = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, alpha=40,
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)

其他参数

  • nonnegative = True:保证结果为正
  • coldStartStrategy = "drop":处理训练/测试划分的冷启动问题
  • implicitPrefs = True:根据评分类型设为 True/False
使用 PySpark 构建推荐引擎

ALS 构建示例

als = ALS(userCol="userId", itemCol="movieId", ratingCol="rating", 
            rank=25, maxIter=100, regParam=.05, 
            nonnegative=True,
            coldStartStrategy="drop",
            implicitPrefs=False)
使用 PySpark 构建推荐引擎

fit 与 transform 方法

# Fit ALS to training dataset
model = als.fit(training_data)

# Generate predictions on test dataset
predictions = model.transform(test_data)
使用 PySpark 构建推荐引擎

开始练习吧!

使用 PySpark 构建推荐引擎

Preparing Video For Download...