【机器学习】在【Pycharm】中的实践教程:使用【逻辑回归模型】进行【乳腺癌检测】

目录

案例背景

具体问题

1. 环境准备

小李的理解

知识点

2. 数据准备

2.1 导入必要的库和数据集

小李的理解

知识点

2.2 数据集基本信息

小李的理解

知识点

注意事项

3. 数据预处理

3.1 划分训练集和测试集

小李的理解

知识点

注意事项

3.2 数据标准化

小李的理解

知识点

注意事项

4. 模型训练

4.1 初始化和训练逻辑回归模型

运行结果

​编辑

小李的理解

知识点

注意事项

5. 模型评估

5.1 预测结果

小李的理解

知识点

注意事项

5.2 计算准确率

小李的理解

知识点

注意事项

5.3 混淆矩阵

小李的理解

知识点

注意事项

5.4 分类报告

小李的理解

知识点

注意事项

6. 结果可视化

6.1 绘制混淆矩阵

小李的理解

知识点

注意事项

完整代码

结论


专栏:机器学习笔记

pycharm专业版免费激活教程见资源,私信我给你发

python相关库的安装:pandas,numpy,matplotlib,statsmodels

总篇:学习路线

第一卷:线性回归模型

逻辑回归(Logistic Regression)是一种适用于二分类问题的机器学习方法。本文将围绕一个具体的乳腺癌检测案例,详细讲解如何在PyCharm中使用逻辑回归模型进行预测。我们将从数据准备、数据预处理、模型训练、模型评估和结果可视化几个方面进行详细说明,并通过完整的代码示例展示每个步骤。

案例背景

在本案例中,我们将使用经典的乳腺癌数据集(Breast Cancer Dataset)进行乳腺癌检测预测。该数据集包含569个样本,每个样本有30个特征,并标记为良性(0)或恶性(1)。我们的目标是使用这些特征训练一个逻辑回归模型,预测新的样本是良性还是恶性。

具体问题

我们需要解决以下几个具体问题:

  1. 如何加载并理解乳腺癌数据集。
  2. 如何对数据进行预处理以适合逻辑回归模型的训练。
  3. 如何训练逻辑回归模型并进行预测。
  4. 如何评估模型的性能。
  5. 如何对结果进行可视化以便于解释。

1. 环境准备

首先,确保你的开发环境中已经安装了必要的Python库:

pip install numpy pandas scikit-learn matplotlib seaborn
小李的理解

安装库是机器学习的基础步骤。我们需要安装一些流行的Python库,如numpypandasscikit-learnmatplotlibseaborn,这些库分别用于数值计算、数据处理、机器学习模型、绘图和数据可视化。

知识点
  1. 库的安装:使用pip install命令安装所需的Python库。
  2. 常用库:了解并熟悉常用的机器学习和数据处理库。

2. 数据准备

2.1 导入必要的库和数据集

我们使用scikit-learn库中的乳腺癌数据集。

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer# 加载数据集
data = load_breast_cancer()
X = data.data
y = data.target
小李的理解

scikit-learn提供了很多常用的数据集,load_breast_cancer()是用来加载乳腺癌数据集的方法。X是特征数据,y是目标标签(0表示良性,1表示恶性)。

知识点
  1. 数据集加载:使用scikit-learn中的方法加载内置数据集。
  2. 特征与标签:特征数据用于模型训练,目标标签用于分类。

2.2 数据集基本信息

将数据转换为Pandas DataFrame格式以便查看和处理,并打印数据集的前几行进行初步了解。

# 将数据转换为DataFrame格式
df = pd.DataFrame(X, columns=data.feature_names)
df['target'] = y# 查看数据集的基本信息
print("数据集前五行:\n", df.head())
print("\n数据集描述统计信息:\n", df.describe())
print("\n数据集信息:")
df.info()

运行结果 

小李的理解

我们使用pandas库将数据转换为DataFrame格式,这样可以方便地查看和处理数据。使用head()查看数据的前几行,使用describe()查看数据的描述统计信息,使用info()查看数据的基本信息,包括每列的数据类型和非空值数量。

