前言

最近在给某银行举办的建模比赛担任辅导老师,这个比赛要求参赛小组从指定的几道题里挑选一个来建模并输出预测名单用于营销。在比赛过程中选择逻辑回归算法的小组不在少数,我想这与逻辑回归在金融行业尤其是银行业根深蒂固的地位不无关系。但先入为主也会带来一系列的问题,比如在很多业务场景和数据分布上,逻辑回归的效果其实并不理想,这个问题在这次比赛中也得到了验证。尽管如此,由于逻辑回归简单易用、可解释性强,还是有广泛地应用。

逻辑回归算法

逻辑回归简介

逻辑斯蒂回归(Logistic Regression)是一种广义的线性回归模型,主要用于解决二分类问题,也可用于多分类。它通过将线性回归模型的输出映射到一个sigmoid函数(或称为逻辑函数)的范围内,从而将连续的预测结果转化为概率值。

逻辑斯蒂回归的基本原理是假设输入特征与输出间存在一个线性关系,并使用sigmoid函数将其映射到0和1之间的概率值。这样可以根据概率值来进行分类判断,通常将概率大于0.5的样本归为正类,概率小于0.5的样本归为负类。 在应用逻辑斯蒂回归时,通常需要进行特征工程,包括特征选择、特征变换和特征组合等。同时,为了提高模型的性能和泛化能力,还可以采用正则化技术如L1正则化和L2正则化。

逻辑回归简单可解释性强、对线性关系数据的拟合效果好、拟合和计算速度很快。逻辑斯蒂回归的应用非常广泛,它可以用于各种领域的分类问题,如医学诊断、金融风控、推荐系统等。

逻辑回归的由来

上面说过逻辑回归是一种广义的线性回归模型,何为广义线性回归?

线性回归

线性回归大家应该都不陌生,下面是一般的线性回归方程:

输出逻辑回归的系数_输出逻辑回归的系数

这里,输出逻辑回归的系数_线性回归_02 是权值参数,输出逻辑回归的系数_输出逻辑回归的系数_03

线性回归的任务是构造一个预测函数 输出逻辑回归的系数_数据挖掘_04 来映射输入与输出之间的线性关系,而想要构造预测函数,得计算出参数 输出逻辑回归的系数_线性回归_02输出逻辑回归的系数_输出逻辑回归的系数_03

sigmoid函数

sigmoid函数是一个S形曲线,其数学表达式为:输出逻辑回归的系数_线性回归_07



输出逻辑回归的系数_线性回归_08



附:sigmoid曲线图代码

