python 逻辑回归_Python-逻辑回归-癌症预测

528dc6fef34da3561dbf8d7ca6f3614f.png

终于有时间来更新最近的学习成果了,为什么要先介绍逻辑回归这个模型,因为简单,因为万物皆可分类。

提到逻辑回归,很多人会联想到线性回归,做预测数据的模型,其实逻辑回归是做分类的,英文Logistic Regression ,虽然被称为回归,但其实际上是分类模型,并常用于二分类。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。

本质:假设数据服从这个分布,然后使用极大似然估计做参数的估计。

最经典的解释还是吴恩达老师的视频讲解,需要的话可以学习学习,

[中英字幕]吴恩达机器学习系列课程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com
8e6943558eda4a280c4519e78145ba58.png

逻辑回归的公式也就是Sigmod函数,可以发现y的取值永远在0-1之间,输出 Y=1 的对数几率是由输入 x 的线性函数表示的模型,这就是逻辑回归模型。当

的值越接近正无穷,
概率值也就越接近 1。因此
逻辑回归的思路是,先拟合决策边界(不局限于线性,还可以是多项式),再建立这个边界与分类的概率联系,从而得到了二分类情况下的概率。(信息来源:阿泽:【机器学习】逻辑回归(非常详细))

3a282378f105a9ca4cb39d3f843972eb.png
Sigmod函数

f4262e45a68b656622df355551d4a109.png

175a16a3f5338e069fe0e4103644ee90.png

实际上是使用线性回归模型的预测值逼近分类任务真实标记的对数几率,其优点有:

  1. 直接对分类的概率建模,无需实现假设数据分布,从而避免了假设分布不准确带来的问题;
  2. 不仅可预测出类别,还能得到该预测的概率,这对一些利用概率辅助决策的任务很有用;
  3. 对数几率函数是任意阶可导的凸函数,有许多数值优化算法都可以求出最优解。

今天主要拿癌症数据来做实战操作,真实数据做太多,整个Python的机器学习的安装包都安装了一遍:

1、导入需要的代码块

from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score#矩阵模块

2、导入数据

data=load_breast_cancer()

3、区分特征数据和目标数据

X=data.data
y=data.target

4、构建逻辑回归,使用不同的正则化

lrl1 = LR(penalty="l1",solver="liblinear",C=0.5,max_iter=1000)
lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000)

5、逻辑回归的重要属性,coef_查看每个特征值对应的参数

lrl1=lrl1.fit(X,y)
lrl1.coef_
(lrl1.coef_!=0).sum(axis=1)
lrl2=lrl2.fit(X,y)
lrl2.coef_
(lrl2.coef_!=0).sum(axis=1)

6、模拟整个模型的操作,可见,至少在我们的乳腺癌数据集下,两种正则化的结果区别不大。但随着C的逐渐变大,正则化的强度越来越小,模型在训练集和测试集上的表现都呈上升趋势,直到C=0.8左右,训练集上的表现依然在走高,但模型在未知数据集上的表现开始下跌

l1 = []
l2 = []
l1test = []
l2test = []

Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420)

for i in np.linspace(0.05,1.5,19):
    lrl1 = LR(penalty="l1",solver="liblinear",C=i,max_iter=1000)
    lrl2 = LR(penalty="l2",solver="liblinear",C=i,max_iter=1000)
    
    lrl1 = lrl1.fit(Xtrain,Ytrain)
    l1.append(accuracy_score(lrl1.predict(Xtrain),Ytrain))
    l1test.append(accuracy_score(lrl1.predict(Xtest),Ytest))
    lrl2 = lrl2.fit(Xtrain,Ytrain)
    l2.append(accuracy_score(lrl2.predict(Xtrain),Ytrain))
    l2test.append(accuracy_score(lrl2.predict(Xtest),Ytest))
    
graph =[l1,l2,l1test,l2test]
color =["green","black","lightgreen","gray"]
label =["L1","L2","L1test","L2test"]


plt.figure(figsize=(6,6))
for i in range(len(graph)):
    plt.plot(np.linspace(0.05,1,19),graph[i],color[i],label=label[i])
plt.legend(loc=0)
plt.show()

caa7b50b50eadfc97a73da99d0de8ca7.png

7、开始降维处理,还是先导入需要的安装包

from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectFromModel

8、降维导入数据

data=load_breast_cancer()
data.data.shape

9、实例化数据

LR_ = LR(solver="liblinear",C=0.8,random_state=420)#实例化=0.8,较好
cross_val_score(LR_,data.data,data.target,cv=10).mean()#交叉验证;模型,特征矩阵,标签,cv交叉验证10次

10、高效的嵌入法,模块SelectFromModel,不考虑测试集和训练集,全部放到模型中验证

X_embedded=SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target)
X_embedded.shape

11、验证降维后的结果:

#特征数量减少到个位数9,并且模型的效果0.9368并没有下降很多,
cross_val_score(LR_,X_embedded,data.target,cv=10).mean()

606607cbee51bd10911994e727cc1eec.png

可以发现,逻辑回归的模型运行快,比较易懂,但是知识点比较多,所以还是要多学习下深层次原理。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值