首页 > 其他分享 >10.18

10.18

时间:2025-01-02 15:44:22浏览次数:1  
标签:score 训练 10.18 train 测试 聚类 test

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

一、实验目的

 

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

二、实验内容

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

 

 

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

   1. 算法伪代码

算法名称:基于 K 均值聚类的鸢尾花数据集分类及多维度性能评估

输入

 

鸢尾花数据集(包含特征数据以及对应的类别标签)

步骤



  1. 数据准备阶段
  • o 从 sklearn 库中加载鸢尾花数据集,提取特征数据赋值给变量 X,类别标签赋值给变量 y。
  • o 使用留出法,按照测试集占总样本的 0.33 比例,将数据集划分为训练集(X_train、y_train)和测试集(X_test、y_test),设置随机种子为 42 并通过 stratify=y 保证训练集和测试集的类别分布与原始数据集相似。
  1. 模型构建与训练阶段
  • o 创建 K 均值聚类模型实例 kmeans,设定类别数为 3,随机数生成器的种子设为 42,同时显式设置 n_init 参数为 10。
  • o 使用训练集数据(X_train、y_train)对 kmeans 模型进行训练。
  1. 交叉验证准备阶段
  • o 利用训练好的 kmeans 模型对训练集 X_train 进行预测,得到训练集的预测标签 train_predictions。
  • o 定义函数 evaluate_model,用于根据真实标签 y_true 和预测标签 y_pred 计算准确度(accuracy)、精度(precision)、召回率(recall)以及 F1 值(f1),计算精度、召回率、F1 值时采用 'weighted' 平均方式。
  1. 交叉验证阶段
  • o 运用五折交叉验证方法,针对 kmeans 模型在训练集(X_train、y_train)上进行性能评估,将每次折叠得到的评估分数存储在 cross_val_scores 变量中。
  • o 打印输出五折交叉验证得分(即 cross_val_scores 的值)。
  1. 训练集性能评估阶段
  • o 调用 evaluate_model 函数,传入训练集的真实标签 y_train 和预测标签 train_predictions,计算并获取训练集上的准确度、精度、召回率以及 F1 值,分别赋值给变量 accuracy、precision、precision、f1。
  • o 打印输出训练集上的各项评估指标,包括准确度、精度、召回率以及 F1 值。
  1. 测试集性能评估阶段
  • o 利用训练好的 kmeans 模型对测试集 X_test 进行预测,得到测试集的预测标签 test_predictions。
  • o 调用 evaluate_model 函数,传入测试集的真实标签 y_test 和预测标签 test_predictions,计算并获取测试集上的准确度、精度、召回率以及 F1 值,分别赋值给变量 test_accuracy、test_precision、test_recall、test_f1。
  • o 打印输出测试集上的各项评估指标,包括准确度、精度、召回率以及 F1 值。
  1. 聚类效果评估阶段(使用轮廓系数)
  • o 计算测试集的轮廓系数 silhouette_avg,通过 silhouette_score 函数传入测试集特征数据 X_test 和测试集预测标签 test_predictions 进行计算。
  • o 打印输出测试集轮廓系数(即 silhouette_avg 的值)。

输出



  1. 五折交叉验证得分。
  2. 训练集上的准确度、精度、召回率以及 F1 值。
  3. 测试集上的准确度、精度、召回率以及 F1 值。
  4. 测试集轮廓系数。

详细描述五折交叉验证的过程

评估模型性能的指标有哪些?

如何选择合适的K值对于K均值聚类?

 

   2. 算法主要代码

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

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.cluster import KMeans
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.metrics import silhouette_score

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

# 2. 留出法将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42, stratify=y)

# 3. 训练 K 均值聚类算法,类别数为 3,设置 n_init 参数
kmeans = KMeans(n_clusters=3, random_state=42, n_init=10)  # 显式设置 n_init
kmeans.fit(X_train)

# 4. 使用五折交叉验证评估模型性能
# 为了计算准确度、精度、召回率和 F1 值,我们需要将聚类结果和真实标签进行比较
# KMeans 返回聚类标签,我们使用其预测进行评估
# 先得到训练集的预测标签
train_predictions = kmeans.predict(X_train)


# 然后为了便于进行交叉验证,定义一个函数来计算评估指标
def evaluate_model(y_true, y_pred):
    accuracy = accuracy_score(y_true, y_pred)
    precision = precision_score(y_true, y_pred, average='weighted')
    recall = recall_score(y_true, y_pred, average='weighted')
    f1 = f1_score(y_true, y_pred, average='weighted')
    return accuracy, precision, recall, f1