import numpy as np import matplotlib.pyplot as plt def sigmoid(x): return 1 / (1 + np.exp(-x)) x = np.linspace(-8, 8, 100) y = sigmoid(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('Sigmoid curve') plt.grid(True) plt.show()

经过sigmoid函数的处理,现在能用回归算法去处理分类问题了:将回归算法输出的值映射到(0,1)区间,转换后的值可以看成是分类问题输出的概率p值,通过设置一个阈值,大于该阈值,就为类别1,小于该阈值,就为类别0。

逻辑回归的本质

现在,将 输出逻辑回归的系数_线性回归_07 中的 输出逻辑回归的系数_回归_10 换成 输出逻辑回归的系数_数据挖掘_11输出逻辑回归的系数_数据挖掘_12 换成条件概率分布 输出逻辑回归的系数_回归_13 ,进一步,可以将 输出逻辑回归的系数_数据挖掘_11 写成向量形式,记 输出逻辑回归的系数_线性回归_15输出逻辑回归的系数_回归_16

输出逻辑回归的系数_人工智能_17

输出逻辑回归的系数_线性回归_18

至此,我们得到了二分类逻辑斯蒂回归模型的数学表达:式 输出逻辑回归的系数_输出逻辑回归的系数_19

但这个表达式的右边部分看起来不太直观,如果能变成线性方程是不是更好?为此,我们尝试对原式做点变换。

输出逻辑回归的系数_数据挖掘_20

输出逻辑回归的系数_线性回归_21

在概率统计学中,一个事件发生的概率(式1.2)与不发生的概率(式1.3)的比值称为几率,由上面的推算可知,对于二分类,输出 输出逻辑回归的系数_输出逻辑回归的系数_22 的对数几率的本质就是线性回归 输出逻辑回归的系数_数据挖掘_23 ,实际上我们是在对线性回归模型的预测结果取 对数几率 来让其结果逼近0和1。因此逻辑回归模型也可称为 对数几率回归(Logistic Regression)

逻辑回归的参数

上面提到过,线性回归的目的是求解参数来拟合一条曲线。同样,逻辑回归也需要求解参数 输出逻辑回归的系数_线性回归_02输出逻辑回归的系数_输出逻辑回归的系数_03

线性回归使用最小二乘作为损失函数来求解参数,逻辑回归也能这样做吗?事实上并不能,but why?

我们先按最小二乘法来写出逻辑回归的损失函数表达式:

输出逻辑回归的系数_线性回归_26

其中,输出逻辑回归的系数_输出逻辑回归的系数_27

输出逻辑回归的系数_线性回归_28



输出逻辑回归的系数_线性回归_29



使用梯度下降法求解大概率会陷入局部最优解中,而非全局最优值,这就是逻辑回归不使用最小二乘的根本原因。

既然不能用最小二乘法求解参数,那还有其他方法吗?实际上,逻辑回归采用 极大似然估计 来求解参数。

似然函数

似然函数是一种关于统计模型中参数的函数,表示模型参数的似然性。似然与概率意思相近,都是指某种事件发生的可能性,但又有明确的区分。概率是在已知参数时预测结果,而似然则是在已知观测结果时估计参数。比如对于函数 输出逻辑回归的系数_人工智能_30

  • 如果 输出逻辑回归的系数_线性回归_31 为常量,输出逻辑回归的系数_回归_32 为变量,则 输出逻辑回归的系数_数据挖掘_33 是概率函数,表示不同 输出逻辑回归的系数_回归_32
  • 如果 输出逻辑回归的系数_线性回归_31 为变量,输出逻辑回归的系数_回归_32 为常量,则 输出逻辑回归的系数_数据挖掘_33 是似然函数,表示不同参数θ对应的 输出逻辑回归的系数_回归_32

对于离散型随机变量 输出逻辑回归的系数_输出逻辑回归的系数_39 ,在给定 输出逻辑回归的系数_输出逻辑回归的系数_39 的输出x时,关于 输出逻辑回归的系数_回归_41 的似然函数可记作 输出逻辑回归的系数_输出逻辑回归的系数_42 。如果数据集 输出逻辑回归的系数_输出逻辑回归的系数_43 上有 输出逻辑回归的系数_人工智能_44 个样本,则在 输出逻辑回归的系数_输出逻辑回归的系数_43

输出逻辑回归的系数_线性回归_46

对于连续型随机变量 输出逻辑回归的系数_输出逻辑回归的系数_39 ,在给定 输出逻辑回归的系数_输出逻辑回归的系数_39 的输出x时,似然函数可记作 输出逻辑回归的系数_数据挖掘_49 。如果数据集 输出逻辑回归的系数_输出逻辑回归的系数_43 上有 输出逻辑回归的系数_人工智能_44 个样本,则在 输出逻辑回归的系数_输出逻辑回归的系数_43

输出逻辑回归的系数_线性回归_53

为更好的理解似然函数,可以举个例子:对于一枚硬币,假设我们现在不知道它是否均匀,也就是说不知道抛起后落下时正面向上的概率 输出逻辑回归的系数_线性回归_31 ,假设在一次实验中抛了10次硬币,得到的结果是 正反正正反正正正反反

对于上面的观测数据,虽然我们现在不知道 输出逻辑回归的系数_回归_41

输出逻辑回归的系数_线性回归_56

极大似然估计

极大似然估计是一种概率论在统计学的应用,它是参数估计(参数估计是通过若干次试验,观察其结果,利用结果推出参数值)的方法之一。极大似然建立在这样的思想上:已知某个参数能使这个观察结果出现的概率最大,就把这个参数作为估计的真实值。

把极大似然这个思想应用到上面抛硬币的例子上,可以估计出抛硬币正面向上的概率。下图是抛10次硬币观测结果似然函数的图像,从图像上可以看出当 输出逻辑回归的系数_人工智能_57



输出逻辑回归的系数_数据挖掘_58



理解了极大似然估计后,就可以回到正题上了。我们先来得到二分类逻辑回归的似然函数,设

输出逻辑回归的系数_回归_59

输出逻辑回归的系数_回归_60

所以这个事件发生的概率可以写成:
输出逻辑回归的系数_数据挖掘_61
等价于 输出逻辑回归的系数_人工智能_62 ,即对于一个样本,标签是 输出逻辑回归的系数_线性回归_63

则对于数据集 输出逻辑回归的系数_人工智能_64 {输出逻辑回归的系数_线性回归_65},似然函数可以写为:

输出逻辑回归的系数_回归_66

对式 输出逻辑回归的系数_输出逻辑回归的系数_67 取对数得到:
输出逻辑回归的系数_线性回归_68
输出逻辑回归的系数_人工智能_69

逻辑斯蒂回归模型也称为对数线性模型,模型的学习就是在给定的训练数据条件下对模型进行极大似然估计或正则化的极大似然估计。



逻辑回归算法应用

未完待续…