目前正在使用Python的scikit learn中的KMeans库进行聚类分析,所使用的数据源有4000多条数据,
其中用于绘制结果的代码如下:
for u,v in enumerate(kmeamsmodel.labels_):
plt.plot(card['numeducation'][u],card['nummarital'][u],color=colors[u],ls='none')
plt.show()
运行时报错了,报错内容如下
plt.plot(card['numeducation'][u],card['nummarital'][u],color=colors[u],marker=markers[1],ls='none')
IndexError: list index out of range
我目前使用的Python版本为3.9,运行环境为pycharm2022.1.3社区版。
请问出了什么错误?
【相关推荐】
可以从簇内的稠密程度和簇间的离散程度来评估聚类的效果。常见的方法有轮廓系数Silhouette Coefficient和Calinski-Harabasz Index。
本文选择Calinski-Harabasz Index,这个计算简单直接,得到的Calinski-Harabasz分数值s越大则聚类效果越好。
Calinski-Harabasz分数值s的数学计算公式是:
s(k)=tr(Bk)tr(Wk)m−kk−1 s(k)=\cfrac{tr(B_k)}{tr(W_k)}\cfrac{m-k}{k-1} s(k)=tr(Wk)tr(Bk)k−1m−k
其中m为训练集样本数,k为类别数。Bk为类别之间的协方差矩阵,Wk为类别内部数据的协方差矩阵。tr为矩阵的迹。
也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。
在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score.