3.7

scikit-learn 库中 K 均值聚类算法的 Python 实现示例。此代码段将引导你通过加载数据、分割数据集、训练模型、进行交叉验证评估以及最终在测试集上评估模型性能的步骤。

1. 环境准备

确保你的环境中已经安装了 scikit-learn 和其他必要的库。如果没有,可以通过 pip 安装:


深色版本
pip install scikit-learn

2. 加载数据与预处理

首先,我们将从 scikit-learn 中加载 iris 数据集,并将其分为训练集和测试集。我们将使用 train_test_split 函数来确保同分布取样(即保持原始数据集中的类别比例)。

Python
深色版本
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载 iris 数据集
iris = load_iris()
X, y = iris.data, iris.target

# 将数据集划分为训练集和测试集,留出 1/3 的样本作为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, stratify=y, random_state=42)

3. 训练 K 均值聚类模型

接下来,我们使用训练集来训练 K 均值聚类模型。我们将设置类别数为 3,因为 Iris 数据集中有三个不同的类别。

Python
深色版本
from sklearn.cluster import KMeans

# 初始化 KMeans 模型,类别数设为 3
kmeans = KMeans(n_clusters=3, random_state=42)

# 在训练集上训练模型
kmeans.fit(X_train)

4. 五折交叉验证

由于 K 均值是一个无监督学习算法,它没有直接的方式去计算如准确度、精度、召回率和 F1 值这样的分类指标。但是,我们可以使用一些技巧,例如将聚类结果与真实的标签进行匹配,然后计算这些指标。这里我们使用 cross_val_score 进行五折交叉验证,但需要注意的是,对于无监督方法,通常不直接评估这些分类指标。

Python
深色版本
from sklearn.model_selection import cross_val_score
from sklearn.metrics import make_scorer, accuracy_score

# 创建一个评分函数,用于评估聚类结果与真实标签的匹配程度
def cluster_accuracy(y_true, y_pred):
    # ... 这里需要实现一个函数,将聚类结果映射到最接近的真实标签
    # 并返回相应的准确度
    pass

# 使用自定义评分器进行五折交叉验证
scores = cross_val_score(kmeans, X_train, y_train, cv=5, scoring=make_scorer(cluster_accuracy))
print("Cross-validation scores: ", scores)
print("Average CV score: ", scores.mean())

注意:上面的 cluster_accuracy 函数需要你根据实际情况实现。你可以参考 sklearn.metrics 模块下的 adjusted_rand_score 或者 normalized_mutual_info_score 等函数,它们可以用来衡量聚类结果的质量。

posted @ 2025-03-07 23:33  混沌武士丞  阅读(11)  评论(0)    收藏  举报