逻辑回归

逻辑回归与线性回归的联系与区别

联系

都属于“监督学习(supervised learning)”,存在输入空间和输出空间,分别对应机器学习里常说的样本和标记。

区别

Logistic回归预测输出的是类别,线性回归预测输出的是值。

周志华的《机器学习》一书中有记载:
若我们欲预测的是离散值,例如"好瓜"“坏瓜”,此类学习任务称为 “分类”。
若欲预测的是连续值,例如西瓜的成熟度0.95 ,0.37,此类学习任务称为"回归"。

逻辑回归的原理

逻辑回归是解决分类问题,线性模型预测的结果是值,我们在线性回归的连续值结果上加一层函数映射 g(一般为sigmoid函数), 将连续值映射到离散值0/1上,可以变化为逻辑回归。
线性回归公式:
z=θ01x12x23x3…+θnxnTx

而对于Logistic Regression来说,其思想也是基于线性回归(Logistic Regression属于广义线性回归模型)。其公式如下:

其中,

被称作sigmoid函数,我们可以看到,Logistic Regression算法是将线性函数的结果映射到了sigmoid函数中。
函数图形如下:

z为样本输入,g(z)为模型输出,可以理解为某一分类的概率大小。对于模型输出g(z),我们让它和我们的二元样本输出y(假设为0和1)有这样的对应关系,如果g(z)>0.5 ,即z>0, 则y为1。如果g(z)<0.5,即z<0, 则y为0。y=0.5是临界情况,此时z=0为, 从逻辑回归模型本身无法确定分类。
g(z)的值越小,而分类为0的的概率越高,反之,值越大的话分类为1的概率越高。如果靠近临界点,则分类准确率会下降。
因为 g(z) 输出是介于(0,1)之间,也就表明了数据属于某一类别的概率,例如 :
g(z) <0.5 则说明当前数据属于A类;
g(z) >0.5 则说明当前数据属于B类。
所以我们可以将sigmoid函数看成样本数据的概率密度函数。
P ( Y = 1 ∣ x , θ ) = h θ ( x ) = e ( θ ; x ) 1 + e ( θ ; x ) P(Y=1|x,\theta)= h_\theta(x)=\dfrac{e^{(\theta;x)}}{1+e^{(\theta;x)}} P(Y=1∣x,θ)=hθ​(x)=1+e(θ;x)e(θ;x)​
P ( Y = 0 ∣ x , θ ) = 1 − h θ ( x ) = 1 1 + e ( θ ; x ) P(Y=0|x,\theta)=1-h_\theta(x)=\dfrac{1}{1+e^{(\theta;x)}} P(Y=0∣x,θ)=1−hθ​(x)=1+e(θ;x)1​

逻辑回归损失函数推导及优化

损失函数的构建

关于损失函数的构建,大家想到更多的可能是最小二乘法。但从这个角度去构建的目标函数如下:
E ( θ , x ) = ∑ i = 1 m ( y i − 1 1 + e ( θ ; x ) ) 2 E_{(\theta,x)}=\sum_{i=1}^{m}(y_i-\dfrac{1}{1+e^{(\theta;x)}})^2 E(θ,x)​=i=1∑m​(yi​−1+e(θ;x)1​)2
由于是非凸的,不易求解,且会得到局部最优。详细请参考。
故这里,用极大似然估计来估计 θ t \theta^t θt的值。因此,可构造如下似然函数:
L ( θ ; x ) = ∏ i = 1 m [ h θ ( x ) ] i y [ 1 − h θ ( x ) ] 1 − y i L_{(\theta;x)}=\prod_{i=1}^{m}[h_\theta(x)]^y_i[1-h_\theta(x)]^{1-y_i} L(θ;x)​=i=1∏m​[hθ​(x)]iy​[1−hθ​(x)]1−yi​
对 L ( θ ) L_{(\theta)} L(θ)​取对数,化简得:

l ( θ ) = ∑ i = 1 m [ y i l o g h θ ( x ) ) + ( 1 − y i ) l o g ( 1 − h θ ( x ) ) ] l_{(\theta)} = \sum_{i=1}^{m}[y_ilogh_\theta(x))+(1-y_i)log(1-h_\theta(x))] l(θ)​=i=1∑m​[yi​loghθ​(x))+(1−yi​)log(1−hθ​(x))]
进一步化简得:
l ( θ ) = ∑ i = 1 m [ y i ∗ θ ( x ) − l o g ( 1 + h θ ( x ) ) ] l_{(\theta)} = \sum_{i=1}^{m}[y_i*\theta(x) - log(1+h_\theta(x))] l(θ)​=i=1∑m​[yi​∗θ(x)−log(1+hθ​(x))]
最大化上式值等价于最小化,参考
l ( θ ) ‘ = − 1 m ∑ i = 1 m [ y i ∗ θ ( x ) − l o g ( 1 + h θ ( x ) ) ] l_{(\theta)} ^‘=-\dfrac{1}{m}\sum_{i=1}^{m}[y_i*\theta(x) - log(1+h_\theta(x))] l(θ)‘​=−m1​i=1∑m​[yi​∗θ(x)−log(1+hθ​(x))]
因此,问题就变成了以似然函数为目标函数的最优化问题。

优化求解

可以通过经典的梯度下降法、牛顿法求其最优解。利用梯度下降法,于是得到如下结果:
θ t + 1 = θ t − α ∗ ∂ l ( θ ) ‘ ∂ θ = θ t − α ∗ ∑ i = 1 m ( y i − h θ ( x i ) ) ) x i \theta^{t+1} =\theta^t-\alpha*\dfrac{\partial{l_{(\theta)} ^‘}}{\partial{ \theta}}=\theta^t-\alpha*\sum_{i=1}^{m}(y_i-h_\theta(x_i)))x_i θt+1=θt−α∗∂θ∂l(θ)‘​​=θt−α∗i=1∑m​(yi​−hθ​(xi​)))xi​
其中,参数alpha是学习率,决定梯度下降的步长。
关于梯度下降法的优化,可以根据数据的体量,调整学习率来提高收敛速度,可以利用随机梯度下降方法来进行优化,详细请参考

正则化与模型评估指标

正则化概念

给定向量 ,x=(x1,x2,x3,…xn)

L0范数:并不是一个真正的范数,它主要被用来度量向量中非零元素的个数;
L1范数:向量各个元素绝对值之和;

L2范数:向量各个元素的平方求和然后求平方根;

Lp范数:向量各个元素绝对值的p次方求和然后求 1/p 次方;

L ∞ \infty ∞范数:向量的各个元素求绝对值,取最大那个元素的绝对值

正则化作用
  • L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型(很多0),可以用于特征选择;
  • L2正则化可以防止模型过拟合(overfitting);一定程度上,L1也可以防止过拟合,使模型更加平滑

逻辑回归的优缺点

优点

  • 形式简单,模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响,某个特征的权重值比较高,那么这个特征最后对结果的影响会比较大。;
  • 训练速度较快。分类的时候,计算量仅仅只和特征的数目相关。
  • 预测结果是界于0和1之间的概率,方便输出结果调整。逻辑回归可以很方便的得到最后的分类结果,我们可以很容易的对这些概率分数进行划分,也就是划分边界值(大于某个边界值的是一类,小于某个边界值的是一类)。

缺点

  • 容易欠拟合,一般准确度不太高;
  • 无法很好的处理数据不均衡问题,数据特征有缺失或者特征空间很大时表现效果并不好;
  • 只能处理两分类问题,且必须线性可分,对于非线性特征,需要进行转换;

样本不均衡问题解决办法

