12.11实验七:K 均值聚类算法实现与测试

 

 

一、实验目的

深入理解 K 均值聚类算法的算法原理,进而理解无监督学习的意义,能够使用 Python语言实现 K 均值聚类算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。

 

二、实验内容

 

1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注意同分布取样);

2)使用训练集训练 K 均值聚类算法,类别数为 3

3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选择;

4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验七的部分。

 

三、算法步骤、代码、及结果

   1. 算法伪代码

开始

 

   数据集 = load_iris()

 

   特征 = 数据集.data

   标签 = 数据集.target

 

   训练集特征, 测试集特征, 训练集标签, 测试集标签 = train_test_split(特征, 标签, 测试集比例=1/3, 随机种子=42, 同分布取样)

 

   模型 = KMeans(类别数=3, 随机种子=42)

 

   模型.fit(训练集特征)

 

   指标 = {

       '准确度': accuracy_score,

       '精度': precision_score(加权平均),

       '召回率': recall_score(加权平均),

       'F1': f1_score(加权平均)

   }

 

   对于 每个指标 指标 :

       交叉验证得分 = cross_val_score(模型, 训练集特征, 训练集标签, 折数=5, 评分=指标)

       输出(指标 + " : " + 交叉验证得分的平均值)

 

   预测结果 = 模型.predict(测试集特征)

 

   报告 = classification_report(测试集标签, 预测结果)

   输出(报告)

 

结束

   2. 算法主要代码

完整源代码\调用库方法(函数参数说明)

'''

Created on 20241212

 

@author: 席酒

'''

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split, cross_val_score

from sklearn.cluster import KMeans

from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score, classification_report

 

# 加载 iris 数据集

iris = load_iris()

X = iris.data

y = iris.target

 

# 使用留出法将数据集分为训练集和测试集,测试集占 1/3

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

 

# 创建 KMeans 模型,类别数为 3

kmeans = KMeans(n_clusters=3, random_state=42)

 

# 使用训练集进行训练

kmeans.fit(X_train)

 

# 定义评估指标

scoring = {

'accuracy': make_scorer(accuracy_score),

'precision': make_scorer(precision_score, average='weighted'),

'recall': make_scorer(recall_score, average='weighted'),

'f1': make_scorer(f1_score, average='weighted')

}

 

# 进行五折交叉验证

scores = {metric: cross_val_score(kmeans, X_train, y_train, cv=5, scoring=scoring[metric]) for metric in scoring}

 

# 输出每个指标的平均值

for metric, score in scores.items():

print(f"{metric} : {score.mean():.4f} ± {score.std():.4f}")

 

# 使用测试集进行预测

y_pred = kmeans.predict(X_test)

 

# 输出分类报告

report = classification_report(y_test, y_pred)

print(report)

 

 

 

   3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 

 

四、实验结果分析

1. 测试结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1

 

 2. 对比分析

 K 均值聚类算法在此数据集上的表现不佳,可能是因为该算法主要用于无监督学习,而 iris 数据集的标签信息未能有效利用。

posted @     阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示