背景

乳腺癌数据集,569个样本,30个特征,2个类别(良性/恶性)

步骤

  1. 加载数据集
  2. 拆分训练集、测试集
  3. 数据预处理(标准化)
  4. 选择模型
  5. 模型训练(拟合)
  6. 测试模型效果
  7. 评估模型

分析方法

对数据集使用 7 种分类方法进行分析

  • K 近邻(K-NN)
  • 决策树
  • 支持向量机(SVM)
  • 逻辑回归
  • 随机森林
  • 朴素贝叶斯
  • 多层感知机(MLP)

模型分析结果

各模型 ROC & AUC 对比


--- 正在训练 K近邻 (K-NN) 模型 ---
K近邻 (K-NN) 模型的准确率: 0.9591
K近邻 (K-NN) 模型的分类报告:precision    recall  f1-score   supportmalignant       0.95      0.94      0.94        63benign       0.96      0.97      0.97       108accuracy                           0.96       171macro avg       0.96      0.95      0.96       171
weighted avg       0.96      0.96      0.96       171--- 正在训练 决策树 模型 ---
决策树 模型的准确率: 0.9415
决策树 模型的分类报告:precision    recall  f1-score   supportmalignant       0.90      0.95      0.92        63benign       0.97      0.94      0.95       108accuracy                           0.94       171macro avg       0.93      0.94      0.94       171
weighted avg       0.94      0.94      0.94       171--- 正在训练 支持向量机 (SVM) 模型 ---
支持向量机 (SVM) 模型的准确率: 0.9766
支持向量机 (SVM) 模型的分类报告:precision    recall  f1-score   supportmalignant       0.97      0.97      0.97        63benign       0.98      0.98      0.98       108accuracy                           0.98       171macro avg       0.97      0.97      0.97       171
weighted avg       0.98      0.98      0.98       171--- 正在训练 逻辑回归 模型 ---
逻辑回归 模型的准确率: 0.9825
逻辑回归 模型的分类报告:precision    recall  f1-score   supportmalignant       0.97      0.98      0.98        63benign       0.99      0.98      0.99       108accuracy                           0.98       171macro avg       0.98      0.98      0.98       171
weighted avg       0.98      0.98      0.98       171--- 正在训练 随机森林 模型 ---
随机森林 模型的准确率: 0.9708
随机森林 模型的分类报告:precision    recall  f1-score   supportmalignant       0.98      0.94      0.96        63benign       0.96      0.99      0.98       108accuracy                           0.97       171macro avg       0.97      0.96      0.97       171
weighted avg       0.97      0.97      0.97       171--- 正在训练 朴素贝叶斯 模型 ---
朴素贝叶斯 模型的准确率: 0.9357
朴素贝叶斯 模型的分类报告:precision    recall  f1-score   supportmalignant       0.92      0.90      0.91        63benign       0.94      0.95      0.95       108accuracy                           0.94       171macro avg       0.93      0.93      0.93       171
weighted avg       0.94      0.94      0.94       171--- 正在训练 多层感知器 (MLP) 模型 ---
多层感知器 (MLP) 模型的准确率: 0.9825
多层感知器 (MLP) 模型的分类报告:precision    recall  f1-score   supportmalignant       0.98      0.97      0.98        63benign       0.98      0.99      0.99       108accuracy                           0.98       171macro avg       0.98      0.98      0.98       171
weighted avg       0.98      0.98      0.98       171

代码

from sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.neural_network import MLPClassifierfrom sklearn.metrics import accuracy_score, classification_report, roc_curve, aucimport matplotlib.pyplot as plt
import numpy as np# 设置 Matplotlib 字体以正确显示中文
plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Zen Hei', 'STHeiti', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False  def perform_breast_cancer_analysis():"""使用 scikit-learn 对乳腺癌数据集进行全面的分析。该函数包含数据加载、预处理、模型训练、评估和 ROC/AUC 可视化。"""print("--- 正在加载乳腺癌数据集 ---")# 加载乳腺癌数据集cancer = load_breast_cancer()# 获取数据特征和目标标签X = cancer.datay = cancer.targettarget_names = cancer.target_namesprint("\n--- 数据集概览 ---")print(f"数据形状: {X.shape}")print(f"目标名称: {target_names}")# 将数据集划分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)print("\n--- 数据划分结果 ---")print(f"训练集形状: {X_train.shape}")print(f"测试集形状: {X_test.shape}")# 数据标准化print("\n--- 正在对数据进行标准化处理 ---")scaler = StandardScaler()X_train_scaled = scaler.fit_transform(X_train)X_test_scaled = scaler.transform(X_test)# 定义并训练多个分类器模型models = {"K近邻 (K-NN)": KNeighborsClassifier(n_neighbors=5),"决策树": DecisionTreeClassifier(random_state=42),"支持向量机 (SVM)": SVC(kernel='rbf', C=1.0, random_state=42, probability=True),"逻辑回归": LogisticRegression(random_state=42, max_iter=10000),"随机森林": RandomForestClassifier(random_state=42),"朴素贝叶斯": GaussianNB(),"多层感知器 (MLP)": MLPClassifier(random_state=42, max_iter=10000)}print("\n--- 模型训练与评估 ---")for name, model in models.items():print(f"\n--- 正在训练 {name} 模型 ---")model.fit(X_train_scaled, y_train)y_pred = model.predict(X_test_scaled)accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred, target_names=target_names)print(f"{name} 模型的准确率: {accuracy:.4f}")print(f"{name} 模型的分类报告:\n{report}")print("\n--- ROC 曲线和 AUC 对比 ---")num_models = len(models)cols = 3rows = (num_models + cols - 1) // colsfig, axes = plt.subplots(rows, cols, figsize=(18, 6 * rows))axes = axes.flatten()for i, (name, model) in enumerate(models.items()):ax = axes[i]# 获取预测概率if hasattr(model, "predict_proba"):y_score = model.predict_proba(X_test_scaled)[:, 1]else:y_score = model.decision_function(X_test_scaled)# 计算 ROC 曲线和 AUCfpr, tpr, _ = roc_curve(y_test, y_score)roc_auc = auc(fpr, tpr)# 绘制 ROC 曲线并填充ax.plot(fpr, tpr, label=f'AUC = {roc_auc:.2f}', alpha=0.7)ax.fill_between(fpr, tpr, alpha=0.1)# 绘制对角线 (随机猜测)ax.plot([0, 1], [0, 1], 'k--', lw=2)# 设置图表属性ax.set_xlim([0.0, 1.0])ax.set_ylim([0.0, 1.05])ax.set_xlabel('假正率 (FPR)')ax.set_ylabel('真正率 (TPR)')ax.set_title(f'{name} - ROC 曲线')ax.legend(loc="lower right", fontsize='small')ax.grid(True)for j in range(num_models, len(axes)):axes[j].axis('off')plt.tight_layout()plt.show()if __name__ == "__main__":perform_breast_cancer_analysis()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/96178.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/96178.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/96178.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开题答辩全过程】以 _基于SpringBoot技术的“树洞”心理咨询服务平台的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

R 语法高亮为什么没有,是需要安装专用的编辑软件,R语言自带的R-gui 功能还是比较简单