知识点
  1. DataFramepandas的核心数据结构,类似于电子表格,可以方便地操作和分析数据。
  2. 数据描述:通过head()describe()info()方法快速了解数据的基本情况。
注意事项
  1. 数据完整性:在加载数据时,确保数据没有缺失值。本数据集没有缺失值。
  2. 数据类型:特征值都是浮点型,而目标值是整数型。逻辑回归适用于这些数据类型。

3. 数据预处理

3.1 划分训练集和测试集

将数据集划分为训练集和测试集,以便后续模型的训练和评估。

from sklearn.model_selection import train_test_split# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 打印训练集和测试集的大小
print(f'训练集样本数: {X_train.shape[0]}')
print(f'测试集样本数: {X_test.shape[0]}')

 运行结果

小李的理解

我们将数据集分为训练集和测试集,训练集用于训练模型,测试集用于评估模型的性能。train_test_split函数将数据按70%训练集和30%测试集的比例进行划分,并使用random_state=42保证每次运行结果一致。

知识点
  1. 数据划分:使用train_test_split函数将数据集分为训练集和测试集。
  2. 随机种子random_state参数保证结果的可重复性。
注意事项
  1. 随机种子random_state=42保证每次运行结果一致,方便调试和复现。
  2. 测试集比例:通常使用70%的数据进行训练,30%的数据进行测试,但具体比例可以根据实际情况调整。

3.2 数据标准化

由于不同特征的取值范围不同,需要对数据进行标准化处理,使每个特征的取值范围相同。

from sklearn.preprocessing import StandardScaler# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 打印标准化后的部分数据
print(f'标准化后的训练数据前五行:\n {X_train[:5]}')

 运行结果

小李的理解

标准化是将每个特征缩放到均值为0、标准差为1的范围内,这样可以消除不同特征之间的量纲差异,使模型训练更加稳定。我们使用StandardScaler进行标准化,只对训练数据拟合,然后对训练和测试数据进行转换。

知识点
  1. 标准化:使用StandardScaler将数据标准化,以消除特征之间的量纲差异。
  2. 数据泄漏:在标准化时,只对训练数据进行拟合,然后对训练和测试数据进行转换。
注意事项
  1. 标准化方法:我们使用StandardScaler将每个特征缩放到均值为0、标准差为1的范围内。
  2. 数据泄漏:在标准化时,我们仅对训练数据拟合(fit),然后对训练和测试数据进行转换(transform),以避免数据泄漏。

4. 模型训练

4.1 初始化和训练逻辑回归模型

使用scikit-learn库中的逻辑回归模型对训练数据进行拟合。

from sklearn.linear_model import LogisticRegression# 初始化逻辑回归模型
model = LogisticRegression(max_iter=10000)# 训练模型
model.fit(X_train, y_train)# 打印模型的训练结果
print("逻辑回归模型训练完成")
运行结果
小李的理解

我们使用LogisticRegression类来初始化逻辑回归模型,并设置最大迭代次数为10000,以确保模型能够收敛。然后,我们使用训练数据拟合模型。

知识点
  1. 逻辑回归模型LogisticRegression类用于初始化逻辑回归模型。
  2. 最大迭代次数max_iter参数用于设置模型的最大迭代次数,以确保模型能够收敛。
注意事项
  1. 最大迭代次数max_iter=10000确保模型能够收敛,即使数据集较大或特征较多。
  2. 默认参数:初学者可以先使用默认参数,之后可以尝试调整参数以优化模型性能。

5. 模型评估

5.1 预测结果

使用训练好的模型对测试集进行预测。

# 预测
y_pred = model.predict(X_test)# 打印预测结果的前十个
print(f'预测结果前十个: {y_pred[:10]}')

 运行结果

小李的理解

我们使用predict方法对测试数据进行预测,得到每个样本的预测标签。然后,我们打印预测结果的前十个样本。

知识点
  1. 模型预测:使用predict方法对测试数据进行预测。
  2. 预测标签predict方法返回每个样本的预测标签。
