用python实现基于K-means 分类算法,对wine数据集,葡萄酒分类并用matplot画图
时间: 2025-04-06 16:10:50 浏览: 71
### 实现K-means聚类分析并对结果进行可视化
以下是基于 `sklearn` 的 K-means 聚类算法对 `wine` 数据集进行分类的具体实现方法,并利用 `matplotlib` 可视化聚类效果。
#### 导入必要的库
为了完成此任务,需导入以下 Python 库:
```python
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
```
这些库分别用于加载数据、标准化特征以及执行 K-means 聚类和绘图操作[^1]。
---
#### 加载并预处理数据
首先加载 `wine` 数据集,并对其进行标准化处理以便更好地应用 K-means 算法:
```python
# 加载 wine 数据集
wine = datasets.load_wine()
X = wine['data']
y = wine['target']
# 对数据进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
```
上述代码片段中,`StandardScaler()` 将原始数据转换为均值为零、标准差为一的形式,从而提高模型性能。
---
#### 执行 K-means 聚类
定义 K-means 模型并将数据拟合到该模型上。这里假设类别数为 3(因为 `wine` 数据集中有三个类别):
```python
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_scaled)
```
此处设置参数 `n_clusters=3` 表示期望将数据划分为三组;`random_state=42` 则是为了确保每次运行的结果一致。
---
#### 计算评估指标
可以计算一些常用的聚类质量度量来验证结果的有效性,例如轮廓系数 (Silhouette Score) 和调整兰德指数 (Adjusted Rand Index):
```python
silhouette_avg = silhouette_score(X_scaled, clusters)
ari = adjusted_rand_score(y, clusters)
print(f"Average Silhouette Score: {silhouette_avg:.4f}")
print(f"Adjusted Rand Index: {ari:.4f}")
```
这两个分数越高表明聚类的效果越好[^2]。
---
#### 使用 Matplotlib 进行可视化
最后一步是对聚类结果进行可视化展示。由于原数据维度较高,可先降维至二维再作图:
```python
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
plt.figure(figsize=(8, 6))
scatter = plt.scatter(X_pca[:, 0], X_pca[:, 1], c=clusters, cmap='viridis', s=50, alpha=0.7)
centers = kmeans.cluster_centers_
centers_pca = pca.transform(centers)
plt.scatter(centers_pca[:, 0], centers_pca[:, 1], marker="x", color="red", s=200, linewidths=3, label="Centroids")
plt.title('K-Means Clustering of Wine Dataset')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.legend()
plt.colorbar(scatter).set_label('Cluster Labels')
plt.show()
```
这段代码通过主成分分析 (PCA) 把高维空间映射到了两维平面上,便于观察各个簇之间的分布情况及其中心位置。
---
### 总结
以上展示了完整的流程——从准备环境到最终呈现图形化的聚类成果。这种方法不仅能够帮助理解不同类型的葡萄酒特性差异所在,还提供了定量评价手段以衡量分群的质量优劣程度。
阅读全文