首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火花ALS提供相同的输出。

火花ALS提供相同的输出。
EN

Stack Overflow用户
提问于 2018-05-17 12:34:41
回答 1查看 669关注 0票数 1

当我发现ALS中的因子矩阵是随机初始化的,所以不同的运行会给出稍微不同的结果,使用它们的平均值可以得到更准确的结果,因此需要创建一个小的Pyspark推荐系统的集合。所以我对模型进行了2次训练->它给出了不同的模型ALS对象,但是当使用recommendForAllUsers()方法时,对于不同的模型给出了相同的推荐输出。这里有什么问题,为什么需要重新启动脚本才能得到不同的输出,即使有不同的预测ALS模型?

不存在伪随机的P.S种子参数。

代码语言:javascript
复制
def __train_model(ratings):
    """Train the ALS model with the current dataset
    """
    logger.info("Training the ALS model...")

    als = ALS(rank=rank, maxIter=iterations, implicitPrefs=True, regParam=regularization_parameter,
              userCol="order_id", itemCol="product_id", ratingCol="count")

    model = als.fit(ratings)

    logger.info("ALS model built!")

    return model


model1 = __train_model(ratings_DF)
print(model1)
sim_table_1 = model1.recommendForAllUsers(100).toPandas()

model2 = __train_model(ratings_DF)
print(model2)
sim_table_2 = model2.recommendForAllUsers(100).toPandas()

print('Equality of objects:', model1 == model2)

输出

代码语言:javascript
复制
INFO:__main__:Training the ALS model...
INFO:__main__:ALS model built!
ALS_444a9e62eb6938248b4c
INFO:__main__:Training the ALS model...
INFO:__main__:ALS model built!
ALS_465c95728272696c6c67
Equality of objects: False
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-15 23:14:03

如果在实例化ALS实例时不为seed参数提供值,则每次都会默认为相同的值,因为它是字符串的散列("ALS")。这就是为什么你的建议总是一样的。

设置种子默认值的代码:

self._setDefault(seed=hash(type(self).__name__))

示例:

代码语言:javascript
复制
from pyspark.ml.recommendation import ALS
als1 = ALS(rank=10, maxIter=5)
als2 = ALS(rank=10, maxIter=5)
als1.getSeed() == als2.getSeed() == hash("ALS")
>>> True

如果每次都想得到不同的模型,可以使用类似numpy.random.randint的方法为种子生成一个随机整数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50391627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档