什么是逻辑回归

逻辑回归也叫对数几率回归,在西瓜书中有介绍,吃瓜的时候也学过,可惜呀,脑子不好使,全忘了。重新学一下吧。。。。
在理解对数几率回归之前需要先理解线性回归。线性回归的任务,就是构造一个预测函数 来映射输入的特征矩阵x和标签值y的线性关系,具体以公式体现如下:
z=θ0+θ1x1+θ2x2+...+θnxnz = \theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_nz=θ0​+θ1​x1​+θ2​x2​+...+θn​xn​
写成矩阵形式为:

构造预测函数的核心就是找的矩阵θT\theta^TθT,最小二乘法就是用来求解线性回归的数学方法。

通过线性回归得到的预测结果是连续的实数,而分类任务的结果通常是间断的具体的表示,因此线性回归能否用来进行分类任务呢?答案是肯定的,这要借助一个函数将线性的结果映射到分类的结果,对于常见的二分类任务,可以映射到0和1,则这个函数可以是阶跃函数,也可以是Sigmoid函数,常用的是Sigmoid函数,Sigmoid函数的形势如下:

可以发现,当线性回归结果越大时,越接近于1,越小则越接近于0。
将z=θTxz=\theta^Txz=θTx代入就得到了简单的二分类逻辑回归:
g(z)=y(x)11+e−θTxg(z)=y(x)\frac{1}{1+e^{-\theta^Tx}}g(z)=y(x)1+e−θTx1​
y(x)y(x)y(x)通常就是分类任务的标签。对于这个y(x)y(x)y(x),可以发现:

因此,逻辑回归的任务就是求解θT\theta^TθT来使结果拟合样本的标签。

sklearn中的逻辑回归

逻辑回归的类 说明
linear_model.LogisticRegression 逻辑回归分类器(又叫logit回归,最大熵分类器)
linear_model.LogisticRegressionCV 带交叉验证的逻辑回归分类器
linear_model.logistic_regression_path 计算Logistic回归模型以获得正则化参数的列表
linear_model.SGDClassifier 利用梯度下降求解的线性分类器(SVM,逻辑回归等等)
linear_model.SGDRegressor 利用梯度下降最小化正则化后的损失函数的线性回归模型
metrics.log_loss 对数损失,又称逻辑损失或交叉熵损失
metrics.confusion_matrix 混淆矩阵,模型评估指标之一
metrics.roc_auc_score ROC曲线,模型评估指标之一
metrics.accuracy_score 精确性,模型评估指标之一

损失函数

损失函数是用来衡量参数θ\thetaθ的优劣,判断训练得到的模型在拟合样本时的信息损失,损失函数的具体推导在吃瓜教程里写了,这里就写一下最终结果吧:

重要参数penalty和C

正则化

正则化是为了防止过拟合的过程,常用的有L1正则化和L2正则化两种选项,就是在损失函数上加上参数向量的L1和L2范式倍数来实现。这个增加的范式,被称为“正则项”,也被称为"惩罚项"。损失函数改变,基于损失函数的最优化来求解的参数取值必然改变,我们以此来调节模型拟合的程度。其中L1范式表现为参数向量中的每个参数的绝对值之和,L2范数表现为参数向量中的每个参数的平方和的开方值。

在sklearn中通过参数C和penalty来控制C和正则项
参数 说明
penalty 可以输入"l1"或"l2"来指定使用哪一种正则化方式,不填写默认"l2"。注意,若选择"l1"正则化,参数solver仅能够使用求解方式”liblinear"和"saga“,若使用“l2”正则化,参数solver中所有的求解方式都可以使用。
C 正则化强度的倒数,必须是一个大于0的浮点数,不填写默认1.0,即默认正则项与损失函数的比值是1:1。C越小,损失函数会越小,模型对损失函数的惩罚越重,正则化的效力越强,参数会逐渐被压缩得越来越小。

两种正则化的效果并不相同,在正则化强度增大(即C减小)时,参数都会减小,但L1正则化会将参数压缩到0,而L2正则化是将参数尽量小,但不会为0。
在L1正则化逐渐加强的过程中,携带信息量小的、对模型贡献不大的特征的参数,会比携带信息量大的、对模型贡献大的特征的参数更快地变成0,所以L1正则化本质是一个特征选择的过程,掌管了参数的“稀疏性”。L1正则化越强,参数中就越多为0,参数矩阵就越稀疏,选出来的特征就少,以此来防止过拟合。因此,如果数据量很大,特征很多,会倾向于使用L1正则化。

