老马学机器学习-12-逻辑斯蒂回归(Logistic Regression)
逻辑斯蒂回归(Logistic Regression)
逻辑斯蒂回归(Logistic Regression) 虽然名字中有回归,但模型最初是为了解决二分类问题。
线性回归模型帮助我们用最简单的线性方程实现了对数据的拟合,但只实现了回归而无法进行分类。
因此LR就是在线性回归的基础上,构造的一种分类模型。
对线性模型进行分类如二分类任务,简单的是通过阶跃函数(unit-step function),即将线性模型的输出值套上一个函数进行分割,大于z的判定为0,小于z的判定为1。
如下图左所示

但这样的分段函数数学性质不好,既不连续也不可微。
因此有人提出了对数几率函数,见上图右,简称Sigmoid函数。

该函数具有很好的数学性质,既可以用于预测类别,并且任意阶可微,因此可用于求解最优解。
将函数带进去,可得LR模型为

其实,LR 模型就是在拟合 z = w^T x + b
这条直线,使得这条直线尽可能地将原始数据中的两个类别正确的划分开。
损失函数
回归问题的损失函数一般为平均误差平方损失 MSE,LR解决二分类问题中,损失函数为如下形式

这个函数通常称为对数损失logloss,这里的对数底为自然对数 e ,其中真实值 y 是有 0/1 两种情况,而推测值 y^ 由于借助对数几率函数,其输出是介于0~1之间连续概率值。
因此损失函数可以转换为分段函数

优化求解
确定损失函数后,要不断优化模型。
LR的学习任务转化为数学的优化形式为

是一个关于w和b的函数。
同样,采用梯度下降法进行求解,过程需要链式求导法则

此处忽略求解过程。
此外,优化算法还包括
Newton Method(牛顿法)
Conjugate gradient method(共轭梯度法)
Quasi-Newton Method(拟牛顿法)
BFGS Method
L-BFGS(Limited-memory BFGS)
上述优化算法中,BFGS与L-BFGS均由拟牛顿法引申出来,与梯度下降算法相比,其优点是:第一、不需要手动的选择步长;第二、比梯度下降算法快。
但缺点是这些算法更加复杂,实用性不如梯度下降。
自主实现
首先,建立 logistic_regression.py 文件,构建 LR 模型的类,内部实现了其核心的优化函数。
# -*- coding: utf-8 -*-
import numpy as np
class LogisticRegression(object):
def __init__(self, learning_rate=0.1, max_iter=100, seed=None):
self.seed = seed
self.lr = learning_rate
self.max_iter = max_iter
def fit(self, x, y):
np.random.seed(self.seed)
self.w = np.random.normal(loc=0.0, scale=1.0, size=x.shape[1])
self.b = np.random.normal(loc=0.0, scale=1.0)
self.x = x
self.y = y
for i in range(self.max_iter):
self._update_step()
# print('loss: \t{}'.format(self.loss()))
# print('score: \t{}'.format(self.score()))
# print('w: \t{}'.format(self.w))
# print('b: \t{}'.format(self.b))
def _sigmoid(self, z):
return 1.0 / (1.0 + np.exp(-z))
def _f(self, x, w, b):
z = x.dot(w) + b
return self._sigmoid(z)
def predict_proba(self, x=None):
if x is None:
x = self.x
y_pred = self._f(x, self.w, self.b)
return y_pred
def predict(self, x=None):
if x is None:
x = self.x
y_pred_proba = self._f(x, self.w, self.b)
y_pred = np.array([0 if y_pred_proba[i] >0或z30是1,否则0。如果特征没有离散化,一个异常数据“年龄300岁”会给模型造成很大的干扰。
3、逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入了非线性,能够提升模型表达能力,加大拟合。
4、离散化后可以进行特征交叉,由M+N个变量变为M*N个变量,进一步引入非线性,提升表达能力。
5、特征离散化后,模型会更稳定,比如如果对用户年龄离散化,20-30作为一个区间,不会因为一个用户年龄长了一岁就变成一个完全不同的人。当然处于区间相邻处的样本会刚好相反,所以怎么划分区间是门学问。
# 逻辑回归和线性回归的区别和联系
1)线性回归要求因变量服从正态分布,logistic回归对变量分布没有要求。
2)线性回归要求因变量(Y)是连续性数值变量,而logistic回归要求因变量是分类型变量。
3)线性回归要求自变量和因变量呈线性关系,而logistic回归不要求自变量和因变量呈线性关系
4)线性回归是直接分析因变量与自变量的关系,而logistic回归是分析因变量取某个值的概率与自变量的关系
逻辑回归和线性回归都属于广义线性回归模型。
1、回归与分类:回归模型就是预测一个连续变量(如降水量,价格等)。在分类问题中,预测属于某类的概率,可以看成回归问题。这可以说是使用回归算法的分类方法。
2、输出:直接使用线性回归的输出作为概率是有问题的,因为其值有可能小于0或者大于1,这是不符合实际情况的,逻辑回归的输出正是[0,1]区间
3、参数估计方法:
1)线性回归中使用的是最小化平方误差损失函数,对偏离真实值越远的数据惩罚越严重。这样做会有什么问题呢?假如使用线性回归对{0,1}二分类问题做预测,则一个真值为1的样本,其预测值为50,那么将会对其产生很大的惩罚,这也和实际情况不符合,更大的预测值说明为1的可能性越大,而不应该惩罚的越严重。
2)逻辑回归使用对数似然函数进行参数估计,使用交叉熵作为损失函数,对预测错误的惩罚是随着输出的增大,逐渐逼近一个常数,这就不存在上述问题了
3)也正是因为使用的参数估计的方法不同,线性回归模型更容易受到异常值(outlier)的影响,有可能需要不断变换阈值(threshold)。
# LR和SVM的关系
1、LR和SVM都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题)
2、两个方法都可以增加不同的正则化项,如l1、l2等等。所以在很多实验中,两种算法的结果是很接近的。
区别:
1、LR是参数模型,SVM是非参数模型。
2、从目标函数来看,区别在于逻辑回归采用的是logistical loss,SVM采用的是hinge loss,这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。
3、SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。
4、逻辑回归相对来说模型更简单,好理解,特别是大规模线性分类时比较方便。而SVM的理解和优化相对来说复杂一些,SVM转化为对偶问题后,分类只需要计算与少数几个支持向量的距离,这个在进行复杂核函数计算时优势很明显,能够大大简化模型和计算。
5、logic 能做的 svm能做,但可能在准确率上有问题,svm能做的logic有的做不了。
# 小结
希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。
我是老马,期待与你的下次相遇。
# 参考资料
[逻辑斯蒂回归算法](https://www.yuque.com/cqupt_wan/machine_learning/zyymt0)
[逻辑斯蒂回归(Logistic Regression)](https://blog.csdn.net/zhaojc1995/article/details/81592567)
https://xueqiu.com/8566534281/145350684?page=2
https://blog.csdn.net/qq_32742009/article/details/81516140
[逻辑(斯谛)回归(Logistic Regression)](https://www.jianshu.com/p/9f723c2ac52e)
[机器学习 | 算法笔记- 线性回归(Linear Regression)](https://www.cnblogs.com/geo-will/p/10468253.html)
https://www.cnblogs.com/yanghh/p/13697116.html
https://zhuanlan.zhihu.com/p/41458511
[逻辑斯蒂回归的收敛性分析?](https://www.zhihu.com/question/29530009/answer/45023759)
[逻辑斯蒂回归模型](https://cloud.tencent.com/developer/article/1092167)