我正在尝试使用 K-means 方法进行聚类,但我想衡量聚类的性能。
我不是专家,但我渴望了解更多关于集群的知识。
这是我的代码:
import pandas as pd
from sklearn import datasets
#loading the dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data)
#K-Means
from sklearn import cluster
k_means = cluster.KMeans(n_clusters=3)
k_means.fit(df) #K-means training
y_pred = k_means.predict(df)
#We store the K-means results in a dataframe
pred = pd.DataFrame(y_pred)
pred.columns = ['Species']
#we merge this dataframe with df
prediction = pd.concat([df,pred], axis = 1)
#We store the clusters
clus0 = prediction.loc[prediction.Species == 0]
clus1 = prediction.loc[prediction.Species == 1]
clus2 = prediction.loc[prediction.Species == 2]
k_list = [clus0.values, clus1.values,clus2.values]
现在我已经存储了我的 KMeans 和我的三个集群,我正在尝试使用 Dunn 指数 来衡量我的集群的性能(我们寻求更大的指数)为此我导入了 jqm_cvi 包(可 在此处 获得)
from jqmcvi import base
base.dunn(k_list)
我的问题是:Scikit Learn 中是否已经存在任何聚类内部评估(silhouette_score 除外)?或者在另一个著名的图书馆?
原文由 Viphone Rathikoun 发布,翻译遵循 CC BY-SA 4.0 许可协议
除了 Silhouette Score 之外,Elbow Criterion 也可用于评估 K-Mean 聚类。它在 Scikit-Learn 中不可用作函数/方法。我们需要计算 SSE 以使用 Elbow 准则评估 K-Means 聚类。
Elbow Criterion 方法的思想是选择 SSE 突然下降的
k
(簇数)。 SSE 定义为簇中每个成员与其质心之间距离的平方和。为
k
的每个值计算误差平方和 (SSE),其中k
是no. of cluster
并绘制线图。当我们增加 k 时,SSE 趋于向 0 减小(SSE=0,当 k 等于数据集中数据点的数量时,因为那时每个数据点都是它自己的簇,并且它与中心之间没有误差它的集群)。所以目标是选择一个小值
k
仍然有low SSE
,肘部通常表示,我们开始通过增加 k 获得收益递减。鸢尾花数据集示例:
如果折线图看起来像一只手臂 - 上面折线图中的红色圆圈(如角度),则手臂上的“肘”是
optimal k
(簇数)的值。根据上面折线图中的弯头,最优簇数为3。注意:肘部标准本质上是启发式的,可能不适用于您的数据集。根据数据集和您要解决的问题遵循直觉。
希望能帮助到你!