python机器学习中的逻辑回归算法-癌症病例预测(二)

大家好,今天给大家分享一下python机器学习中的逻辑回归算法。主要内容有:

(1)算法原理;(2)Precision and recall;(3)示例应用–癌症病例预测。

文末有数据集和python完整代码

1. 概念理解

逻辑回归,或简称LR,其特点是能够将我们的特征输入集转化为0和1两个类别的概率。一般来说,回归不用于分类问题,但逻辑回归可以很好地处理二元分类(即二类问题)。

Logistic回归本质上是线性回归,只是在特征到结果的映射上增加了一层Sigmod函数映射,即先对特征线求和,再用Sigmoid函数求解最假设函数的概率,然后分类。

sigmoid函数是:

sigmoid 函数的形状像 s 曲线。S曲线的下边无限接近0,上边无限接近1。

比如在预测的过程中,如果预测结果大于0.5,则认为属于一个类别,如果预测结果小于0.5,我们认为成为第二类,然后我们就实现了二分类。

优点:适用于需要获取一个分类概率的场景,简单快速

缺点:只能用来处理二分类问题,不容易处理多分类问题

应用:是否生病,财务欺诈,是否是假账户等。

2. 精度和召回率

如下表所示,如果我预测一个人得了癌症,他的真实值也是癌症,那么这种情况称为TP真例;如果我预测一个人得了癌症,而他的真实值是他没有癌症,这种情况称为 FN 假反例。

(1)准确率:预测结果为正样本的正样本比例(用来表示搜索是否准确)

公式为:

示例:在 100 人中,我预测将有 20 人患有癌症。这20人中,只有5人真正得了癌症,15人没有得癌症。那么准确率就是P=5/(5+15)=0.25

(2)召回率:正样本预测为正样本的比例(代表搜索的完整性,区分正样本的能力)

公式为:

例子:现在有20个人得了癌症,在这些人中,我查出18个人得了癌症,还有2个人没有查出来,召回率R=18/(18+2)

(3)综合指标:P和R指标有时会相互矛盾,需要综合考虑。最常用的方法是F-Measure。

公式为:

F1越大,整体性能越好

导入方式:from sklearn.metrics import classification_report

分类报告()函数参数

3. 示例应用程序——癌症病例预测

3.1 Sklearn 实现

图片[1]-python机器学习中的逻辑回归算法-癌症病例预测(二)-老王博客

逻辑回归方法导入:from sklearn.linear_model import LogisticRegression

参数设置:参考博客

如果选择输入,可以选择balanced让类库自己计算类型权重,也可以自己输入每种类型的权重。例如,对于 0,1 的二元模型,我们可以定义 class_weight={0:0.9,1:0.1},使得类型 0 的权重为 90%,而类型 0 的权重为 90%。1 的权重为 10%。如果class_weight选择balanced,那么类库会根据训练样本的大小计算权重。某种类型的样本量越大,权重越低,样本量越小,权重越高。当class_weight平衡时,类权重的计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples 为样本数,n_​​classes 为类别数,np.

3.1 癌症预测

数据集包含10个特征值数据和1个目标数据,字符“?” 代表缺失数据,目标中的数字2代表良性癌症,4代表恶性癌症。

Names 存储每一项数据的列索引名称。pandas在导入数据集时,默认会取数据的第一行作为数据索引名,原始数据没有列索引名。我们需要自定义列pd.read_csv(文件路径,names=列名)

#(1)数据获取
import pandas as pd
import numpy as np
# 癌症数据路径
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件处理\\癌症\\breast-cancer-wisconsin.data'
# 癌症的每一项特征名
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']
# breast存放癌症数据,不默认将第一行作为列索引名,自定义列索引名
breast = pd.read_csv(filepath,names=names)
# 查看唯一值,Class这列代表的是否得癌症,使用.unique()函数查看该列有哪些互不相同的值

unique = Breast[‘Class’].unique() #只有两种情况,是二分类问题,2表示良性r语言多元回归分析案例,4表示恶性

3.2 数据处理

首先使用 .info() 函数检查数据中是否有缺失数据 nan 和重复数据,本例中没有。然后处理字符’?’,先转换’?’ 导入nan值,然后使用.dropna()函数删除nan所在的行。完成后,划分特征值和目标值。然后划分训练集和测试集,测试集取25%的数据。

#(2)数据处理
breast.info()  #查看是否有缺失值、重复数据
# 该数据集存在字符串类型数据'?'
# 将'?'转换成nan
breast = breast.replace(to_replace='?',value=np.nan)
# 将nan所在的行删除
breast = breast.dropna()
 
# 特征值是除了class列以外的所有数据
features = breast.drop('Class',axis=1)
# 目标值是class这一列
targets = breast['Class']
 
#(3)划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(features,targets,test_size=0.25)

3.3 标准化

由于单元不同、数据跨度大等问题会影响模型的准确性,因此对训练数据和测试数据的特征值进行了标准化。特征工程的具体方法会在后续章节中介绍,所以我们先了解一下。

