我想使用矩阵因子分析(通过在MLlib中使用ALS来准确)用于产品推荐,其中我没有评级,但使用购买数量(隐式信息,稀疏矩阵)。在训练之前,我想按客户标准化数据集(矩阵中的行,其中列是产品,交集是金额)。 Matrix有几百万行和几万列,所以我想尽可能多地使用RDD。
我的数据存储在元组列表中:
(int, int, int)
[(Client1, Product1, amount)
(Client1, Product2, amount)
(Client2, Product1, amount)
(Client2, Product3, amount)]
我想标准化客户购买的产品数量。我考虑过groupByKey转换,但不知道从哪里开始。
编辑:我采用的方法的主要问题是使用RDD和ALS实现与RDD(在mllib包中可用)而不是主ML库使用DataFrames(ml包中提供)。由于嵌套转换在RDD中不可用,因此DataFrames的使用会有很大帮助。
答案 0 :(得分: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.