有一组数据,维度为182,4如何进行kmean聚类分析?如何实现代码?

通过学习书本,想实现对这个维度数组进行kmean聚类,通过for循环查看聚类数为多少是最合理的?

这是通过学习书本上,了解到鸢尾花的模型,这个是随机的模型,查看到iris_data与iris_target都是直接获取的,但是我这个源数据如何获取相对应的数据,源数据本身可以使用data代替,求大神解答

from sklearn.metrics import fowlkes_mallows_score
for i in range(2,7):
    #构建并训练模型
    kmeans = KMeans(n_clusters=i,random_state=123).fit(iris_data)
    score = fowlkes_mallows_score(iris_target,kmeans.labels_)
    print('iris数据聚%d类FMI评价分值为:%f'%(i,score))

这个是我的源数据,其中NAN已经处理了,可以忽略

                    incomeperperson  internetuserate  urbanrate
country                                                        
Afghanistan                     NaN         3.654122      24.04
Albania                 1914.996551        44.989947      46.72
Algeria                 2231.993335        12.500073      65.22
Andorra                21943.339900        81.000000      88.92
Angola                  1381.004268         9.999954      56.70
...                             ...              ...        ...
Vietnam                  722.807559        27.851822      27.84
West Bank and Gaza              NaN        36.422772      71.90
Yemen, Rep.              610.357367        12.349750      30.64
Zambia                   432.226337        10.124986      35.42
Zimbabwe                 320.771890        11.500415      37.34

这是我修改后的,但是报错了,这是报错内容:labels_true must be 1D: shape is (182, 3)。没有数据标签集,我理解的标签集是国家名,这个理解是不是错误了?求大神解答

num = data.iloc[:,1:]
print(num)
from sklearn.metrics import fowlkes_mallows_score
for i in range(2,7):
    #构建并训练模型
    kmeans = KMeans(n_clusters=i,random_state=123).fit(num)
    score = fowlkes_mallows_score(num,kmeans.labels_)
    print('数据聚%d类FMI评价分值为:%f'%(i,score))

 

 

题主的数据虽然是182行4列,但特征维只有3列,首列是国家名,与其他3列类型不同,不能参与聚类分析。因此题主的数据集其实只能是data[:,1:]了。另外,使用循环指定n_clusters没问题,但题主有标签数据集吗?如果没有,又如何评估聚类结果呢?

from sklearn.metrics import fowlkes_mallows_score
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
iris = load_iris()
print(iris.data)
print(iris.target)
for i in range(2,7):
#构建并训练模型
kmeans = KMeans(n_clusters=i,random_state=123).fit(iris.data)
score = fowlkes_mallows_score(iris.target,kmeans.labels_)
print('iris数据聚%d类FMI评价分值为:%f'%(i,score))
上述代码运行出来了
iris数据聚2类FMI评价分值为:0.750473
iris数据聚3类FMI评价分值为:0.820808
iris数据聚4类FMI评价分值为:0.753970
iris数据聚5类FMI评价分值为:0.725483
iris数据聚6类FMI评价分值为:0.614345

num = data.iloc[:,1:]

num.target=data.iloc[:,:1]
print(num)
from sklearn.metrics import fowlkes_mallows_score
for i in range(2,7):
#构建并训练模型
kmeans = KMeans(n_clusters=i,random_state=123).fit(num)
score = fowlkes_mallows_score(num.target,kmeans.labels_)
print('数据聚%d类FMI评价分值为:%f'%(i,score))
我觉得第二段代码倒数第二行num 应该改成num.target
num.target=data.iloc[:,:1]需要提前声明