python Kmeans报错及解决方法

在利用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

以上,特此记录,供出现同样问题的人进行查阅。

你可能感兴趣的:(Python基础操作,笔记心得,python)