相对的,L2正则化在加强的过程中,会尽量让每个特征对模型都有一些小的贡献,但携带信息少,对模型贡献不大的特征的参数会非常接近于0。通常来说,如果我们的主要目的只是为了防止过拟合,选择L2正则化就足够了。但是如果选择L2正则化后还是过拟合,模型在未知数据集上的效果表现很差,就可以考虑L1正则化。

逻辑回归中的特征工程

前边学习过PCA和SVD,但是这两种方法进行的是降维的,然而降维后的数据特征很难解释具体的意义,这在逻辑回归的实际应用中存在缺陷,因此通常不适用PCA进行降维处理。所以可以考虑特征选择的方法,而其中嵌入法就是高效的选择方法,这里就写一下嵌入法。

由于L1正则化会使得部分特征对应的参数为0,因此L1正则化可以用来做特征选择,结合嵌入法的模块SelectFromModel,我们可以很容易就筛选出让模型十分高效的特征。此外,可以设置SelectFromModel的参数threshold,即阈值,删除特征系数小于阈值的数。这里特征的参数和随机森林中的feature_importance等类似,可以作为阈值来使用,反应了特征的重要性等方面的特性。

如果调整threshold不好用,也可以调整logisticregression中的C(正则化强度)来进行选择特征。

此外,可以用属性coef_获取训练后的特征的系数。

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
data = load_breast_cancer()
X = data.data
y = data.target
data.data.shape
lrl1 = LR(penalty="l1",solver="liblinear",C=0.5,max_iter=1000)
lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000)
#逻辑回归的重要属性coef_,查看每个特征所对应的参数
lrl1 = lrl1.fit(X,y)
lrl1.coef_
(lrl1.coef_ != 0).sum(axis=1)
lrl2 = lrl2.fit(X)
lrl2.coef_

梯度下降以及参数max_iter

逻辑回归的数学目的是求解能够让模型最优化,拟合程度最好的参数 的值,即求解能够让损失函数 最小化的值。对于二元逻辑回归来说,有多种方法可以用来求解参数 ,最常见的有梯度下降法(Gradient Descent),坐标下降法(Coordinate Descent),牛顿法(Newton-Raphson method)等。

梯度下降法

梯度就是函数对所有自变量求偏导组成的向量,向量的大小记为d,在几何上,梯度的方向表示了函数增加最快的方向。
对于逻辑回归而言,求解的是损失函数的最小值,因此需要将损失函数对参数求偏导构成向量,每次让参数减去向量大小的α\alphaα倍,即:

这里的α\alphaα叫做步长,步长越大,模型迭代的越快,步长越小模型迭代的次数越多。
在sklearn的LogisticRegression中max_iter控制着模型迭代的次数。

二元回归与多元回归:重要参数solver & multi_class

对于多分类的任务,逻辑回归也可以完成。其中主要的方法有两种:一种是将一类表示为1,其余的多类表示为0,这种方法被称为"一对多"(One-vs-rest),简称OvR,在sklearn中表示为“ovr"。另一种是将多个类表示为1,其余的多个类表示为0,这种方法称为“多对多”(Many-vs-Many),在sklearn中表示为““Multinominal”,由参数multi_class决定两种方法使用哪一种
输入"ovr”, “multinomial”, “auto"来告知模型,我们要处理的分类问题的类型。默认是"ovr”。
输入"auto",模型会根据solver的取值来决定,solver是’liblinear’,auto会选择’ovr‘,否则选择’multinominal’。
solver控制的求解器参数如下:

样本不平衡参数class_weight

有时候样本的特征比例悬殊,甚至会出现99:1的情况,在这种情况下即使模型不考虑比例是1的样本,训练出来的结果也有99%的准确率,因此,需要平衡样本。在sklearn中,class_weight可以起到平衡样本的目的,其默认参数是None,可以将样本比例调整为1:1;参数是balanced时,可以自动调整样本的权重。在现实中也常用采样法,认为增加小比例的样本的数量。可以进行上采样(增加少数类的样本),比如SMOTE,或者下采样(减少多数类的样本)。

