通过学习书本,想实现对这个维度数组进行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]需要提前声明