如何使用Python实现K-means聚类算法,当k值设定为3时?具体步骤包括计算每个样本点到三个聚类中心的欧式距离,记录下聚类中心的坐标,并将结果绘制成可视化散点图,请给出详细的操作过程和代码示例。
时间: 2024-11-27 10:12:24 浏览: 16
Python——K-means聚类分析及其结果可视化
要使用Python实现K-means聚类算法并将其应用到给定数据集上(例如上述城市数据),可以遵循以下步骤:
### 步骤 1: 准备环境与数据
首先需要安装必要的库,如`numpy`, `pandas`, 和 `matplotlib`用于处理数据和绘制图表,以及`scikit-learn`中的`KMeans`模块来执行聚类分析。
```bash
pip install numpy pandas matplotlib scikit-learn
```
然后,从提供的数据中选择两个或多个特征作为输入变量进行聚类分析。这里我们选择“employed_individuals_num”(就业人数)和“freight_transportation_volume”(货运量)作为例子。
### 步骤 2: 导入所需库
```python
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
```
### 步骤 3: 加载数据
由于数据是直接以文本形式给出的,我们可以手动创建一个DataFrame或者保存成CSV文件再读取。
```python
data = {
'city': ['郑州', '开封', '洛阳', '平顶山', '安阳', '鹤壁', '新乡', '焦作', '濮阳', '许昌', '漯河', '三门峡', '南阳', '商丘', '信阳', '周口', '驻马店', '济源'],
'employed_individuals_num': [22.01, 11.06, 16.87, 20.57, 10.75, 4, 11.82, 11.29, 7.56, 8, 5.54, 5.55, 20.44, 15.81, 30.71, 4.85, 13.39, 2.42],
'freight_transportation_volume': [19709, 2588, 16570, 9289, 10294, 5018, 16050, 15295, 3172, 5997, 5322, 4424, 15696, 15083, 6610, 15178, 9479, 3906]
}
df = pd.DataFrame(data)
X = df[['employed_individuals_num', 'freight_transportation_volume']]
```
### 步骤 4: 应用K-Means算法
设置K值为3,并训练模型。
```python
kmeans = KMeans(n_clusters=3, random_state=0).fit(X)
labels = kmeans.labels_
centroids = kmeans.cluster_centers_
```
### 步骤 5: 可视化结果
利用Matplotlib绘制散点图显示聚类效果及各簇中心的位置。
```python
plt.figure(figsize=(10, 6))
colors = ["r.", "g.", "b."]
for i in range(len(X)):
plt.plot(X.iloc[i][0], X.iloc[i][1], colors[labels[i]], markersize=10)
# 绘制聚类中心
for j in range(3):
plt.scatter(centroids[j][0], centroids[j][1], marker="x", s=150, linewidths=5, zorder=10)
plt.xlabel('Employed Individuals Number')
plt.ylabel('Freight Transportation Volume')
plt.title('City Clustering with K-Means (K=3)')
plt.show()
```
以上就是使用Python实现K-means聚类算法的具体操作流程。通过调整参数和选择不同的特征组合,您可以探索不同维度下的聚类效果。
阅读全文