python - Spark 使用 StandardScaler 获取实际的集群中心体

标签 python apache-spark pyspark k-means

我使用 StandardScaler 安装了具有缩放功能的 KMeans。问题是簇中心体也被缩放。是否可以通过编程方式获取原始质心?

import pandas as pd
import numpy as np
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.feature import StandardScaler, StandardScalerModel
from pyspark.ml.clustering import KMeans

from sklearn.datasets import load_iris

# iris data set
iris = load_iris()
iris_data = pd.DataFrame(iris['data'], columns=iris['feature_names'])

iris_df = sqlContext.createDataFrame(iris_data)

assembler = VectorAssembler(
    inputCols=[x for x in iris_df.columns],outputCol='features')

data = assembler.transform(iris_df)

scaler = StandardScaler(inputCol="features", outputCol="scaledFeatures", withStd=True, withMean=False)
scalerModel = scaler.fit(data)
scaledData = scalerModel.transform(data).drop('features').withColumnRenamed('scaledFeatures', 'features')

kmeans = KMeans().setFeaturesCol("features").setPredictionCol("prediction").setK(3)
model = kmeans.fit(scaledData)
centers = model.clusterCenters()

print("Cluster Centers: ")
for center in centers:
    print(center)

在这里我想获得原始比例的中心。 中心线已缩放。

[ 7.04524479  6.17347978  2.50588155  1.88127377]
[ 6.0454109   7.88294475  0.82973422  0.31972295]
[ 8.22013841  7.19671468  3.13005178  2.59685552]

最佳答案

您使用 withStd=TruewithMean=FalseStandardScaler。要移回初始空间,您必须乘以 std 向量:

[cluster * scalerModel.std  for cluster in model.clusterCenters()]

如果withMeanTrue,您将使用:

[cluster * scalerModel.std + scalerModel.mean 
    for cluster in model.clusterCenters()]

关于python - Spark 使用 StandardScaler 获取实际的集群中心体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47705919/

相关文章:

python - 在Python字典中查找单词对

python - 如何在 Mac 上通过 Python 在 TextEdit 中打开文本文件?

matrix - 如何使用 Spark 的 RDD 与向量执行矩阵点积

python - PySpark 根据名称将列表分解为多列

java - 在 Java 类中找不到 DataFrame Spark

python - Pygame 事件处理程序相互干扰?

python - 在 databricks 笔记本中导入 Python 文件

python - 如何在pyspark中通过键找到两个rdd的交集?

apache-spark - 在集群 : Initial job has not accepted any resources 上运行 Spark

python - 如何在 GTK3 中拖放和排序 GtkTreeView?