逻辑回归-癌症病预测与不均衡样本评估

1.注册相关库(在命令行输入)

pip install scikit-learn
pip install pandas
pip install numpy

2.导入相关库

import pandas as pd
import numpy as np
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

3.读取数据文件,即癌症数据集

#库读取远程的 CSV 文件
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data')
data.head()
print(data.head())#给列名字
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin','Normal Nucleoli', 'Mitoses', 'Class']#给data增加一个names参数
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names = names)
data.Class#说明:2表示良性,4表示恶性
print(data['Class'])

names列名依次为:

Sample code number:样本编号

Clump Thickness:肿块厚度

Uniformity of Cell Size:细胞大小的均匀性

Uniformity of Cell Shape:细胞形状的均匀性

Marginal Adhesion:边缘粘附

Single Epithelial Cell Size:单个上皮细胞大小

Bare Nuclei:裸核

Bland Chromatin:平淡的染色质

Normal Nucleoli:正常的核仁

Mitoses:有丝分裂

Class:肿瘤类型(良性或恶性)

4.数据清洗(替换空值)

#替换缺失值
data = data.replace(to_replace='?',value=np.nan)
## 删除缺失值的样本
data = data.dropna() #删除有np.nan的行

5.进行训练

训练集(x_train,y_train):训练集是用于训练机器学习模型的数据集。通常,我们会利用训练集中的已知样本(包括特征值和目标值)来训练模型,并通过优化模型参数来使其适合数据。

测试集(x_test,y_test):测试集是用于评估机器学习模型性能的数据集。测试集通常由未出现在训练集中的样本组成,用于测试模型是否能够正确推断或预测样本的目标值。

#特征值
x = data.iloc[:,:-1]
x.head()#目标值
y = data['Class']
y.head()#表示将数据集中的 20% 作为测试集,剩下的 80% 作为训练集
#:x_train 是训练集的特征值,x_test 是测试集的特征值,y_train 是训练集的目标值,y_test 是测试集的目标值
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
transform = StandardScaler()#实例化转换器#标准化
#标准化的目的是将不同尺度和单位的特征值转换为具有统一标准的值,以保证模型能够更好地学习和预测
# 通过标准化,可以使特征值的均值为0,标准差为1,从而使得特征值在相同的尺度范围内,避免不同特征值之间的偏差对模型造成影响,使得不同特征之间可以进行可比较的比较。。
x_train = transform.fit_transform(x_train)
x_test = transform.fit_transform(x_test)
mode= LogisticRegression()#用默认的就行
mode.fit(x_train,y_train)#得到了模型
y_predict = mode.predict(x_test)

6.模型评估:

#print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)# 计算准确率
accuracy = mode.score(x_test, y_test)
print("准确率为:\n", accuracy)#输出混淆矩阵
cm = confusion_matrix(y_test, y_predict, labels=[2, 4])
print("混淆矩阵:\n",cm)# 打印分类报告
res = classification_report(y_test, y_predict, labels=[2, 4], target_names=['良性', '恶性'])
print(res)

混淆矩阵:

当评估一个分类模型的性能时,准确率(precision)、召回率(recall)和F1值是常用的指标。这些指标可以帮助我们理解模型在不同类别上的预测质量。

 准确率(Precision)是指模型在所有被分类为正例的样本中,正确预测为正例的比例。准确率告诉我们被模型预测为正例的样本有多少是真正的正例。它的计算公式如下:

Precision = TP / (TP + FP)

召回率(Recall)是指在所有实际为正例的样本中,模型正确预测为正例的比例。召回率告诉我们模型有多少能够捕捉到真正的正例。它的计算公式如下:

Recall = TP / (TP + FN)

F1值是综合考虑了准确率和召回率的指标,它是准确率和召回率的加权调和平均值。F1值的计算公式如下:

F1 = 2 * (Precision * Recall) / (Precision + Recall)

7.完整代码:

import pandas as pd
import numpy as np
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression#库读取远程的 CSV 文件
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data')
data.head()
print(data.head())#给列名字
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin','Normal Nucleoli', 'Mitoses', 'Class']#给data增加一个names参数
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data',names = names)
#print(data.head())
data.Class#说明:2表示良性,4表示恶性
#print(data['Class'])#替换缺失值
data = data.replace(to_replace='?',value=np.nan)
## 删除缺失值的样本
data = data.dropna() #删除有np.nan的行#特征值
x = data.iloc[:,:-1]
x.head()#目标值
y = data['Class']
y.head()#表示将数据集中的 20% 作为测试集,剩下的 80% 作为训练集
#:x_train 是训练集的特征值,x_test 是测试集的特征值,y_train 是训练集的目标值,y_test 是测试集的目标值
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
transform = StandardScaler()#实例化转换器#标准化
#标准化的目的是将不同尺度和单位的特征值转换为具有统一标准的值,以保证模型能够更好地学习和预测
# 通过标准化,可以使特征值的均值为0,标准差为1,从而使得特征值在相同的尺度范围内,避免不同特征值之间的偏差对模型造成影响。
x_train = transform.fit_transform(x_train)
x_test = transform.fit_transform(x_test)
mode= LogisticRegression()#用默认的就行
mode.fit(x_train,y_train)#得到了模型
y_predict = mode.predict(x_test)#print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)# 计算准确率
accuracy = mode.score(x_test, y_test)
print("准确率为:\n", accuracy)# 打印分类报告
res = classification_report(y_test, y_predict, labels=[2, 4], target_names=['良性', '恶性'])
print(res)

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

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

