📅  最后修改于: 2023-12-03 15:23:26.316000             🧑  作者: Mango
K-Means是一种常见的聚类算法,可以将数据集中的数据分成多个群体,从而找到数据的分类结构。在Python中,可以使用scikit-learn库中的KMeans模型来实现K-Means算法。
在使用KMeans之前,需要导入相关的库和数据集。本次示例将使用iris数据集,iris数据集是一个常用的分类数据集,它包含了150个样本,分别属于三个不同的品种:Iris Setosa, Iris Versicolour, Iris Virginica。
import pandas as pd
from sklearn.cluster import KMeans
from sklearn.datasets import load_iris
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
在导入数据集并准备好相关的库后,接下来就是训练KMeans模型了。首先需要设置K值,K值代表需要分成几个群体。为了确定最优的K值,可以绘制出数据的'肘部图像',这个图像可以通过计算不同K值下的距离来得到,距离越小,说明分成的群体越好。
distortions = []
K = range(1, 10)
for k in K:
kmeanModel = KMeans(n_clusters=k)
kmeanModel.fit(X)
distortions.append(kmeanModel.inertia_)
import matplotlib.pyplot as plt
plt.figure(figsize=(16,8))
plt.plot(K, distortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Distortion')
plt.title('Elbow Method showing the optimal k')
plt.show()
从上图中可以看到,在K=3处弯曲,因此3是最优的K值。
接下来,以最优的K值为参数,使用KMeans模型进行训练。
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
训练完成后,就可以使用预测函数得到每个数据点所属的群体。
predicted_cluster = kmeans.predict(X)
print(predicted_cluster)
最后,可以通过数据可视化的方式来展示结果。这里以花萼长度、花萼宽度为x、y轴,将结果用不同的颜色标注。
plt.figure(figsize=(16,8))
plt.scatter(X['sepal length (cm)'], X['sepal width (cm)'], c=predicted_cluster)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.show()
从上图中可以看到,使用KMeans算法将iris数据集分成了三个群体,不同颜色代表了不同的群体。通过这种方式,我们可以发现不同的花种之间存在着不同的特征。