乳腺癌细胞数据分析&Logistic回归模型

Breast_cancer_cells & Logistic_Regression


  • 数据集以及源代码资源包:
  • 链接:https://pan.baidu.com/s/1VIjTjtSa1JngqnbcwQ7PYQ 
  • 提取码:toas
  • 若无技术上的需求,也希望能够看看尾声,谢谢!

目录

问题背景

特征值的可视化分析

1项特征:患者编号

2~6项的特征:主要肿瘤细胞的外形相关

7~10个特征:良/恶性肿瘤细胞的核的变化

Logistic回归分析预测

知识回顾

Logistic回归模型推导

logistic回归模型的评价

train_test_split框架解释

StandardScaler() 框架解释

logisticRegression() 框架解释

正则化处理

个人总结


问题背景

肿瘤细胞分为两类,为良性肿瘤和恶性肿瘤,我们可以根据肿瘤细胞的外观特征以及细胞核的特征来划分的。下述的数据分析,其乳腺癌患者的肿瘤细胞数据集由威斯康星医院的WIlliam H. Wolberg博士所提供。

乳腺癌数据集下载地址为:

Index of /ml/machine-learning-databases/breast-cancer-wisconsin

数据集中的十个特征值分别为:

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    分类情况:2为良性,4为恶性

包含缺失值  采用 “?” 予以标识

基本病理知识:

特征值的可视化分析

该部分图片与内容源自:

练习(三)——乳腺肿瘤(良、恶性)数据分类_Anaconda_的博客-CSDN博客

(该文采用了决策树的方法进行预测)

1项特征:患者编号

先排除患者编号这一列,不同编号对肿瘤良性与否无关。

2~6项的特征:主要肿瘤细胞的外形相关

红色是良性,蓝色是恶性

良性肿瘤的肿瘤细胞较小,且形状均匀,粘附力弱(该文作者认为这个可以解释为浸润其他细胞和转移的能力),肿块厚度分布不均,不过多数都在5以下。

恶性肿瘤的细胞形状大小不均一,并且肿块厚度较大,与恶性肿瘤呈浸润性生长有关。恶性肿瘤细胞可以从组织间隙、淋巴管和血管向周围组织侵入,故恶性肿瘤的形态极不规则,也无完整包膜,与周围组织界限不清,紧密连在一起。有时早期就出现固定,不易移动。

 

7~10个特征:良/恶性肿瘤细胞的核的变化

黄色是良性,绿色是恶性

除了有丝分裂情况以外,其他的区分度高的相对较高:恶性肿瘤的细胞及细胞核是大小不等、形态不一,核膜增厚。细胞核增大尤其显著,致使核与细胞浆的比例失常。核染色质深且增多,有多数核分裂。除此之外,核酸代谢旺盛,导致人体长时间异常代谢。

 

 

Logistic回归分析预测

代码参考:

sklearn逻辑回归案例分析 《良/恶性乳腺癌肿瘤预测》_不论如何未来很美好的博客-CSDN博客

博主文章中有部分代码无法正确运行,做了一些修正,同时对其中部分代码进一步加以解释

#导入pandas;numpy

import pandas as pd

import numpy as np

column_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 = pd.read_csv(

    'https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin//breast-cancer-wisconsin.data',

    names=column_names)

#数据清洗

data = data.replace(to_replace='?', value=np.nan)  # 非法字符的替代

data = data.dropna(how='any')  # 去掉空值,any:出现空值行则删除

print(data.shape)

print(data.head())

#拆分数据集为训练集与验证集

from sklearn.model_selection import train_test_split #该函数库的名字有所更新

X_train,X_test,y_train,y_test=train_test_split

(data[column_names[1:10]],data[column_names[10]],test_size=0.25,random_state=5)

#其中test_size为验证集与原始样本数量的比例,random_state为随机数种子

from sklearn.preprocessing import StandardScaler

from sklearn.linear_model import LogisticRegression

