任务2 鸢尾花聚类模型及其评价【任务需求】使用KMeans聚类算法对鸢尾花Iris数据集进行聚类分析,并通过Adjusted Rand Index(ARI)评价指标来评估聚类效果。【实现思路及步骤】导
时间: 2024-10-14 20:18:44 浏览: 211
在任务2中,我们将采用鸢尾花(Iris)数据集来进行KMeans聚类模型的应用。鸢尾花数据集是一个经典的分类问题数据集,包含四个连续变量(花瓣长度、花瓣宽度、萼片长度和萼片宽度),常用于机器学习的入门示例。
以下是实现这个任务的步骤:
1. **导入库**:首先,我们需要导入必要的Python数据分析库,如pandas for 数据处理,numpy for 数组操作,matplotlib for 可视化,sklearn的preprocessing模块进行特征缩放,以及sklearn的cluster模块中的KMeans进行聚类。
```python
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
import matplotlib.pyplot as plt
```
2. **加载数据**:使用`load_iris()`函数加载鸢尾花数据。
```python
iris = load_iris()
X = iris.data
y = iris.target
```
3. **预处理数据**:对于KMeans,我们通常需要对数值型特征进行标准化,确保每个特征具有相似的尺度。
```python
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
```
4. **选择合适的k值**:尝试不同的k值(比如2到10),运行KMeans并计算ARI分数,找到最佳的聚类数。
```python
k_values = range(2, 11)
ari_scores = []
for k in k_values:
kmeans = KMeans(n_clusters=k)
kmeans.fit(X_scaled)
y_pred = kmeans.labels_
ari = adjusted_rand_score(y, y_pred)
ari_scores.append((k, ari))
```
5. **评估聚类效果**:绘制ARI得分随着k值变化的曲线,找出ARI最大的那一点,即最优聚类数。
```python
best_k = max(ari_scores, key=lambda x: x[1])[0]
print(f"Best number of clusters: {best_k}")
plt.plot(k_values, ari_scores, 'bx-')
plt.xlabel('Number of Clusters')
plt.ylabel('Adjusted Rand Score')
plt.title('Choosing optimal number of clusters using ARI');
```
6. **查看聚类结果**:最后,我们可以使用得到的最佳k值,将数据重新分为簇,并可视化每个簇内的样本分布。
```python
best_kmeans = KMeans(n_clusters=best_k)
y_pred_best = best_kmeans.fit_predict(X_scaled)
# Visualize the clusters
plt.scatter(X_scaled[y_pred_best == 0, 0], X_scaled[y_pred_best == 0, 1], label='Cluster 1', c='red')
plt.scatter(X_scaled[y_pred_best == 1, 0], X_scaled[y_pred_best == 1, 1], label='Cluster 2', c='blue')
plt.scatter(X_scaled[y_pred_best == 2, 0], X_scaled[y_pred_best == 2, 1], label='Cluster 3', c='green')
plt.legend();
```
阅读全文
相关推荐


















