python语言实现Kmeans算法, 测试数据标准化对kmeans算法的影响
时间: 2023-10-12 18:10:44 浏览: 44
好的,我可以为您介绍一下Python实现Kmeans算法,并演示测试数据标准化对Kmeans算法的影响。
首先,我们需要导入相关的库,包括numpy、sklearn中的KMeans、MinMaxScaler和make_blobs函数。
```python
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import make_blobs
```
接下来,我们使用make_blobs函数生成一组随机数据,并进行可视化展示。
```python
# 生成数据
X, y = make_blobs(n_samples=500, centers=5, random_state=42)
# 可视化数据
import matplotlib.pyplot as plt
%matplotlib inline
plt.scatter(X[:, 0], X[:, 1])
plt.show()
```
数据生成后,我们可以使用KMeans算法进行聚类。默认情况下,KMeans算法使用欧几里得距离进行聚类。这里我们设置聚类数量为5。
```python
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=5).fit(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()
```
我们可以看到,KMeans算法成功将数据分为了5个簇。但是,如果我们对数据进行标准化,会对聚类结果产生影响吗?
我们可以使用MinMaxScaler对数据进行标准化,然后再次使用KMeans算法进行聚类。
```python
# 对数据进行标准化
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=5).fit(X_scaled)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()
```
我们可以看到,经过标准化后,数据被压缩到了0到1之间,导致聚类效果更加紧密。因此,测试数据标准化对KMeans算法的聚类结果产生了影响。
完整代码如下:
```python
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
%matplotlib inline
# 生成数据
X, y = make_blobs(n_samples=500, centers=5, random_state=42)
# 可视化数据
plt.scatter(X[:, 0], X[:, 1])
plt.show()
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=5).fit(X)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()
# 对数据进行标准化
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)
# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=5).fit(X_scaled)
# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=kmeans.labels_)
plt.show()
```