逻辑回归几乎是最常见的机器学习模型了,每个初学者来说都是必须学习的机器学习模型,简单的推导再加上优雅的模型,很容易被人所理解。值得注意的是,就是这么简单的模型,在各种应届实习或者工作面试中经常会被面试官提到。它是否真的如你想象的如此简单,有什么地方是你在学习的过程中丝毫没有注意到的,现在让我们一起深入地了解下它吧。
本篇文章主要是讲解学习逻辑回归时不容易想到的问题,因此对于机器学习的公式推导啥的就不不仔细展开了。
假设背景:预测值y服从伯努利分布
激活函数: σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+e−x1
表达式: f ( x ) = w T + b f(x)=w^T+b f(x)=wT+b, y = σ ( f ( x ) ) = σ ( w T x ) y=\sigma(f(x))=\sigma(w^Tx) y=σ(f(x))=σ(wTx)
损失函数: J ( θ ) = − [ 1 2 m Σ 1 m ( y i l n ( p ) + ( 1 − y i ) l n ( 1 − p ) ) ] J(\theta)=-[\frac{1}{2m}\Sigma^m_1(y_iln(p)+(1-y_i)ln(1-p))] J(θ)=−[2m1Σ1m(yiln(p)+(1−yi)ln(1−p))]
其中 p = σ ( f ( x ) ) p=\sigma(f(x)) p=σ(f(x))
以上是关于逻辑的回归知识的一点小小的复习,干货在后边来了。
1:结构简单,具有很强的解释了,可以直观地看到不同特征地重要程度
2:训练速度快,占用的计算资源少,容易部署,无论用什么语言都可以很容易地写出来
3:效果好,比较依赖特征工程,特征工程做的好的话,效果会很好
1:结构简单,在复杂的场景下效果不好
2:很难处理数据样本不均衡的情况
3:处理非线性数据的时候,一般都需要手动特征工程
逻辑回归与支持向量机(不加核函数)作为两个最经典的线性模型,经常会被一起考察到。
1:都可以用于二分类,经过处理后也可以用于多分类
2:都可以加正则化,
3:两者都可以引入非线性化,不过方法不一样
相比较两者的相似之处,不同之处才是更多的。
1:LR是参数模型,SVM是非参数模型
2:两者的损失函数不同,LR采用的是对数损失函数,而SVM采用的是hinge Loss
3:SVM只考虑局部,而LR考虑的是整体。SVM只考虑support vector,而LR考虑所有的样本。
4:优化方法不一样,LR常采用梯度下降法,SVM采用的是最小序列法(SMO)
5:对于非线性的表达,LR一般需要采用人工的特征工程来实现,而SVM采用引入核函数实现。
6:SVM的预测结果是0和1,LR输出的是概率。
简评:LR和SVM都是十分优秀而简单的机器学习方法,在很多数据集上两者的表现也相差不大,但是LR更适合处理大规模的工业数据,处理速度更快,而SVM处理速度则会慢很多。
和SVM一样,LR也不支持直接进行多分类,一般是转化为One Vs Many进行二分类,一般地步骤如下:
1:将类别1看作正样本,其他类型全部看作负样本,然后我们就可以得到样本标记类型为该类型的概率p1。
2.然后再将另外类别2看作正样本,其他类型全部看作负样本,同理得到p2。
3.以此循环,得到该待预测样本的标记类型分别为类别i时的概率pi,取pi中最大的那个概率对应的样本标记类型作为待预测样本类型。
没有影响的,如果数据中将某个特征复制一遍,那么就相当于将权重变为原来的一半,并不会影响模型的收敛。当然对模型的收敛也肯定不会有什么促进作用
为什么需要离散化:
在工业界中,一般不会将连续值作为特征给逻辑回归模型,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点:
稀疏向量内积乘法运算速度快,计算结果方便存储,容易scalable(扩展)。
离散化后的特征对异常数据有很强的鲁棒性:比如一个特征是年龄>30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
也有大佬认识模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。
总结起来就是:计算简单,简化模型,增强模型的泛化能力
1:增加样本数量(约等于废话)
2:添加正则化,这个主要是提高模型的泛化能力
3:特征工程,如果说数据决定上线的话,那么特征工程是你可以逼近上限最重要的方法,你和大佬之间差了一个特征工程。
4:参数,这个其实聊胜于无,一般没什么提升
一般有L1正则和L2正则两种方法
L1正则:
J ( θ ) = − [ 1 2 m Σ i = 1 m ( y i l n ( p ) + ( 1 − y i ) l n ( 1 − p ) ) ] + λ Σ j = 1 n ∣ θ j ∣ J(\theta)=-[\frac{1}{2m}\Sigma^m_{i=1}(y_iln(p)+(1-y_i)ln(1-p))]+\lambda\Sigma^n_{j=1}|\theta_j| J(θ)=−[2m1Σi=1m(yiln(p)+(1−yi)ln(1−p))]+λΣj=1n∣θj∣
L2正则:
J ( θ ) = − [ 1 2 m Σ i = 1 m ( y i l n ( p ) + ( 1 − y i ) l n ( 1 − p ) ) ] + λ Σ j = 1 n θ j 2 J(\theta)=-[\frac{1}{2m}\Sigma^m_{i=1}(y_iln(p)+(1-y_i)ln(1-p))]+\lambda\Sigma^n_{j=1}\theta^2_j J(θ)=−[2m1Σi=1m(yiln(p)+(1−yi)ln(1−p))]+λΣj=1nθj2
L1正则和L2正则实际上就是在损失函数后面分别加上了L1范数还有L2范数的平方。
关于正则化为什么可以防止过拟合有以下的解释:
1:由于我们的训练数据是有限的,很多模型都可以来拟合这有限的数据,为了使得预测数据有更好的表现,我们一般倾向于选择模型空间最小的模型。加入正则化就是将模型空间变得更小。这种解释类似于在方差和偏差中做一个tradeoff。
2:第二种解释就是加入正则化,就是相当于加入了先验,和贝叶斯学派有点类似, 给参数一个先验,认为参数是服从某种分布的。(为什么逻辑回归和贝叶斯还扯上了关系,我下面会有详细地介绍)。这种解释看似很有道理,但是好像又没有回答问题,并没有说法是加入先验可以提高模型泛化能力。
对于正则化还有一个问题会经常被问道,那就是L1正则化为什么会造成参数的稀疏,这个有点复杂,防止说不清楚,贴上大佬的回答。
以上就是本篇文章的全部内容,看标题就知道肯定没有结束嘛。先给大家抛出几个问题,在下一篇文章种我会详细解答,等不及的小伙伴也可以先思考或者参考网上的答案。
1:逻辑回归的优化方法是什么,以及为什么使用该方法
2:逻辑回归为什么要使用激活函数,以及为什么使用sigmoid函数,它有什么好处
3:逻辑回归的为什么采用交叉熵的损失函数
4:逻辑回归与贝叶斯之间有没有什么联系
欢迎大家加入我们challengeHub的群和我们一起交流,关于数据分析,数据挖掘,python学习,深度学习,自然语言处理的都可以进群交流,群内各路大佬。欢迎大家一起学习成长。