python编程实现K-Means算法,验证算法的正确性,并将算法应用于给定的鸢尾花数据集iris,验证算法的聚类情况
时间: 2024-02-25 12:58:31 浏览: 70
好的,我可以帮你实现K-Means算法并应用于鸢尾花数据集iris进行聚类分析。
K-Means算法是一种经典的聚类算法,其主要思想是将数据集分成k个簇,每个簇的中心点为该簇所有数据点的平均值,最终目的是使得每个数据点与其所属簇的中心点的距离最小化。
首先,我们需要导入相关的库:
``` python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
```
接下来,我们加载鸢尾花数据集iris并将其转化为pandas的DataFrame格式:
``` python
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
```
然后,我们需要先随机选择k个中心点,这里我们选取k=3:
``` python
k = 3
centers = df.sample(n=k)
```
接着,我们定义一个函数来计算每个数据点到中心点的距离:
``` python
def distance(x, y):
return np.sqrt(np.sum(np.square(x - y)))
```
然后,我们定义一个函数来进行K-Means聚类:
``` python
def k_means(df, k, centers):
n = df.shape[0]
clusters = np.zeros(n)
while True:
# 计算每个数据点到中心点的距离
for i in range(n):
distances = [distance(df.iloc[i], centers[j]) for j in range(k)]
clusters[i] = np.argmin(distances)
# 更新中心点
new_centers = pd.DataFrame(columns=df.columns)
for i in range(k):
new_centers.loc[i] = df[clusters == i].mean(axis=0)
# 判断是否收敛
if np.all(centers == new_centers):
break
centers = new_centers
return clusters
```
最后,我们可以调用上述函数进行K-Means聚类,并将结果可视化:
``` python
clusters = k_means(df, k, centers)
colors = ['r', 'g', 'b']
for i in range(k):
plt.scatter(df.iloc[clusters == i, 0], df.iloc[clusters == i, 1], c=colors[i])
plt.show()
```
运行上述代码,你就可以看到K-Means聚类的结果了。
阅读全文