逻辑回归LR

逻辑回归

概述

分类技术是机器学习和数据挖掘应用中的重要组成部分。在数据科学中,大部分的问题属于分类问题。解决分类的算法也有很多种。如:KNN,使距离计算来实现分类;决策树,通过构建直观易懂的树来实现分类。这里我们要展开的是Logistic回归,这是一种很常见的用来解决二元分类问题的回归方法,它主要是通过寻找最优参数来正确地分类原始数据

基本原理

逻辑回归(Logistic Regression,简称LR),其实是一个很有误导性的概念,虽然它的名字中带有“回归”两个字,但是它最擅长处理的却是分类问题。LR分类器适用于各项广义上的分类任务,例如:二分类有:评论信息的正负情感分析,用户点击率,用户违约信息预测,垃圾邮件预测,疾病预测等;多分类:用户等级分类等场景。我们这里主要讨论的是二分类问题。
逻辑回归
逻辑回归的表达式为: y = 1 1 + e − ( w T x + b ) y=\frac{1}{1+e^{-(w^Tx+b)}} y=1+e(wTx+b)1
需要注意的是虽然其名字包含回归二字,但本质上是一种分类学习方法。这种方法有很多优点,例如它是直接对分类可能性进行建模,因此它不仅预测出类别,而且得到的是近似概率预测,这对许多需要利用概率辅助决策的任务很有用。

逻辑回归的Scikit-Learn实现

class sklearn.linear_model.LogisticRegression(
	panalt='l2',
	dual=False, 
	tol=0.0001, 
	C=1.0,
	fifit_intercept=True, 
	intercept_scaling=1, 
	class_weight=None, 
	random_state=None, 
	solver=’warn’, 
	max_iter=100*, 
	multi_class=’warn’, 
	verbose=0, 
	warm_start=False, 
	n_jobs=None)

参数详解

正则化参数:penalty

LogisticRegression默认就带了正则化项。penalty参数可选择的值为"1"和"2",分别对应L1的正则化和L2的正则化,默认是L2的正则化。

在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择 L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常 多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。


penalty参数的选择会影响我们损失函数优化算法的选择。即参数solver的选择,如果是L2正则化,那么 4种可选的算法 (‘newton-cg’,‘Ibfgs’,‘liblinear’,‘sag’} 都可以选择。但是如果penalty是L1正则化的话, 就只能选择 ‘liblinear’了。这是因为L1正则化的损失函数不是连续可导的,而 {‘newton-cg’,‘Ibfgs,‘sag’} 这三种优化算法时都需要损失函数的一阶或者二阶连续导数。而 ’liblinear’ 并没有这个依赖。
而两种正则化下C的取值,都可以通过学习曲线来进行调整。

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

lrl1 = LR(penalty="l1",solver="liblinear",C=0.5,max_iter=1000) 
#逻辑回归的重要属性coef_,查看每个特征所对应的参数
lrl2 = LR(penalty="l2",solver="liblinear",C=0.5,max_iter=1000)

lrl1 = lrl1.fit(X,y)
lrl2 = lrl2.fit(X,y)

print('lrl1' ,lrl1.coef_)
print('lrl2', lrl2.coef_)

输出如下,可以看见,当我们选择L1正则化的时候,许多特征的参数都被设置为了0,这些特征在真正建模的时候,就不会出现在模型当中了,而L2正则化是对所有的特征都给出了参数。
在这里插入图片描述

算法优化参数:solver

solver参数决定了我们对逻辑回归损失函数的优化方法,有4种算法可以选择,分别是∶

  • liblinear∶使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
  • Ibfgs∶拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
  • newton-cg∶也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
  • sag∶即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅用一部分的样本来计算梯度,适合于样本数据多的时候。

从上面面的描述可以看出,newton-cg,Ibfgs和sag这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。
同时,sag每次仅使用了部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样 本量非常大,比如大于10万,sag是第一选择。但是sag不能用于L1正则化,所以当你有大量的样本,又 需要L1正则化的话就要自己做取舍了。要么通过对样本采样来降低样本量量,要么回到L2正则化。

从上面的描述,大家可能觉得,既然newton-cg,Ibfgs和sag这么多限制,如果不是大样本,我们选择 liblinear不就行了吗?因为liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回 归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种,而MvM一般比 OvR分类相对准确一些。liblinear只支持OVR,不支持MVM,这样如果我们需要相对精确的多元逻辑 回归时就不的先择liblinear了。也意味着如果我们需要相对精确的多元逻辑回归不能位用L1正则化了

梯度下降:重要参数max_iter

max_iter很大,意味着步长小,模型运行得会更加缓慢。然 我们在梯度下降中追求的是损失函数的最小值,但这也可能意味着我们的模型会过拟合(在训练集上表 现得太好,在测试集上却不一定),因此,如果在max_iter报红条的情况下,模型的训练和预测效果都 已经不错了,那我们就不需要再增大max_iter中的数目了,毕竟一切都以模型的预测效果为基准
一只要 最终的预测效果好,运行又快,那就一切都好,无所谓是否报红色警告了。

分类方式选参数

multi_class参数决定了我们分类方式的选择,有ovr和multinomial两个值可以选择,默认是ovr。
ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻 辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
OvR的思想很简单,无论你 是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K 类的分类决策,我们把所有 第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到 第K类的分类模型。其他类的分类模型获得以此类推。
而MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T 类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1 作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
从上面的描述可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分 布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。

如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,bfgs和sag都可以选择。但是如果选择了 multinomial,则只能选择newton-g,Ibfgs和sag了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值