Scikit learn 使用Pipline后如何获得KMeans惯性值
我想通过使用管道将StandardScaler和KMeans结合起来,并检查KMeans的惯性,因为我想检查哪个集群的数量最好。 代码如下:Scikit learn 使用Pipline后如何获得KMeans惯性值,scikit-learn,Scikit Learn,我想通过使用管道将StandardScaler和KMeans结合起来,并检查KMeans的惯性,因为我想检查哪个集群的数量最好。 代码如下: ks = range(3, 5) inertias = [] inertias_temp = 9999.0 for k in ks: scaler = StandardScaler() kmeans = KMeans(n_clusters=k, random_state=rng) pipeline = make_pipeline(s
ks = range(3, 5)
inertias = []
inertias_temp = 9999.0
for k in ks:
scaler = StandardScaler()
kmeans = KMeans(n_clusters=k, random_state=rng)
pipeline = make_pipeline(scaler, kmeans)
pipeline.fit(X_pca)
labels = pipeline.predict(X_pca)
np.round(kmeans.cluster_centers_, decimals=3)
inertias.append(kmeans.inertia_)
if (kmeans.inertia_ < inertias_temp):
n_clusters_min = k
kmeans_min = kmeans
inertias_temp = kmeans.inertia_
然而,我认为kmeans.indivity的值可能不正确,因为它应该在pipeline.predict之后得到。但是我没有办法在pipeline.predict之后得到这个值。有人能帮我吗?可以从make_管道实例观察集群运行的惯性距离。但是,没有必要执行。预测观察质心数的距离。要在您的情况下访问惯性值,您可以键入以下内容: pipeline.named_steps['kmeans'].惯性_ 然后按你喜欢的方式处理它 此外,我有一些空闲时间,所以我为您重新编写了一些代码,以使其更有趣:
scaler = StandardScaler()
cluster = KMeans(random_state=1337)
pipe = make_pipeline(scaler, cluster)
centroids = []
inertias = []
min_ks = []
inertia_temp = 9999.0
for k in range(3, 5):
pipe.set_params(cluster__n_clusters=k)
pipe.fit(X_pca)
centroid = pipe.named_steps['cluster'].cluster_centers_
inertia = pipe.named_steps['cluster'].inertia_
centroids.append(centroid)
inertias.append(inertia)
if inertia < inertia_temp:
min_ks.append(k)
谢谢你的提问 非常感谢!你真好!是 啊没问题。