为什么SSE在python中的特定簇号处增加? K MEANS聚类

问题描述

我正在使用带有不同标签数组的相同数据集来计算以下代码的SSE:

import sklearn
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
import numpy as np
import os
import pandas as pd
import xlrd
import pickle
import csv
from numpy import savetxt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples
import matplotlib.pyplot as plt
import matplotlib.cm as cm

n_cluster = 8
final = []
array_final = []
label = []
acabou = []

for c in range (0,n_cluster):

    for n in range (2,7):
        xlsx = pd.ExcelFile("C:/Users/guilh/Desktop/SENSORIAMENTO/SENTINEL_2/{}/Cluster_{}/MEDIANA_BANDA_CLUSTER{}{}.xlsx".format(n_cluster,c,n,c))
        df = pd.read_excel(xlsx,'Sheet1',keep_default_na = False)

        numpy_array = df.to_numpy()
        one_column_array = numpy_array.flatten(order="A")
        one_column_array = [var for var in one_column_array if var]
        final = one_column_array
        array_final.append(np.char.replace(final,','.'))  

 
    #criando uma array com o número de cada Cluster
    x = len(one_column_array)  
    acabou.append(np.stack(array_final,axis=-1))
    seila = np.empty(x,np.int64,order='C')
    seila.fill(c+1)
    label.append(seila)
    array_final = []
    
acabou_valor = np.concatenate(acabou)
acabou_label = np.concatenate(label)

#CALCULANDO SSE 

BANDA = []
for i in range (0,5):
    aa = acabou_valor[:,i].astype(np.float)
    BANDA.append(aa)

soma = []

#SSE for each cluster in each band

for i in range (0,n_cluster):
    for j in range (0,5):
        aa = BANDA[j][np.nonzero(acabou_label == i+1)]
        mm = np.mean(aa)
        bb = np.square(np.subtract(aa,mm))
        cc = bb.sum()
        soma.append(cc)

cu = []
cu2 = []
cu3 = []
cu4 = []
cu5 = []
cu6 = []
cu7 = []
cu8 = []

for i in range(0,5):
    #print(soma[i])
    a = soma[i]
    cu.append(a)

cluster1 = []
cluster1.append(sum(cu))

for i in range(5,10):
    #print(soma[i])
    a = soma[i]
    cu2.append(a)

cluster2 = []
cluster2.append(sum(cu2))

for i in range(10,15):
    #print(soma[i])
    a = soma[i]
    cu3.append(a)

cluster3 = []
cluster3.append(sum(cu3))

for i in range(15,20):
    #print(soma[i])
    a = soma[i]
    cu4.append(a)

cluster4 = []
cluster4.append(sum(cu4))

for i in range(20,25):
    #print(soma[i])
    a = soma[i]
    cu5.append(a)

cluster5 = []
cluster5.append(sum(cu5))

for i in range(25,30):
    #print(soma[i])
    a = soma[i]
    cu6.append(a)

cluster6 = []
cluster6.append(sum(cu6))

for i in range(30,35):
    #print(soma[i])
    a = soma[i]
    cu7.append(a)

cluster7 = []
cluster7.append(sum(cu7))

for i in range(35,40):
    #print(soma[i])
    a = soma[i]
    cu8.append(a)

cluster8 = []
cluster8.append(sum(cu8))

SSE_KMEANS = [cluster1[i]+cluster2[i]+cluster3[i]+cluster4[i]+cluster5[i]+cluster6[i]+cluster7[i]+cluster8[i] for i in range(len(cluster1))]

print(SSE_KMEANS)
print(cluster1)
print(cluster2)
print(cluster3)
print(cluster4)
print(cluster5)
print(cluster6)
print(cluster7)
print(cluster8)

一切都很好,并且随着K的增加(如预期的那样),SSE一直在下降,直到我尝试使用K = 8进行计算,并且相对于K = 7而言,它增加了近50。我检查了很多次代码看看是否有任何计算错误的东西,但找不到任何东西。有人可以帮我吗?

代码的第一部分用于从转换为.xls的栅格创建数据集,我什至可以使用它来计算每个Cluster的轮廓索引,因此我认为那里一切都很好。第二部分是上交所。

K Means聚类已经在GEE上完成,我只是在python上处理导出的数据。

我正在使用Sentinel-2图像中的聚类;通过水蟒与Spyder; python版本3.8.3。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...