注意事项
  1. 预测输出predict方法输出每个样本的预测标签。
  2. 预测概率:可以使用predict_proba方法获取每个样本属于每个类别的概率。

5.2 计算准确率

计算模型在测试集上的准确率。

from sklearn.metrics import accuracy_score# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')

 运行结果

小李的理解

准确率是模型正确预测的样本数占总样本数的比例,是评估模型性能的一个重要指标。

知识点
  1. 准确率:使用accuracy_score函数计算模型的准确率。
  2. 模型评估:准确率是评估模型性能的一个重要指标。
注意事项
  1. 准确率定义:准确率是正确预测的样本数占总样本数的比例。
  2. 适用场景:对于类别不平衡的问题,仅使用准确率可能会导致误导,应结合其他指标。

5.3 混淆矩阵

生成并打印混淆矩阵,混淆矩阵可以直观地显示模型的分类性能。

from sklearn.metrics import confusion_matrix# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:')
print(conf_matrix)

 运行结果

小李的理解

混淆矩阵是一个矩阵,用来评价分类模型的性能。矩阵的每一行表示实际类别,每一列表示预测类别。

知识点
  1. 混淆矩阵:使用confusion_matrix函数生成混淆矩阵。
  2. 矩阵解读:混淆矩阵的每一行表示实际类别,每一列表示预测类别。
注意事项
  1. 混淆矩阵解读
    • 左上(TP):正确预测为正类的数量
    • 右上(FP):错误预测为正类的数量
    • 左下(FN):错误预测为负类的数量
    • 右下(TN):正确预测为负类的数量
  2. 评估模型:通过混淆矩阵可以计算精确度、召回率等指标。

5.4 分类报告

生成并打印分类报告,报告包括精确度、召回率和F1分数等指标。

from sklearn.metrics import classification_report# 分类报告
class_report = classification_report(y_test, y_pred)
print('Classification Report:')
print(class_report)

 运行结果

小李的理解

分类报告提供了每个类别的精确度、召回率和F1分数,以及整体的宏平均(macro avg)和加权平均(weighted avg)指标。这些指标可以帮助我们更全面地评估模型的性能。

知识点
  1. 分类报告:使用classification_report函数生成分类报告。
  2. 评估指标:分类报告包括精确度、召回率和F1分数等指标。
注意事项
  1. 精确度(Precision):预测为正类的样本中实际为正类的比例。
  2. 召回率(Recall):实际为正类的样本中被正确预测为正类的比例。
  3. F1分数(F1-score):精确度和召回率的调和平均数,综合考虑模型的准确性和召回能力。

6. 结果可视化

6.1 绘制混淆矩阵

使用Seaborn库对混淆矩阵进行可视化。

import matplotlib.pyplot as plt
import seaborn as sns# 绘制混淆矩阵
plt.figure(figsize=(10, 7))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()

 可视化结果

小李的理解

通过绘制混淆矩阵,我们可以直观地看到模型的分类效果。seaborn库提供了简洁的绘图方法,使得可视化更加美观和易于理解。

知识点
  1. 数据可视化:使用seaborn库进行数据可视化。
  2. 混淆矩阵图:通过绘制混淆矩阵图,可以直观地展示模型的分类效果。
注意事项
  1. 图像解释:混淆矩阵图表提供了直观的分类性能展示。
  2. 颜色选择:可以根据需要调整颜色映射,以便于区分不同类别。

完整代码

