首页 文章

稀疏矩阵RDD中的值的标准化

提问于
浏览
-1

我想在产品推荐中使用矩阵分解(通过在MLlib中使用ALS),我没有评级,但使用购买数量(隐式信息,稀疏矩阵) . 在训练之前,我想按客户标准化数据集(矩阵中的行,其中列是产品,交集是金额) . Matrix有几百万行和几万列,所以我想尽可能多地使用RDD .

我的数据存储在元组列表中:

(int, int, int)

[(Client1, Product1, amount)
(Client1, Product2, amount)
(Client2, Product1, amount)
(Client2, Product3, amount)]

我想标准化客户购买的产品数量 . 我想过groupByKey转换,但不知道从哪里开始 .

EDIT :我采用的方法的主要问题是使用RDD和ALS来实现RDD(在mllib包中可用)而不是使用DataFrames的主ML库(在ml包中可用) . 由于嵌套转换在RDD中不可用,因此DataFrame的使用极大地有所帮助 .

1 回答

  • 0

    试试这个:

    >>> from pyspark.mllib.linalg.distributed import *
    >>> from pyspark.mllib.linalg.distributed import *
    >>> 
    >>> cm = CoordinateMatrix(rdd.map(lambda (c, p, a): MatrixEntry(c, p, a)))
    >>> irm = cm.toIndexedRowMatrix()
    >>> idxs = irm.rows.map(lambda row: row.index)
    >>> vcs = irm.rows.map(lambda row: row.vector)
    >>>
    >>> nzr = Normalizer(1)
    >>> rows = idxs.zip(nzr.transform(vcs)).map(lambda (index, vector): IndexedRow(index, vector))
    >>> normalized = IndexedRowMatrix(rows).toCoordinateMatrix().entries.
    

相关问题