类别数据不均衡是分类任务中一个典型的存在的问题。简而言之,即数据集中,每个类别下的样本数目相差很大。例如,在一个二分类问题中,共有100个样本(100行数据,每一行数据为一个样本的表征),其中80个样本属于class 1,其余的20个样本属于class 2,class 1:class2=80:20=4:1,这便属于类别不均衡。

  • 过采样(over-sampling):对小类的数据样本进行过采样来增加小类的数据样本个数,即采样的个数大于该类样本的个数。
  • 欠采样(under-sampling):对大类的数据样本进行欠采样来减少大类的数据样本个数,即采样的个数少于该类样本的个数。
    采样算法容易实现,效果也不错,但可能增大模型的偏差(Bias),因为放大或者缩小某些样本的影响相当于改变了原数据集的分布。对不同的类别也要采取不同的采样比例,但一般不会是1:1,因为与现实情况相差甚远,压缩大类的数据是个不错的选择。

sklearn参数

参数
  • fit_intercept : boolean, optional, default True
    是否加入截距,截距也就是经常出现在式子中的b,默认是加入的,也可以设置为False,这时假设数据已经中心化
  • normalize : boolean, optional, default False
    设置为True的话则对数据进行fit前会进行规范化处理,参数描述是这么说的
    If True, the regressors X will be normalized before regression by subtracting the mean and dividing by the l2-norm.这里说会先减去该样本的均值然后除以该样本的二范数,但是记得规范化是直接除以范数的,这里有点迷惑,希望有知道的可以帮忙解答一下。
    如果fit_intercept是False的话,那么normalize参数会被忽略。
  • copy_X : boolean, optional, default True
    默认复制X结果而不是直接修改X,X是训练样本数据
  • n_jobs : int, optional, default 1
    也就是用来进行计算的任务数,默认只有一个,如果设置为-1那么便等于cpu的核心数
属性(模型可见的参数)
  • coef_ : array, shape (n_features, ) or (n_targets, n_features)
    表示该线性回归的参数,如果有n个特征那么返回的参数也是n
  • intercept_ : array
    截距
方法
  • fit(X, y[, sample_weight]) Fit linear model.
    拟合训练数据,可选参数为sample_weight,也就是每个样本的权重值,可能是你认为更为重要的特征,X为特征数据,y为label值
  • get_params([deep]) Get parameters for this estimator.
    deep默认为True
    返回一个字典,键为参数名,值为参数值,如下
  • {‘copy_X’: True, ‘fit_intercept’: True, ‘n_jobs’: 1, ‘normalize’: True}
  • predict(X) Predict using the linear model
    这个很好理解了,输入样本数据输出预测值
  • score(X, y[, sample_weight]) Returns the coefficient of determination R^2 of the
    prediction.
    The coefficient R^2 is defined as (1 - u/v), where u is the residual sum of squares ((y_true - y_pred) * 2).sum() and v is the total sum of squares ((y_true - y_true.mean()) * 2).sum().
    简单地翻译一下,返回的是R^2系数,这个系数的计算方式是这样的,1-(所有样本的残差的平方和/所有样本的类值减去类平均值的平方和),这个值可以是负数,最好的情况是1,说明所有数据都预测正确
  • set_params(**params) Set the parameters of this estimator.
    设置估计器的参数,可以修改参数重新训练
例子
from sklearn import datasets
from sklearn.model_selection import cross_val_predict
from sklearn import linear_model
import matplotlib.pyplot as pltlr = linear_model.LinearRegression()
#导入波士顿房价预测的数据集,比较经典的数据集
boston = datasets.load_boston()
y = boston.target#cross_val_predict returns an array of the same size as `y` where each entry
#is a prediction obtained by cross validation:
#这里使用十折交叉验证进行拟合数据,每次用其中九折数据训练,一折数据预测
predicted = cross_val_predict(lr, boston.data, y, cv=10)#下面就是调用Pyplot进行绘图做可视化了
fig, ax = plt.subplots()
ax.scatter(y, predicted, edgecolors=(0, 0, 0))
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()