import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns# 1. 加载数据集
data = load_breast_cancer()
X = data.data
y = data.target# 2. 数据准备
df = pd.DataFrame(X, columns=data.feature_names)
df['target'] = y# 查看数据集的基本信息
print("数据集前五行:\n", df.head())
print("\n数据集描述统计信息:\n", df.describe())
print("\n数据集信息:")
df.info()# 3. 数据预处理
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 打印训练集和测试集的大小
print(f'训练集样本数: {X_train.shape[0]}')
print(f'测试集样本数: {X_test.shape[0]}')# 数据标准化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# 打印标准化后的部分数据
print(f'标准化后的训练数据前五行:\n {X_train[:5]}')# 4. 模型训练
# 初始化逻辑回归模型
model = LogisticRegression(max_iter=10000)# 训练模型
model.fit(X_train, y_train)# 打印模型的训练结果
print("逻辑回归模型训练完成")# 5. 模型评估
# 预测
y_pred = model.predict(X_test)# 打印预测结果的前十个
print(f'预测结果前十个: {y_pred[:10]}')# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:')
print(conf_matrix)# 分类报告
class_report = classification_report(y_test, y_pred)
print('Classification Report:')
print(class_report)# 6. 结果可视化
# 绘制混淆矩阵
plt.figure(figsize=(10, 7))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')
plt.title('Confusion Matrix')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()

 

结论

通过本文的讲解,在PyCharm中使用逻辑回归模型进行乳腺癌检测的预测。从数据准备、数据预处理、模型训练到结果评估与可视化,提供了详细的步骤和代码示例。通过这些步骤,你可以掌握如何应用逻辑回归模型进行疾病预测,并根据模型的评估结果优化和改进模型。 

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

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

相关文章

前端Web开发HTML5+CSS3+移动web视频教程 Day3 CSS 第1天

P29 - P43 从此开始进入 CSS 的学习。前面都是 HTML 的学习。 CSS 的作用:美化。 HTML 只是规定了网页内容有哪些,在网页中显示的位置默认是从上到下显示,还带有默认效果,比如超链接有颜色有下划线,无序列表有小圆点…

MeEdu网校系统搜索功能问题处理

MeEdu通过 MeiliSearch 实现全文搜索服务。 一、下载 MeiliSearch 程序 https://github.com/meilisearch/MeiliSearch/releases/tag/v0.24.0 只能下载 v0.24.0 版本,其版本不支持 下载 meilisearch-linux-amd64就可以了 二、上传 MeiliSearch 三、启动命令如下…

华为云安全防护,九河云综合分解优劣势分析

随着全球化的发展,越来越多的企业开始寻求在国际市场上扩展业务,这一趋势被称为企业出海。然而,企业在海外扩张面临诸多隐患与安全挑战,其中因为地域的不同,在安全性方面与国内相比会变得薄弱,从而导致被黑…

antd+vue——实现table组件跨页多选,已选择数据禁止第二次重复选择

需求场景:点击【新增】按钮可以在分页弹窗中跨页多选选择数据后添加到页面中,再次点击【新增】,已经选择过的数据则置灰不让重复选择。 选择后,置灰 点击【确定】数据添加到页面中,可再次点击【新增】进行添加数据 …

FastGPT 手动部署错误:MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo

在运行 FastGPT 时,mongodb 报如下错误: MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo 这是因为 mongo 没有解析出来,在 hosts 文件中添加如下信息: 127.0.0.1 mongo 重新运行 FastGPT 即可。 参考链接&#xff…

基于web的产品管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于web的产品管理系统,java项目。 ecli…

被⽹络罪犯利⽤的5⼤ChatGPT越狱提⽰

⾃ChatGPT发布的近18个月以来,⽹络罪犯们已经能够利⽤⽣成式AI进⾏攻击。OpenAI在其内容政策中制定了限制措施,以阻⽌⽣成恶意内容。作为回应,攻击者们创建了⾃⼰的⽣成式AI平台,如 WormGPT和FraudGPT,并且他们还分享了…

Jmeter下载、安装及配置

1 Jmeter介绍 Jmeter是进行负载测试的工具,可以在任何支持Java虚拟机环境的平台上运行,比如Windows、Linux、Mac。 Jmeter模拟一组用户向目标服务器发送请求,并统计目标服务器的性能信息,比如CPU、memory usage。 2 Jmeter下载 …

应用密码学—(扩展)欧几里得、DES、RSA、SHA-1算法

1. 欧几里得算法 1.1 分析算法的实现原理 欧几里德(Euclid)算法,也既常说的“辗转相除法”,公式为gcd(m, n) { return gcd(n, m%n); },对于任意两个正整数m、n,每次求的一个数字r m % n,然后把…

