9.27

(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注
意同分布取样);
(2)使用训练集训练 K 均值聚类算法,类别数为 3;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选
择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验七的
部分。
import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, KFold
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, adjusted_rand_score

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

# 使用留出法划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1/3, random_state=42, stratify=y)

# 训练K均值聚类模型
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X_train)

# 由于聚类无真实标签,这里使用ARI(调整兰德指数)评估聚类效果,而不是准确度、精度、召回率和F1值(这些指标通常用于分类任务)
# 五折交叉验证评估模型性能(使用ARI)
kf = KFold(n_splits=5, shuffle=True, random_state=42)
ari_scores = []
for train_index, test_index in kf.split(X_train):
    X_fold_train, X_fold_test = X_train[train_index], X_train[test_index]
    y_fold_train, y_fold_test = y_train[train_index], y_train[test_index]
    kmeans_fold = KMeans(n_clusters=3, random_state=42)
    kmeans_fold.fit(X_fold_train)
    y_pred_fold = kmeans_fold.predict(X_fold_test)
    ari_score = adjusted_rand_score(y_fold_test, y_pred_fold)
    ari_scores.append(ari_score)

print("五折交叉验证ARI平均值:", np.mean(ari_scores))

# 使用测试集测试模型性能(使用ARI)
y_pred = kmeans.predict(X_test)
ari = adjusted_rand_score(y_test, y_pred)

print("测试集ARI:", ari)

# 测试结果分析
# 比较交叉验证和测试集的ARI
if abs(ari - np.mean(ari_scores)) < 0.1:
    print("模型在训练集交叉验证和测试集上的聚类效果较为稳定。")
else:
    print("模型在训练集交叉验证和测试集上的聚类效果差异较大,可能存在过拟合或欠拟合问题。")

# 可以进一步分析聚类结果的分布情况等
cluster_labels = kmeans.labels_
cluster_sizes = [np.sum(cluster_labels == i) for i in range(3)]
print("聚类结果分布:", cluster_sizes)
在上述代码中:

 

    1. 首先从sklearn库中加载iris数据集,并使用train_test_split函数按照1/3的比例留出测试集,同时保证训练集和测试集的类别分布一致。
    2. 接着使用训练集训练K均值聚类模型,指定类别数为3
    3. 由于聚类是无监督学习,没有真实的类别标签用于计算准确度、精度、召回率和F1值,这里使用调整兰德指数(ARI)来评估聚类效果。通过五折交叉验证,每次在折叠的训练集上训练K均值模型,并在折叠的测试集上计算ARI,最后输出ARI的平均值。
    4. 使用测试集对模型进行测试,同样计算ARI值,并与交叉验证的ARI平均值进行比较,以分析模型的稳定性和性能。
posted @ 2024-12-31 15:13  酥饼馅红豆沙  阅读(18)  评论(0)    收藏  举报