#数据标准化

ss = StandardScaler()  # 标准化数据,保证每个维度的特征数据方差为1,均值为0.使得预测结果不会被某些维度过大的特征值主导

X_train = ss.fit_transform(X_train)  # 先拟合,在转换

X_test = ss.transform(X_test)  # 上面拟合过,这里直接转换

#调用逻辑回归模型

lr = LogisticRegression(C=1.0, penalty='l2', tol=0.1)  # 调用逻辑回归模型,里面的参数可以自己设置,通过交叉验证来判断最优参数

lr.fit(X_train, y_train)  # 使用上面标准化后的数据来训练

lr_predict = lr.predict(X_test)  # 得到预测结果

#计算准确率

from sklearn.metrics import accuracy_score

print("预测结果为:{}".format(lr.score(X_test,y_test)))

print("预测结果为:{}".format(accuracy_score(y_test,lr_predict)))

知识回顾

Logistic回归模型推导

参考文献:logistic回归模型_帅帅de三叔的博客-CSDN博客_logistic回归模型

逻辑回归(Logistic Regression)是机器学习中最常见的一种用于二分类的算法模型,由于其数学原理简单易懂,作用高效,其实际应用非常广泛。

常见的做法是:建立因变量和自变量的多元线性关系

y=θ0+θ1x1+θ2x2++θnxn

然而实际生活中,某些关键因素会直接导致某一结果的发生,如亚马逊雨林一只蝴蝶偶尔振动翅膀,就会引起两周后美国德克萨斯州的一场龙卷风。于是,需要让不显著的线性关系变得显著,使得模型能够很好解释随因素的变化,结果也会发生较显著的变化。因而,logit变换登场。下图是其对数函数以及图像:

log(y)=θ0​+θ1x1​+θ2x2​++θnxn

 

虽然上式能够解决因变量随自变量变化的敏感性问题,但也约束了y的取值范围,使其不能落入(0,1)的概率范围内。

