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 方法

# 將 ALS 擬合到訓練資料集
model = als.fit(training_data)

# 在測試資料集產生預測
predictions = model.transform(test_data)
使用 PySpark 打造推薦引擎

一起來練習吧!

使用 PySpark 打造推薦引擎

Preparing Video For Download...