sklearn入门——逻辑回归相关推荐

  1. sklearn的逻辑回归

    官方逻辑回归链接 sklearn.linear_model.LogisticRegression - scikit-learn 1.0.2 documentationhttps://scikit-le ...

  2. sklearn之逻辑回归和岭回归

    过拟合与欠拟合 过拟合:一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好地拟合数据,此时认为这个假设出现了过拟合的现象.(模型过于复杂) 欠拟合:一个假设在训练 ...

  3. Python+sklearn使用逻辑回归算法预测期末考试能否及格

    封面图片:<Python程序设计实验指导书>,董付国编著,清华大学出版社 ================= 虽然名字中带有"回归"二字,但实际上逻辑回归是一个用于分类 ...

  4. 【机器学习之逻辑回归】sklearn+python逻辑回归详解

    文章目录 一.逻辑回归 二.算法原理介绍 三.代码实现 3.1 sklearn-API介绍 3.2 sklearn-代码实现 3.3 python手写代码实现 四.总结 五.算法系列 一.逻辑回归 逻 ...

  5. sklearn之逻辑回归LR

    对于线性回归,由于都是求线性参数:逻辑回归,由于其呈S型,具有在坐标轴两个左右边进行急剧上升下降的趋近1或者0,因此具有分类特性. 决策树是天生的过拟合,而线性回归是天生的欠拟合: L1范式可以完成 ...

  6. Sklearn笔记--逻辑回归调参指南

    1 逻辑回归概述 pθ(y=1∣x)=δ(θ⊤x)=11+e−θ⊤xpθ(y=0∣x)=e−θ⊤x1+e−θ⊤x\begin{array}{c} p_{\theta}(y=1 | x)=\delta\ ...

  7. 2 机器学习入门——逻辑回归之kaggle泰坦尼克号竞赛

    前面几篇逻辑回归的例子有些是人造出来的,有些是比较正规的,但数据都比较完整,没有缺失的属性.虽然我们在很多数据上取到的非常好的效果,但总感觉好像不够味,不像实战. 所有的数据下载地址:https:// ...

  8. python机器学习基础05——sklearn之逻辑回归+分类评价指标

    文章目录 逻辑回归 逻辑回归的损失函数 逻辑回归API 分类模型的评价指标 混淆矩阵 准确率 召回率(较多被使用) 精确率 f1-score:精确率和召回率的调和平均数 AUC 逻辑回归 逻辑回归是经 ...

  9. kaggle 入门:逻辑回归应用之Kaggle泰坦尼克之灾

    经典又兼具备趣味性的Kaggle案例泰坦尼克号问题 kaggle入门--逻辑回归应用之kaggle泰坦尼克之灾 原文连接:https://blog.csdn.net/han_xiaoyang/arti ...

最新文章

  1. Python之操作RabbitMQ
  2. Sitecore安全性第1部分:自定义角色和权限
  3. python两个字符串数据可以复制吗_无论如何,是否要将Python pandas数据框中的单个数据中的数据复制到字符串或列表中以进行进一步处理?...
  4. RTOS原理与实现06:计数信号量实现
  5. 减小Gcc编译程序的体积
  6. python3.7 keras和tensorflow兼容_解决Keras 与 Tensorflow 版本之间的兼容性问题
  7. 今天心情好,发首我喜欢的歌---天黑黑
  8. python web ui框架_推荐几个精致的web UI框架
  9. html罗马字母怎么打,怎么打罗马数字二 罗马数字 在电脑上怎么打出来呢?
  10. python爬取王者荣耀所有皮肤
  11. C++实验3个人所得税计算器
  12. 你最喜欢的奥斯卡电影是哪部?
  13. linux学习笔记(6)磁盘管理
  14. 如何锻炼自己的口才?
  15. 牛牛爱位运算(与远算,相与的结果小于等于自身)
  16. ModuleNotFoundError: No module named ‘model‘
  17. Kubernetes弹性伸缩与监控
  18. putty乱码解决方案
  19. ERP 销售出库单查询---出库单明细 SQL优化
  20. 破解验证码相关:用imagemagick和tesseract-ocr破解简单验证码

热门文章

  1. 微信、陌陌的架构方案分析(LBS之二)
  2. 海康威视错误代码0xf_调用海康威视sdk获取车牌号
  3. Linux Shell字符串变量头尾去除空格
  4. firstvalue函数mysql_MySQL 窗口函数之头尾函数
  5. 带你初步了解药物设计中的生物信息学
  6. 鲲鹏Arm64 openEuler 虚拟机学习
  7. 牛客网小白二(2018.4.21)
  8. asp:DropDownList动态绑定数据,设置默认值
  9. TCP/IP 报文协议学习
  10. chromecast 协议_如何删除Chromecast的网络范围内的Android通知