PySpark 中的 PCA 分析

2024-03-25

看着http://spark.apache.org/docs/latest/mllib-Dimensionality-reduction.html http://spark.apache.org/docs/latest/mllib-dimensionality-reduction.html。这些示例似乎只包含 Java 和 Scala。

Spark MLlib 支持 Python 的 PCA 分析吗?如果是这样,请给我举一个例子。如果没有,如何将 Spark 与 scikit-learn 结合起来?


火花 >= 1.5.0

虽然 PySpark 1.5 引入了分布式数据结构(pyspark.mllib.linalg.distributed)看起来API相当有限并且没有实现computePrincipalComponents method.

可以使用from pyspark.ml.feature.PCA or pyspark.mllib.feature.PCA尽管。在第一种情况下,预期输入是带有向量列的数据框:

from pyspark.ml.feature import PCA as PCAml
from pyspark.ml.linalg import Vectors  # Pre 2.0 pyspark.mllib.linalg

df = sqlContext.createDataFrame([
   (Vectors.dense([1, 2, 0]),),
   (Vectors.dense([2, 0, 1]),),
   (Vectors.dense([0, 1, 0]),)], ("features", ))

pca = PCAml(k=2, inputCol="features", outputCol="pca")
model = pca.fit(df)
transformed = model.transform(df)

在 Spark 2.0 或更高版本中,您应该使用pyspark.ml.linalg.Vector代替pyspark.mllib.linalg.Vector.

For mllib版本你需要一个RDD of Vector:

from pyspark.mllib.feature import PCA as PCAmllib

rdd = sc.parallelize([
    Vectors.dense([1, 2, 0]),
    Vectors.dense([2, 0, 1]),
    Vectors.dense([0, 1, 0])])

model = PCAmllib(2).fit(rdd)
transformed = model.transform(rdd)

火花

PySpark

操作顺序或多或少类似于下面的顺序。分布式步骤后跟操作名称,局部用“*”和可选方法。

  1. Create RDD[Vector]其中每个元素都是输入矩阵中的一行。您可以使用numpy.ndarray对于每一行(prallelize)
  2. 计算按列统计数据 (reduce)
  3. 使用 2. 的结果使矩阵居中 (map)
  4. 计算每行的外积(map outer)
  5. 对结果求和得到协方差矩阵(reduce +)
  6. 收集并计算特征分解 * (numpy.linalg.eigh)
  7. 选择前 n 个特征向量 *
  8. 投影数据(map)

关于 Sklearn。您可以使用 NumPy(它已经在Mllib)、SciPy、Scikitlocally像往常一样对司机或工人进行操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PySpark 中的 PCA 分析 的相关文章

随机推荐