【问题标题】:PySpark: AttributeError: 'PipelineModel' object has no attribute 'clusterCenters'PySpark:AttributeError:“PipelineModel”对象没有属性“clusterCenters”
【发布时间】:2020-06-10 07:51:21
【问题描述】:

我用 Pypsark 创建了一个 kmeans 算法。现在,我还想提取聚类中心。如何将其包含在管道中?这是我到目前为止的代码,但它给我一个错误'AttributeError:'PipelineModel'对象没有属性'clusterCenters'。怎么解决?

#### model K-Means ###

from pyspark.ml.clustering import KMeans, KMeansModel

kmeans = KMeans() \
          .setK(3) \
          .setFeaturesCol("scaledFeatures")\
          .setPredictionCol("cluster")

# Chain indexer and tree in a Pipeline
pipeline = Pipeline(stages=[kmeans])

model = pipeline.fit(matrix_normalized)

cluster = model.transform(matrix_normalized)

#get cluster centers
centers = model.clusterCenters()

【问题讨论】:

  • 可能是model[0].clusterCenter()?
  • 不幸的是,这给了我 TypeError: 'PipelineModel' object is not subscriptable
  • 对不起,需要使用model.stage来访问管道模型里面的iterable

标签: python machine-learning pyspark cluster-analysis k-means


【解决方案1】:

虚拟数据

from pyspark.ml.linalg import Vectors
from pyspark.ml.clustering import KMeans, KMeansModel
from pyspark.ml.pipeline import Pipeline


data = [(Vectors.dense([0.0, 0.0]),), (Vectors.dense([1.0, 1.0]),),
        (Vectors.dense([9.0, 8.0]),), (Vectors.dense([8.0, 9.0]),)]
matrix_normalized = spark.createDataFrame(data, ["scaledFeatures"])

你的代码

kmeans = KMeans() \
          .setK(3) \
          .setFeaturesCol("scaledFeatures")\
          .setPredictionCol("cluster")

# Chain indexer and tree in a Pipeline
pipeline = Pipeline(stages=[kmeans])

model = pipeline.fit(matrix_normalized)

cluster = model.transform(matrix_normalized)

只需更改最后一行

model.stages[0].clusterCenters()

[array([0.5, 0.5]), array([8., 9.]), array([9., 8.])]

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多