奋斗的小青年的逻辑回归整理相关推荐

  1. 一文让你完全弄懂逻辑回归和分类问题实战《繁凡的深度学习笔记》第 3 章 分类问题与信息论基础(上)(DL笔记整理系列)

    好吧,只好拆分为上下两篇发布了>_< 终于肝出来了,今天就是除夕夜了,祝大家新快乐!^q^ <繁凡的深度学习笔记>第 3 章 分类问题与信息论基础 (上)(逻辑回归.Softm ...

  2. R语言使用broom包将回归模型(线性回归、逻辑回归、比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集

    R语言使用broom包将回归模型(线性回归.逻辑回归.比例风险回归)的结果整理成dataframe并导出到excel等文件中:基于mtcars和colon数据集 目录

  3. 线性回归、逻辑回归-学习笔记整理

    线性回归 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式. 只有一个自变量的情况称为单变量回归,多于一 ...

  4. 逻辑回归模型笔记整理6 - 参数详细说明

    LogisticRegression,一共有14个参数: 逻辑回归参数详细说明 参数说明如下: penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2.用于指定惩罚项中使用的规范.new ...

  5. 机器学习——逻辑回归常见面试题整理

    逻辑回归 1.介绍 逻辑回归假设数据服从伯努利分布,通过极大化似然函数的方法,运用梯队下降来求解参数,来达到将数据二分类的目的. 2.逻辑回归的损失函数和梯度下降参数迭代方法 逻辑回归的损失函数是它的 ...

  6. 【机器学习】线性回归与逻辑回归的理论与实战

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要10分钟 跟随小博主,每天进步一丢丢 作者:奋斗喵 编辑:王萌 1.基本概念 要进行机器学习,首先要有数据.从数据中学得模型的过程称为" ...

  7. 从原理到代码,轻松深入逻辑回归模型!

    整理 | Jane 出品 | AI科技大本营(ID:rgznai100) [导语]学习逻辑回归模型,今天的内容轻松带你从0到100!阿里巴巴达摩院算法专家.阿里巴巴技术发展专家.阿里巴巴数据架构师联合 ...

  8. 逻辑回归 + GBDT模型融合实战!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:吴忠强,东北大学,Datawhale成员 一.GBDT+LR简介 ...

  9. 逻辑回归评分卡实现和评估

    评分卡实现和评估   上一节讲得是模型评估,主要有ROC曲线.KS曲线.学习曲线和混淆矩阵.今天学习如何实现评分卡和对评分卡进行评估.   首先,要了解评分卡是如何从概率映射到评分的,这个之前写过评分 ...

最新文章

  1. Android之给图片添加水印效果
  2. DockOne微信分享( 九十):猎豹移动基于CoreOS在AWS上的项目实践
  3. :批量制作档案表,要从excel表格中将每个人的数据导入到docx档案
  4. [原创]个人工具 - 对APK极限压缩并对齐的工具(58.ReExtremeZipAndAlignAPK)
  5. Note: pdfcrop
  6. 企业级备份方案系列PART3:SCDPM 2012备份/恢复Exchange2010
  7. EasyAR_实现AR涂涂乐
  8. html中图片动态效果代码,CSS3实现的图片动态交互效果
  9. android学习论坛
  10. 酷狗音乐车载Android版,酷狗音乐车载版
  11. chtMultiRegionSimpleFoam求解器的热源不在边界上【翻译】
  12. 996加班骗局被揭穿,背后真相值得深思!
  13. 每一步都要确保投资人利益—MDU价格保障机制之销毁
  14. php div 居中代码,用CSS实现DIV水平居中显示
  15. 嵌入式课设-基于GPS模块的校园定位程序
  16. 免费html5 css3大学生网页设计期末作业 网页制作作业成品
  17. 基于三维GIS的场数据模型研究与实践
  18. 前端web开发——有梦想就看过来!!
  19. 弗洛伊德算法学习(Java)
  20. FME中的常用kml转换器介绍(一)

热门文章

  1. 牛顿迭代法解一元三次方程
  2. ROS踩坑|warning:clock skew detected. Your build may be incomplete
  3. AddressBook 地址簿 (电话簿) 访问与修改
  4. 正则表达式去掉以 开头和结尾的
  5. 量化交易摸索-角度计算
  6. C++20 Concepts 模版约束概念
  7. mac电脑上遇到的坑,持续更新...
  8. c语言习题---(if语句)
  9. Eclipse安装使用
  10. Tomcat配置图片保存路径