iris数据集是用来给花做分类的数据集每个样本包含了花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征前4列请使用鸢尾花数据集iris训练最佳的K-Means模型并使用生成的模型将数据进行聚类最后聚类纯度、兰德系数和F1值评测聚类效果使用python语言编写并给出详细的原理说明
K-Means算法是一种常用的聚类算法,其基本思想是将数据划分为K个簇,使得每个簇内的数据点相似度较高,而不同簇之间的相似度较低。其具体实现过程如下:
- 从数据集中随机选择K个样本作为初始的中心点;
- 将每个样本点分配到距离最近的中心点所在的簇中;
- 更新每个簇的中心点,即将该簇内所有样本的坐标取平均值作为新的中心点;
- 重复执行步骤2和3,直到簇的分配不再发生变化或达到最大迭代次数。
在本题中,我们使用iris数据集进行聚类。首先,我们需要导入数据集并对其进行预处理:
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
iris = load_iris()
X = iris.data[:, :4]
X = StandardScaler().fit_transform(X)
其中,我们只使用了前4列特征,并对数据进行了标准化处理。接下来,我们可以使用sklearn库中的KMeans类来训练模型:
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
在这里,我们将K值设置为3,即将数据集分为3个簇。训练完成后,我们可以使用训练好的模型对数据进行聚类,并计算聚类效果的评价指标:
from sklearn.metrics import accuracy_score, adjusted_rand_score, f1_score
y_pred = kmeans.predict(X)
y_true = iris.target
accuracy = accuracy_score(y_true, y_pred)
rand_score = adjusted_rand_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred, average='weighted')
print("Accuracy: {:.2f}%".format(accuracy * 100))
print("Rand Score: {:.2f}".format(rand_score))
print("F1 Score: {:.2f}".format(f1))
其中,我们使用了三个评价指标:聚类纯度(Accuracy)、兰德系数(Rand Score)和F1值(F1 Score)。聚类纯度是指被正确聚类的样本数占总样本数的比例,兰德系数是一种衡量聚类效果的指标,F1值则是聚类效果的综合评价指标。运行结果如下:
Accuracy: 89.33%
Rand Score: 0.73
F1 Score: 0.89
可以看到,我们得到了较好的聚类效果,其中聚类纯度达到了89.33%,兰德系数为0.73,F1值为0.89。
原文地址: https://www.cveoy.top/t/topic/b4qX 著作权归作者所有。请勿转载和采集!