因而需要进一步压缩,进而引入了几率(几率为正统写法,后来因为机率用的多了而转正,现在两种写法都可

几率(odd ) 是指事件发生的概率与不发生的概率之比。假设事件 A 发生的概率为 p,不发生的概率为 1 - p,那么事件 A 的几率为

odd(A)=p / (1-p)

于是用几率来代替概率刻画结果发生的可能性大小.

这样既满足结果对特定因素的敏感性,又满足对称性:

log[ p / (​1-p) ]=θ0​+θ1​x1​+θ2​x2​++θn​xn

对此更改为ln()型:

ln[ P / (1-P) ]=θX

变换后得:

其函数图像为:

logistic函数图像是一条S型曲线,又名sigmoid曲线

这样最后计算出的结果是一个01之间的概率值,表示某事件发生的可能性大小

logistic回归把结果压缩到连续的区间 ( 0 , 1 ),而不是离散的0或者1。因而,取定一个阈值,通常以0.5为阈值,通过对比概率值与阈值的大小关系进行归类。

用分段函数写出来是:

最终,实现logistic回归的二分类

对于该模型的代价函数(cost function)为:

转变为和式表示:

​​

logistic回归模型的评价

从logistic回归的数学原理,在阈值取定的时候一刀切的做法上面,我们能够根据logistic回归的这些特点给出模型优缺点评价

优点:

  1. 原理简单,模型清晰,操作高效,背后的概率的推导过程经得住推敲,在研究中,通常以 Logistic 回归模型作为基准,再尝试使用更复杂的算法,可以在大数据场景中使用。
  2. 使用online learning的方式更新轻松更新参数,不需要重新训练整个模型
  3. 基于概率建模,输出值落在0到1之间,并且有概率意义
  4. 求出来的参数 θi 代表每个特征对输出的影响,可解释性强
  5. 解决过拟合的方法很多,如L1、L2正则化,L2正则化就可以解决多重共线性问题

缺点:

  1. 对数据依赖性强,很多时候需要做特征工程,且主要用来解决线性可分问题
  2. 因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况,对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转,正好变负号。
  3. Logit变换过程是非线性的,在两端随着变化率微乎其微,而中间的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,很难确定阀值。
  4. 当特征空间很大时,性能不好容易欠拟合,精度不高

train_test_split框架解释

原文链接:Sklearn的train_test_split用法_fxlou的博客-CSDN博客_train_test_split

用途:

在机器学习中,该函数可按照用户设定的比例,随机将样本集合划分为训练集 和测试集,并返回划分好的训练集和测试集数据

语法:

参数说明:

Code

Text

X

待划分的样本特征集合

y

待划分的样本标签

test_size

若在0~1之间,为测试集样本数目与原始样本数目之比;若为整数,则是测试集样本的数目。

random_state

随机数种子

X_train

划分出的训练集数据(返回值)

X_test

划分出的测试集数据(返回值)

y_train

划分出的训练集标签(返回值)

y_test

划分出的测试集标签(返回值)

随机数种子:

随机数是通过一些复杂的数学算法得到的,随机数种子(Random Seed)就是这些随机数的初始值,使得能够在随机数的随机无序中,获得确定和秩序。可以利用随机数种子让程序在多次运行中得到确定的、一致的结果。

StandardScaler() 框架解释

用途:

由于不同的特征往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果。而对此进行数据标准化处理,能够消除指标之间的量纲影响,解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。

具体做法:

数据标准化是指当数据 x 按均值 μ 中心化后,再按标准差 σ 缩放,数据就会服从均值为 0,方差为 1 的标准正态分布,这个过程就叫做数据标准化。具体说来是:z-score 标准化(zero-mean normalization)

同时注意:标准化并不会改变数据的分布

logisticRegression() 框架解释

文献参考:LogisticRegression - 参数说明_Jark_的博客-CSDN博客_logisticregression

代码行中:lr = LogisticRegression(C=1.0, penalty='l2', tol=0.1)

c:正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。如SVM(支持向量机)一样,越小的数值表示越强的正则化

tol:停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候停止,认为已经求出最优解

penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2。用于指定惩罚项中使用的规范。newton-cg、sag和lbfgs求解算法只支持L2规范。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit)

更多的参数内容可参考原文献

正则化处理

参考文献:正则化处理 - 简书

在线性回归里,最常见的正则化方式是在损失函数中添加正则化项,而添加的正则化项往往是待估计参数的 p- 范数

 

图中蓝色和红色的交点就是最优参数解,交点出现的位子取决于边界的情况。

岭回归的边界是曲线,误差等值线可以在任意位置和边界相切。LASSO边界是直线,因此切点最可能出现在方形的顶点上,这就意味着某个参数的取值为0。

L2(岭回归):衰减不同属性的权重,让所有属性向圆心收拢。

L1(LASSO):直接将某些属性的权重降为0,是对属性的过滤筛选。 

参考视频:

什么是 L1 L2 正规化 正则化 Regularization (深度学习 deep learning)_哔哩哔哩_bilibili

个人总结

Logistic模型适合解决二分类问题,而“判断乳腺癌细胞属于良性或是恶性”属于二分类问题。

文中的处理手段为先对数据进行基本清洗,随后进行训练集与验证集的划分,随后进行标准化处理,再接着进行logistic回归处理,最后进行准确度的计算。

并且,针对于Logistic模型本身、数据集划分、标准化处理、模型参数、正则化处理进行了进一步学习。

十分感谢你阅读至此!希望你可以收获到一些所需要的知识!


尾声:

数据本身是冰冷的,癌细胞更是如此。

但,若能透过数据,透过案例,进而关爱女性、呵护生命,以“早预防,早发现,早治疗”,将爱与希望传递给千百万女性,恐怕,远比学会逻辑回归模型重要。

  • 2
    点赞
  • 23
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

Flying_fish7

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值