【问题标题】:preparing product purchase data for pyspark ALS implicit recommendations为 pyspark ALS 隐式推荐准备产品购买数据
【发布时间】:2022-07-26 18:07:04
【问题描述】:

我正在尝试构建产品推荐器。我正在使用 pyspark ml 推荐 ALS 矩阵分解模型。我有类似下面示例数据的数据,其中有客户和产品 ID 以及客户购买产品的次数 (prch_cnt)。我正在尝试为隐式偏好训练模型。我想知道的是在将它提供给模型之前是否需要对我的 prch_cnt 进行标准化。例如,cutomer_id=5 和 product_id=1 下面的 prch_cnt 应该是 prch_cnt=3/(3+1+1) 还是 prch_cnt=3 就可以了?我的理解是对于像评级这样的明确数据,每个产品的值范围通常是固定的(比如 1 到 5 星),否则你必须对其进行标准化。我想知道是否具有固定范围的可能值或匹配比例,是否也需要隐式?

数据:

+------------+--------+-------------------+
|customer_id |prch_cnt|product_id         |
+------------+--------+-------------------+
|5           |3.0     |1                  |
|5           |1.0     |2                  |
|5           |1.0     |2                  |
|7           |10.0    |1                  |
|7           |1.0     |2                  |
|9           |150.0   |2                  |
+------------+--------+-------------------+

代码:

from pyspark.ml.recommendation import ALS


als = ALS(implicitPrefs=True,
nonnegative = True,
          userCol="customer_id",
          itemCol="product_id",
          ratingCol="prch_cnt",
         coldStartStrategy="drop")
model = als.fit(training)


# top 5 customer recs

userRecs = model.recommendForAllUsers(5)

【问题讨论】:

    标签: pyspark recommendation-engine apache-spark-ml matrix-factorization


    【解决方案1】:

    查看评分列中是否没有固定值(显式或隐式),您将以相同的方式获得预测值。

    例子:

    最初我的评分为 0,1,2,3,所以我得到了预测值 (-1.6686,2., 3.) 最多 3 个

    但后来我改变了我的评分值,包括评分 5 和 10,所以现在我将预测值提高到 6

    -------+------+-----------+
    |movieId|userId| prediction|
    +-------+------+-----------+
    |     29|     3|    6.34046|
    |     94|     3|  4.3311176|
    |     26|     3|  3.6043417|
    |      2|     3|  3.0270371|
    |     46|     3|  2.3173037|
    |      0|     3|  2.3090997|
    |     86|     3|  1.1750394|
    |     56|     3|  1.1681526|
    |     76|     3|  0.6635845|
    |     79|     3| 0.17606063|
    |     14|     3| -0.2127747|
    |     91|     3|  -0.587868|
    |     66|     3|-0.72813153|
    |     37|     3| -1.1676543|
    |     70|     3|   -1.21106|
    |     52|     3| -1.3105489|
    |      8|     3| -1.6253037|
    |      7|     3| -1.7214308|
    +-------+------+-----------+
    

    我希望它能消除你的疑虑。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多