R 语法高亮为什么没有,是需要安装专用的编辑软件,R语言自带的R-gui 功能还是比较简单 以下是一些主流的 R 编辑软件(IDE / 编辑器),适用于不同需求的用户: ✅ 最推荐:RStudio(免费/…

使用UniApp实现下拉框和表格组件页面

使用UniApp实现下拉框和表格组件页面UniApp提供了一套完整的跨平台开发框架&#xff0c;支持在多个平台上运行。下拉框和表格是常见的UI组件&#xff0c;可以通过UniApp内置组件或第三方插件实现。下拉框组件的实现UniApp内置的<picker>组件可以实现下拉选择功能。以下是…

JavaScript 对象说明

JavaScript 对象说明 1. 对象的基本概念 在 JavaScript 中&#xff0c;对象是一种复合数据类型&#xff0c;用于存储相关联的属性和方法。对象可以看作是属性的集合&#xff0c;其中每个属性都由一个键&#xff08;key&#xff09;和一个值&#xff08;value&#xff09;组成。…

【竞赛系列】机器学习实操项目04——客户信用评估模型开发全流程(baseline)

上一章&#xff1a;机器学习实操项目03——Scikit-learn介绍及简单分类案例 下一章&#xff1a; 机器学习核心知识点目录&#xff1a;机器学习核心知识点目录 机器学习实战项目目录&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大…

C++中的单例模式的实现

1 什么是单例模式单例模式 是一种创建型设计模式&#xff0c;确保一个类在整个程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点。核心要求&#xff1a;类不能被外部随意创建&#xff08;禁止 public 构造函数或限制实例数量&#xff09;。不能被复制或移动。提供一…

汇编基础1

1.格式伪操作&#xff1a;它们不是ARM处理器实际的指令&#xff08;如MOV&#xff0c; ADD等&#xff09;&#xff0c;而是写给汇编器看的命令&#xff0c;用于指导汇编器如何工作area reset, code, readonlycode32entry内容 endarea: 这是最重要的一个伪操作&#xff0c;用…

设计模式(C++)详解—单例模式(2)

<摘要> 单例模式是创建型设计模式中最简单但应用最广泛的模式之一&#xff0c;它确保一个类只有一个实例并提供全局访问点。本文从历史背景和核心概念出发&#xff0c;系统阐述了单例模式的产生缘由和演进脉络&#xff0c;深入剖析了其在资源管理、状态一致性和访问控制方…

kafka如何保证消息的顺序性

kafka如何保证消息的顺序性 Kafka只能在分区&#xff08;Partition&#xff09;级别保证消息的顺序性&#xff0c;而不能在主题&#xff08;Topic&#xff09;级别保证全局顺序。 核心原理&#xff1a;分区和偏移量分区&#xff08;Partition&#xff09;是顺序性的基础&#x…

传输层:UDP/TCP协议

网络协议图 一.UDP 特点: 无连接&#xff0c;不可靠&#xff0c;面向数据报&#xff0c;全双工&#xff08;前面网络编程中介绍过&#xff09; 格式: 服务器的端口号一般都是程序员指定的(这样你才能访问到),客户端的端口号是系统自动分配的(如果提前指定好, 可能会与其他程…

A/B测试全解析:原理、流程与实战案例

A/B测试&#xff08;AB Testing&#xff09;原理与实践全解析 在数据驱动的时代&#xff0c;A/B测试几乎是每一个互联网公司都会使用的实验方法。无论是电商平台优化转化率&#xff0c;还是内容平台提升点击率&#xff0c;抑或是游戏公司提升留存&#xff0c;A/B测试都是最常见…

循环神经网络(三):小练习

RNN小练习 要求&#xff1a; 假设有 4 个字 吃 了 没 &#xff1f;&#xff0c;请使用 torch.nn.RNN 完成以下任务 将每个进行 one-hot 编码请使用 吃 了 没 作为输入序列&#xff0c;了 没 &#xff1f; 作为输出序列RNN 的 hidden_size 64请将 RNN 的输出使用全连接转换成 4…

ESPIDF官方文档,启用dhcp会禁用对应的STA或AP的静态IP,我测试STA确实是,但是AP不是,为什么

1. STA 模式下的 DHCP&#xff08;客户端角色&#xff09;ESP32 当 Station&#xff08;STA&#xff09; 时&#xff0c;它的行为就跟你的手机/笔记本连 Wi-Fi 一样&#xff1a;DHCP 客户端 → 去路由器&#xff08;DHCP 服务器&#xff09;要一个 IP。特点启用 DHCP&#xff0…

cocos2d. 3.17.2 c++如何实现下载断点续传zip压缩包带进度条

新建类CurlDown #include “curl/curl.h” #include using namespace std; USING_NS_CC; /** 资源下载curl */ class CurlDown { public: CurlDown(); ~CurlDown(); void StartDownResZip(string downLoadUrl, int64_t totalSize); //下载控制 void downloadControler(); //下…

MySQL 整型数据类型:选对数字类型,让存储效率翻倍

MySQL 整型数据类型&#xff1a;选对数字类型&#xff0c;让存储效率翻倍 在 MySQL 中&#xff0c;整型&#xff08;整数类型&#xff09;是最常用的数据类型之一&#xff0c;从用户 ID 到商品数量&#xff0c;几乎所有涉及数字的场景都离不开它。但你知道吗&#xff1f;选对整…

公司电脑监控软件有哪些?公司电脑监控软件应该怎么选择

大家好呀&#xff0c;电竞直播运营团队常常面临 “直播脚本被抄袭、用户付费数据篡改、主播话术外泄” 的问题&#xff01;尤其是独家直播流程脚本、用户充值记录、主播互动话术库、赛事解说手稿&#xff0c;一旦泄露可能导致竞品跟风、用户信任下降、直播竞争力减弱&#xff5…

ARM裸机开发:链接脚本、进阶Makefile(bsp)、编译过程、beep实验

一、链接脚本的作用&#xff1f;各个段存放什么数据类型&#xff08;一&#xff09;链接脚本内容SECTIONS {. 0x87800000;.text : {obj/start.o*(.text)}.rodata ALIGN(4) : {*(.rodata*)}.data ALIGN(4) : {*(.data)}__bss_start .;.bss ALIGN(4) : {*(.bss) *(COMMON)}__bs…

Linux驱动开发(1)概念、环境与代码框架

一、驱动概念驱动与底层硬件直接打交道&#xff0c;充当了硬件与应用软件中间的桥梁。1、具体任务&#xff08;1&#xff09;读写设备寄存器&#xff08;实现控制的方式&#xff09;&#xff08;2&#xff09;完成设备的轮询、中断处理、DMA通信&#xff08;CPU与外设通信的方式…

计算机视觉(十):ROI

什么是感兴趣区域&#xff08;ROI&#xff09;&#xff1f; 在计算机视觉中&#xff0c;**感兴趣区域&#xff08;ROI&#xff09;**指的是图像中包含我们想要分析、处理或识别的目标或特征的特定子集。就像我们在阅读一本书时会聚焦于某个重要的段落&#xff0c;计算机视觉系统…

Jenkins 构建 Node 项目报错解析与解决——pnpm lockfile 问题实战

在使用 Jenkins 自动化构建 Node.js 项目时&#xff0c;经常会遇到类似报错&#xff1a; ERR_PNPM_OUTDATED_LOCKFILE  Cannot install with "frozen-lockfile" because pnpm-lock.yaml is not up to date with package.json Error: Cannot find module node_module…