# 进行五折交叉验证
cross_val_scores = cross_val_score(kmeans, X_train, y_train, cv=5)
print(f'五折交叉验证得分: {cross_val_scores}')

# 在训练集上评估模型
accuracy, precision, recall, f1 = evaluate_model(y_train, train_predictions)
print(f'训练集上的评估指标:\n准确度: {accuracy}\n精度: {precision}\n召回率: {recall}\nF1 值: {f1}')

# 5. 在测试集上测试模型性能
test_predictions = kmeans.predict(X_test)
test_accuracy, test_precision, test_recall, test_f1 = evaluate_model(y_test, test_predictions)

print(f'测试集上的评估指标:\n准确度: {test_accuracy}\n精度: {test_precision}\n召回率: {test_recall}\nF1 值: {test_f1}')

# 6. 计算轮廓系数以评估聚类效果
silhouette_avg = silhouette_score(X_test, test_predictions)
print(f'测试集轮廓系数: {silhouette_avg}')

 

 

 

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

 

 

四、实验结果分析

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

 

 

2. 对比分析

在对 Iris 数据集应用 KMeans 聚类算法的分析中,模型的表现显著低于预期。五折交叉验证得分均为负值,显示出模型在训练集上的聚类效果不佳。此外,训练集和测试集的评估指标,包括准确度、精度、召回率和 F1 值,均较低,表明模型未能有效地区分各个聚类,且在未见数据上的泛化能力有限。测试集的轮廓系数为 0.525,显示出聚类效果一般,存在一定的重叠现象。

 

标签:score,训练,10.18,train,测试,聚类,test
From: https://www.cnblogs.com/jais/p/18647895

相关文章

  • 10.18
    晚上了上次的代码进行对自身个人信息的修改<%--CreatedbyIntelliJIDEA.User:29782Date:2024/5/15Time:22:00TochangethistemplateuseFile|Settings|FileTemplates.--%><%@pagecontentType="text/html;charset=UTF-8"language="java"......
  • 10.18日报
    上了软件构造和企业文化的课,下午上了人机交互的课,完成了部分实验内容,做了一个主界面以下为部分代码:namespacetest1{partialclassloginForm{///<summary>///Requireddesignervariable.///</summary>privateSystem.ComponentMode......
  • 10.18随笔
    一些最重要的SQL命令SELECT -从数据库中提取数据UPDATE -更新数据库中的数据DELETE -从数据库中删除数据INSERTINTO -向数据库中插入新数据CREATEDATABASE -创建新数据库ALTERDATABASE -修改数据库CREATETABLE -创建新表ALTERTABLE -变更(改变)数据......
  • 10.18
    1.空指针异常(java.lang.nullpointerexception)发生该情况一般是字符串变量未初始化,数组未初始化,类对象未初始化等。还有一种情况是当该对象为空时你并没有判断是否为空值,这个错误我在之前的web习题上犯过,因此为了避免这种情况,除了检查是否初始化之外,如有必要则要加上判断是否为nul......
  • 大二快乐日记10.18
    2.@WebServlet实现单一映射在@WebServlet注解中,一般使用value属性实现Servlet单一映射,代码如下。纯文本复制packagenet.biancheng.www;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.serv......
  • 10.18每日总结
    1、基本概念1.1、前言web开发:web,网页的意思, www.baidu.com静态webhtml,css提供给所有人看的数据始终不会发生变化!动态web淘宝,几乎是所有的网站;提供给所有人看的数据始终会发生变化,每个人在不同的时间,不同的地点看到的信息各不相同!技术栈:Servlet/JSP,A......
  • 10.18
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Vue-生命周期</title>......
  • 每日总结10.18
    今天是充实的一天,我上了三节英语课,其中我们讨论了一系列有趣的主题,包括文学、文化和语法。这些课程帮助我更好地理解英语,提高了我的语言技能。下午,我投入时间学习Java编程。在这节课中,我学习了如何处理文件,特别是如何读取文本文件、分析文本数据和将结果写入另一个文件。我编写了......
  • 2023.10.18
    第18节:调试这一节强调了调试的重要性以及一些有关调试的心理学和技巧。1.调试的目标是解决问题,而不是对问题提出攻击性的反应。遇到bug时,应以解决问题为导向,而不是责怪他人或自己。2.当你目睹bug的发生或看到bug报告时,不要急于表示“那不可能”。首要任务是思考为什么......
  • 10.18 Java异常处理2
     以上便是Java中异常的基本代码结构,其中,Java中所有异常都派生于excption以下是jdk中与异常相关的类。 ......