相关文章

数据架构与数据模型

数据架构: 待定 数据模型: 数据模型是对现实世界数据特征的抽象,用于描述一组数据的概念和定义。数据模型从抽象层次上描述了数据的静态特征、动态行为和约束条件。数据模型所描述的内容有三部分,分别是数据结构、数据操作和数…

如何查看网站的https的数字证书

如题 打开Chrome浏览器,之后输入想要抓取https证书的网址,此处以知乎为例点击浏览器地址栏左侧的锁的按钮,如下图 点击“连接是安全的”选项,如下图 点击“证书有效”选项卡,如下图 查看基本信息和详细信息 点击详细信…

11/12总结

项目进度: 界面画了搜索机票,预定机票,搜索酒店,预定酒店, 然后是开始写这些功能的后端逻辑

“苹果定律”失效,2023是VR的劫点还是拐点?

因为Pico裁员的事情,VR行业又被讨论了。 Pico于2021年9月被字节跳动收购,当时是出货量排名全球第三的VR 头显生产商。 此前曾有国际机构预测,2023年随着Meta和Pico的硬件更新,苹果Vision Pro的推出,三星电子重新回归VR…

RK3568平台开发系列讲解(Linux系统篇)Linux 目录结构

🚀返回专栏总目录 文章目录 一、VFS二、分区结构三、挂载 mount四、目录结构沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们从目录管理入手,会更直观的理解 linux 的目录结构。 一、VFS Linux 所有的文件都建立在虚拟文件系统(Virtual File System ,VFS…

用Python的requests库来模拟爬取地图商铺信息

由于谷歌地图抓取商铺信息涉及到API使用和反爬虫策略,直接爬取可能会遇到限制。但是,我们可以使用Python的requests库来模拟爬取某个网页,然后通过正则表达式或其他文本处理方法来提取商铺信息。以下是一个简单的示例: # 导入requ…

IP多播需要使用两种协议(IGMP和多播路由选择协议)

目录 IGMP 多播路由选择协议 组播协议包括组成员管理协议和组播路由协议: 组成员管理协议用于管理组播组成员的加入和离开(IGMP) 组播路由协议负责在路由器之间交互信息来建立组播树(多播路由选择协议) IGMP 图中标有 IP 地址的四台主机都参加了一个多播组,其…

TensorFlow学习笔记--(3)张量的常用运算函数

损失函数及求偏导 通过 tf.GradientTape 函数来指定损失函数的变量以及表达式 最后通过 gradient(%损失函数%,%偏导对象%) 来获取求偏导的结果 独热编码 给出一组特征值 来对图像进行分类 可以用独热编码 0的概率是第0种 1的概率是第1种 0的概率是第二种 tf.one_hot(%某标签…

配置开启Docker2375远程连接与解决Docker未授权访问漏洞

一、配置开启Docker远程连接 首先需要安装docker,参考我这篇文章:基于CentOS7安装配置docker与docker-compose 配置开启Docker远程连接的步骤: //1-编辑/usr/lib/systemd/system/docker.service 文件 vim /usr/lib/systemd/system/docker.service //2…

Linux中字符设备的打开、写入

一个内核模块应该由以下几部分组成。 第一部分&#xff0c;头文件部分。一般的内核模块&#xff0c;都需要 include 下面两个头文件&#xff1a; #include <linux/module.h> #include <linux/init.h> 第二部分&#xff0c;定义一些函数&#xff0c;用于处理内核…

pyTorch Hub 系列#2:VGG 和 ResNet

一、说明 在上一篇教程中,我们了解了 Torch Hub 背后的本质及其概念。然后,我们使用 Torch Hub 的复杂性发布了我们的模型,并通过相同的方式访问它。但是,当我们的工作要求我们利用 Torch Hub 上提供的众多全能模型之一时,会发生什么? 在本教程中,我们将学习如何利用称为…

wordpress是什么?快速搭网站经验分享

​作者主页 &#x1f4da;lovewold少个r博客主页 ⚠️本文重点&#xff1a;c入门第一个程序和基本知识讲解 &#x1f449;【C-C入门系列专栏】&#xff1a;博客文章专栏传送门 &#x1f604;每日一言&#xff1a;宁静是一片强大而治愈的神奇海洋&#xff01; 目录 前言 wordp…