在利用Kmeans方法进行聚类的时候出现了以下错误,我默认设置的是分100类,数据也有100多条,在聚类过程中有如下报错:
ConvergenceWarning: Number of distinct clusters (99) found smaller than n_clusters (100). Possibly due to duplicate points in X.
首先定位出错代码:
kmeans = KMeans(n_clusters=k, random_state=2018)
kmeans.fit(XData)
pre_y = kmeans.predict(XData)
大概就是这三条当中某一条,最后定位到是fit()函数出现的提示,使用try方法抓取错误,断点定位进行调试,抓取ConvergenceWarning错误:
# 建立聚类模型对象
kmeans = KMeans(n_clusters=k, random_state=2018)
# 训练聚类模型
try:
kmeans.fit(XData)#如果数据有重复的情况下,拟合的时候数据会小于K值,所以需要更新K值
except ConvergenceWarning:
print("Catch ConvergenceWarning,k={}\n".format(k))
except:
print("k={}\n".format(k))
# 预测聚类模型
pre_y = kmeans.predict(XData)
经过检查发线是XData数据有重复的造成的,所以在前期确定K值这里进行一下去重即可解决问题
以前K值确定代码:
XData = np.array(X)
if(XData.shape[0]<=k and XData.shape[0]!=0):
print("XData size:",XData.shape[0])
k=XData.shape[0]//2
print("K:",k)
if(k<=0):
return result
更改后的代码,利用set进行去重
XData = np.array(list(set(X)))#2022.3.22 zph自带去重复效果
if(XData.shape[0]<=k and XData.shape[0]!=0):
print("XData size:",XData.shape[0])
k=XData.shape[0]//2
print("K:",k)
if(k<=0):
return result
以上,特此记录,供出现同样问题的人进行查阅。