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

 

 

posted @   奶油冰激凌  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示