ALS协同过滤推荐算法在pySpark MLlib机器学习库源码解析


Spark MLlib中实现ALS协同过滤推荐算法的库为recommendation.py,这可库有以下三个类

__all__ = ['MatrixFactorizationModel', 'ALS', 'Rating']


    -a. Rating   算法的输入,包括用户对物品的评价,为三元组
        class Rating(namedtuple("Rating", ["user", "product", "rating"]))
        user、producet整型数据,通常使用ID表示
        rating数值型(double)数据
    -b. ALS
        这就是算法的实现类,有两个函数,分别对显式反馈和隐式反馈评价:
        - 显式反馈
             ALS.train(ratings, rank, iterations=5, lambda_=0.01, blocks=-1, nonnegative=False, seed=None)
      ratings:ratings: RDD[Rating],   通过Rating函数转换够的需要训练的数据集

      rank:特征数目,模型中隐藏因子数,参考设置在10 - 20

      iterations=5 : 迭代次数,默认5,一般设置在10-20次

      lambda: Double型,   ALS中的正则化参数,默认0.01

       blocks: Int,  并行计算的block数(-1为自动配置),hadoop集群中默认一个block为128m。

       nonnegative=False:是否非负

       seed: Long              加载矩阵的随机数

        - 隐式反馈
             def trainImplicit(cls, ratings, rank, iterations=5, lambda_=0.01, blocks=-1, alpha=0.01, nonnegative=False, seed=None)
       比显示反馈多了一个 alpha=0.01参数(ALS隐式反馈变化率),表示置信度,用于控制每次拟合修正的幅度。

   -c. MatrixFactorizationModel:矩阵因子分解模型
        使用ALS算法针对数据集训练得到模型,本质就是获取两个因子矩阵:

   def userFeatures(self):        - 用户特征因子矩阵
        """
        Returns a paired RDD, where the first element is the user and the
        second is an array of features corresponding to that user.
        """
        return self.call("getUserFeatures").mapValues(lambda v: array.array('d', v))

    def productFeatures(self):        - 物品特征因子矩阵
        """
        Returns a paired RDD, where the first element is the product and the
        second is an array of features corresponding to that product.
        """
        return self.call("getProductFeatures").mapValues(lambda v: array.array('d', v))

     def predict(self, user, product):        - 预测用户对物品的评分
        """
        Predicts rating for the given user and product.
        """
       return self._java_model.predict(int(user), int(product))

        - 推荐
            - 为用户推荐物品
                def recommendProducts(self, user, num)
            - 为物品推荐用户
                def recommendUsers(self, product, num)

你可能感兴趣的:(pyspark,机器学习,推荐系统)