在不使用 Kmeans 导入的情况下获取 KMeans 轮廓平均分数

Posted

技术标签:

【中文标题】在不使用 Kmeans 导入的情况下获取 KMeans 轮廓平均分数【英文标题】:Getting KMeans silhouette average score without using the Kmeans import 【发布时间】:2021-06-27 21:08:12 【问题描述】:

我有一个 KMeans 函数,我使用输入 def kmeans(x,k, no_of_iterations): 并返回以下 return points, centroids 它被完美地绘制出来,其代码不是很相关。但我想计算它,轮廓得分并为每个值绘制图表

#Load Data
data = load_digits().data
pca = PCA(2)

#Transform the data
df = pca.fit_transform(data)
X= df
#y = kmeans.fit_predict(X)
#Applying our function
label, centroids = kmeans(df,10,1000)#returns points value and centroids
y = label.fit_predict(data)
 
#Visualize the results

u_labels = np.unique(label)
for i in u_labels:
    plt.scatter(df[label == i , 0] , df[label == i , 1] , label = i)
    plt.scatter(centroids[:,0] , centroids[:,1] , s = 80, color = 'k')
plt.legend()
plt.show()

以上是运行 KMeans 绘图的代码 下面是我计算轮廓的尝试。这是一个从 KMeans 导入的示例,但我真的不想这样做,它也不适用于我的代码。

silhouette_avg = silhouette_score(X, y)
print("The average silhouette_score is :", silhouette_avg)

# Compute the silhouette scores for each sample
sample_silhouette_values = silhouette_samples(X, y)

您可能会注意到这里 y 没有值,因为我发现 y 应该是我认为的集群数量?所以我一开始把它设为 10,它给出了一条错误消息。我不知道是否有人可以从这段代码中告诉我接下来要做什么来获得这个值?

【问题讨论】:

【参考方案1】:

试试这个:

import pandas as pd
import matplotlib as mpl 
import matplotlib.pyplot as plt 

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer

mpl.rcParams["figure.figsize"] = (9,6)

# Generate synthetic dataset with 8 blobs
X, y = make_blobs(n_samples=1000, n_features=12, centers=8, shuffle=True, random_state=42)

# Instantiate the clustering model and visualizer
model = KMeans()
visualizer = KElbowVisualizer(model, k=(4,12))

visualizer.fit(X)    # Fit the data to the visualizer
visualizer.poof()    

# Instantiate the clustering model and visualizer 
model = KMeans(8)
visualizer = SilhouetteVisualizer(model)

visualizer.fit(X)    # Fit the data to the visualizer
visualizer.poof()    # Draw/show/poof the data

另外,看看这个。

https://www.scikit-yb.org/en/latest/api/cluster/silhouette.html

【讨论】:

以上是关于在不使用 Kmeans 导入的情况下获取 KMeans 轮廓平均分数的主要内容,如果未能解决你的问题,请参考以下文章

如何在不导入类的情况下获取类的方法

有没有办法在不导入的情况下显示图像? [复制]

如何在不阻塞 UI 的情况下正确使用 MagicalRecord 从 Web 服务导入数据

如何在不导入的情况下将excel电子表格导入anylogic数据库,即在主启动时使用代码

如何在不导入的情况下从 .dmp 文件中列出 Oracle 中的所有模式和表空间?

在单个特征数据框中查找质心和点之间的距离 - KMeans