#(4)特征工程
# 导入标准化方法
from sklearn.preprocessing import StandardScaler
# 接收标准化方法
transfer = StandardScaler()
# 对训练的特征值x_train提取特征并标准化处理
x_train = transfer.fit_transform(x_train)
# 对测试的特征值x_test标准化处理
x_test = transfer.transform(x_test)

3.4 逻辑回归预测

由于癌症数据中只有2个和4个,良性和恶性,这是一个二分问题r语言多元回归分析案例,可以使用逻辑回归方法进行预测。这里为了方便大家理解,使用了带默认参数的逻辑回归方法。.fit()函数接收训练模型所需的特征值和目标值,预测函数.predict()接收预测所需的特征值,评分方法.score()通过计算准确率真实结果和预测结果。计算出的模型精度为0.97

#(5)逻辑回归预测
# 导入逻辑回归方法
from sklearn.linear_model import LogisticRegression
# 接收逻辑回归方法
logist = LogisticRegression()
# penalty=l2正则化;tol=0.001损失函数小于多少时停止;C=1惩罚项,越小惩罚力度越小,是岭回归的乘法力度的分之一
# 训练
logist.fit(x_train,y_train)
# 预测
y_predict = logist.predict(x_test)
# 评分法计算准确率
accuracy = logist.score(x_test,y_test)

3.5 精度和召回率

#(6)准确率和召回率
# 导入
from sklearn.metrics import classification_report
# classification_report()
# 参数(真实值,预测值,labels=None,target_names=None)
# labels:class列中每一项,如该题的2和4,给它们取名字
# target_names:命名
 
# 计算准确率和召回率
res = classification_report(y_test,y_predict,labels=[2,4],target_names=['良性','恶性'])
print(res)

精度代表准确率;召回率代表召回率;f1-score代表综合指数;support 表示预测的人数。该模型的召回率为良性0.97,恶性0.96;这个例子是检测癌症,我们希望找到所有癌症的人,即使他不是癌症,他也可以做​​进一步的检查,所以我们需要一个高召回率的模型。

数据集获取:

点赞,关注,私信“333”即可获得

完整代码:

#(1)数据获取
import pandas as pd
import numpy as np
# 癌症数据路径
filepath = 'C:\\Users\\admin\\.spyder-py3\\test\\文件处理\\癌症\\breast-cancer-wisconsin.data'
# 癌症的每一项特征名
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']
# breast存放癌症数据,不默认将第一行作为列索引名,自定义列索引名
breast = pd.read_csv(filepath,names=names)
# 查看唯一值,Class这列代表的是否得癌症,使用.unique()函数查看该列有哪些互不相同的值
unique = breast['Class'].unique()  #只有两种情况,是二分类问题,2代表良性,4代表恶性
 
#(2)数据处理
breast.info()  #查看是否有缺失值、重复数据
# 该数据集存在字符串类型数据'?'
# 将'?'转换成nan
breast = breast.replace(to_replace='?',value=np.nan)
# 将nan所在的行删除
breast = breast.dropna()
 
# 特征值是除了class列以外的所有数据
features = breast.drop('Class',axis=1)
# 目标值是class这一列
targets = breast['Class']
 
#(3)划分训练集和测试集
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(features,targets,test_size=0.25)
 
#(4)特征工程
# 导入标准化方法
from sklearn.preprocessing import StandardScaler
# 接收标准化方法
transfer = StandardScaler()
# 对训练的特征值x_train提取特征并标准化处理
x_train = transfer.fit_transform(x_train)
# 对测试的特征值x_test标准化处理
x_test = transfer.transform(x_test)
 
 
#(5)逻辑回归预测
# 导入逻辑回归方法
from sklearn.linear_model import LogisticRegression
# 接收逻辑回归方法
logist = LogisticRegression()
# penalty=l2正则化;tol=0.001损失函数小于多少时停止;C=1惩罚项,越小惩罚力度越小,是岭回归的乘法力度的分之一
# 训练
logist.fit(x_train,y_train)
# 预测
y_predict = logist.predict(x_test)
# 评分法计算准确率
accuracy = logist.score(x_test,y_test)
 
 
#(6)准确率和召回率
# 导入
from sklearn.metrics import classification_report
# classification_report()
# 参数(真实值,预测值,labels=None,target_names=None)
# labels:class列中每一项,如该题的2和4,给它们取名字
# target_names:命名
 
# 计算准确率和召回率
res = classification_report(y_test,y_predict,labels=[2,4],target_names=['良性','恶性'])
# precision准确率;recall召回率;综合指标F1-score;support:预测的人数
print(res)

最后有惊喜(不要错过)

进大厂是每个程序员的梦想,也希望有机会大放异彩,取得佳绩。但是,不迈出一小步,就走不了千里,理想与现实的距离还需要不断的拉近。

所以在这里我准备了一些礼包,希望对大家有所帮助。

★礼包1

如果你没有自制力,也没有一起学习交流的动力,请私信或评论区留言。我拉你进学习交流群。, 现在就加入我们!

★礼包2

❶ 全套Python电子书,共200本6G电子书,涵盖Python所有领域。

❷Python动手项目,包括爬虫、数据分析、机器学习、人工智能、小游戏开发。

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论