C语言快速学习笔记

学习网站:C 语言教程 | 菜鸟教程 (runoob.com)C 语言教程 | 菜鸟教程 (runoob.com)C 语言教程 | 菜鸟教程 (runoob.com) 这个网站知识完整,讲解清晰。 在线C语言编程工具:菜鸟教程在线编辑器 (runoob.com) 国外学习网站:C语言介…

难道 Java 已经过时了?

当一门技术已经存在许多年了,它可能会失去竞争力,而后黯然退场,默默地离开,这对大部分的人来说就已经算是过时了。 Java 于 1995 年正式上线,至今已经走过了 27 个年头,在众多编程技术里算是年龄比较大的语…

【C++】开源:量化金融计算库QuantLib配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍量化交易库QuantLib配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#…

【高中数学/基本不等式】已知:a,b皆为正实数,且3a+2b=10 求:3a开方+2b开方的最大值?

【题目】 已知&#xff1a;a,b皆为正实数&#xff0c;且3a2b10 求&#xff1a;3a开方2b开方的最大值&#xff1f; 【解答】 解法一&#xff1a;&#xff08;基本不等式&#xff09; 原式^23a2*根号下(3a*2b)2b102*根号下(3a*2b)<103a2b101020 答&#xff1a;3a开方2b…

[漏洞复现] MetInfo5.0.4文件包含漏洞

[漏洞复现] MetInfo5.0.4文件包含漏洞 MetInfo5.0.4 漏洞代码审计 漏洞出现在about/index.php中&#xff0c;因为利用了动态地址&#xff0c;所以存在漏洞。 漏洞检查语句&#xff08;&#xff01;192.168.109.100是我的服务器ip&#xff0c;需要换成自己的&#xff09;&…

双曲方程初值问题的差分逼近(迎风格式)

稳定性: 数值例子 例一 例二 代码 % function chap4_hyperbolic_1st0rder_1D % test the upwind scheme for 1D hyperbolic equation % u_t + a*u_x = 0,0<x<L,O<t<T, % u(x,0) = |x-1|,0<X<L, % u(0,t) = 1% foundate = 2015-4-22’; % chgedate = 202…

SpringBoot 如何处理跨域请求?你说的出几种方法?

引言&#xff1a;在现代的Web开发中&#xff0c;跨域请求&#xff08;Cross-Origin Resource Sharing&#xff0c;CORS&#xff09;是一个常见的挑战。随着前后端分离架构的流行&#xff0c;前端应用通常运行在一个与后端 API 不同的域名或端口上&#xff0c;这就导致了浏览器的…

方法的用法

一.简介 目前为止我给出的所有的案例都是将代码放在main方法中&#xff0c;就会产生一些问题&#xff1a; 代码冗长&#xff0c;不利于维护变量过多&#xff0c;想不出那么多的变量名没有重用性 那么该如何解决呢&#xff1f; 我们可以编写功能性的代码块&#xff0c;来被ma…

华为DCN之:SDN和NFV

1. SDN概述 1.1 SDN的起源 SDN&#xff08;Software Defined Network&#xff09;即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。其核心理念通过将网络设备控制平面与数据平面分离&#xff0c;从而实现了网络控制平面的集中控制&#xff0c;为…

【STM32 RTC实时时钟如何配置!超详细的解析和超简单的配置,附上寄存器操作】

STM32 里面RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域&#xff0c;即在系统复位或从待机模式唤醒后&#xff0c;RTC的设置和时间维持不变。因为系统对后备寄存器和RTC相关寄存器有写保护&#xff0c;所以如果想要对后备寄存器和RTC进行访问&#xff0c;则需要通过操作…

PHP校园论坛-计算机毕业设计源码08586

摘 要 本项目旨在基于PHP技术设计与实现一个校园论坛系统&#xff0c;以提供一个功能丰富、用户友好的交流平台。该论坛系统将包括用户注册与登录、帖子发布与回复、个人信息管理等基本功能&#xff0c;并结合社交化特点&#xff0c;增强用户之间的互动性。通过利用PHP语言及其…