11.6
实验七:K均值聚类算法实现与测试
一、实验目的
深入理解 K 均值聚类算法的算法原理,进而理解无监督学习的意义,能够使用 Python语言实现 K 均值聚类算法的训练与测试,并且使用五折交叉验证算法进行模型训练与评估。
二、实验内容
(1)从 scikit-learn 库中加载 iris 数据集,使用留出法留出 1/3 的样本作为测试集(注
意同分布取样);
(2)使用训练集训练 K 均值聚类算法,类别数为 3;
(3)使用五折交叉验证对模型性能(准确度、精度、召回率和 F1 值)进行评估和选
择;
(4)使用测试集,测试模型的性能,对测试结果进行分析,完成实验报告中实验七的
部分。
三、算法步骤、代码、及结果
1. 算法伪代码
1. 初始化
- 从数据集中选择 K 个初始聚类中心(可以随机选择 K 个点)
2. 迭代过程
重复以下步骤直到收敛(聚类中心不再变化):
a. 对每个数据点分配一个标签
- 对于每个数据点 xi,计算它到每个聚类中心的距离,选择最近的聚类中心作为 xi 的标签。
- 即,对于每个 xi,计算其到 K 个聚类中心的距离 d(xi, cj),选择距离最小的 cj 作为 xi 的标签。
b. 重新计算每个聚类的均值
- 对于每个聚类 j,重新计算该聚类中所有数据点的均值,作为新的聚类中心。
- 即,新的聚类中心 cj = (1/m) * Σ xi 其中 xi 是属于聚类 j 的数据点,m 是该聚类中数据点的个数。
3. 判断收敛
- 如果聚类中心不再变化,或者变化非常小,则算法终止。
4. 输出结果
- 输出每个数据点的聚类标签。
- 输出最终的 K 个聚类中心。
2. 算法主要代码
完整源代码\调用库方法(函数参数说明)
import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split, cross_validate from sklearn.cluster import KMeans from sklearn.metrics import accuracy_score, classification_report, make_scorer, precision_score, recall_score, f1_score # 1. 加载数据集并进行数据拆分 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) # 2. 使用 K 均值聚类算法训练模型,类别数为 3 kmeans = KMeans(n_clusters=3, random_state=42) kmeans.fit(X_train) # 3. 使用五折交叉验证评估模型性能 scoring = { 'accuracy': 'accuracy', 'precision': make_scorer(precision_score, average='weighted'), 'recall': make_scorer(recall_score, average='weighted'), 'f1': make_scorer(f1_score, average='weighted') } # 五折交叉验证 scores = cross_validate(kmeans, X_train, y_train, scoring=scoring, cv=5) # 输出交叉验证结果 print("Cross-validation Results:") print("Accuracy: ", scores['test_accuracy'].mean()) print("Precision: ", scores['test_precision'].mean()) print("Recall: ", scores['test_recall'].mean()) print("F1: ", scores['test_f1'].mean()) # 4. 在测试集上进行评估 y_pred = kmeans.predict(X_test) # 测试集准确率 test_accuracy = accuracy_score(y_test, y_pred) print(f"Test Accuracy: {test_accuracy:.4f}") # 打印测试集的详细分类报告 print("\nClassification Report:") print(classification_report(y_test, y_pred))
3. 训练结果截图(包括:准确率、精度(查准率)、召回率(查全率)、F1)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!