文章目录
- 线性模型基本概念
- 一元线性回归
- 多元线性回归
- X T X X^{T}X XTX可逆
- X T X X^{T}X XTX不可逆情况
- 广义线性模型
- 线性模型之logit回归
- 极大似然求解logit回归参数
- Python中使用Logistic回归算法
- 参考
这一节我们介绍线性模型,介绍思路如下:我们先介绍概念,什么叫做线性模型?在了解了基本的线性模型之后,我们将其应用于
一元线性回归,之后扩展到
多元线性回归。之后我们再将其扩展到
广义线性模型。最后通过广义线性模型迁移到
logit
回归(分类问题)中。
线性模型基本概念
线性模型(Linear Model
)是在假设特征满足线性关系,给定一些数据,需要用这些数据训练一个模型,并用此模型进行预测。但这个模型是属性的线性组合,其函数形式为:
用向量表示的话,如下所示:
和是我们需要学习的参数。一旦和确定下来,那么这个模型也就确定下来了。
一元线性回归
,,,。那么我们如何来找到一组参数和使得构建的线性模型能够很好地表示这组样本输入与输出之间的关系呢?
在开始建模之前,我们需要思考一个问题,什么叫做很好地表示?我们需要将这个好坏量化一下。通常我们以范数作为量化的标准。在这里表示的就是,对于真实的输入,我的预测输出与真实输出之间的误差。在这里我们以均方差作为度量标准。
和,能够使得这些样本在当前模型下的均方误差最小,用数学形式表达如下所示:
表示和的解。
基于均方差最小化来进行模型求解的方法称为最小二乘法(least square method
)。在线性回归问题中,最小二乘法试图寻找到一条直线,使所有样本到直线的欧式距离之和最小。
和使最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation
)。
是关于和的凸函数,所以对其求偏导数,令其偏导数等于0
,所求出来的解即为最优解。其偏导数求解如下所示:
再令其偏导数为0
,可得到和最优解的闭式(closed-from
)解:
为的均值。
至此,求解完毕。
多元线性回归
个属性,此时期望找到一组模型参数和,使得,使得函数输出与真实标签越接近越好。我们将这类问题称为多元线性回归问题(multivariate linear regression
),或者叫做多变量线性回归问题。
和组合称为一个向量的形式。与之对应,样本集可表示为一个大小的矩阵。那么每一行都对应一个样本。每一行的前个元素都表示为当前这个样本的个属性值。最后这个元素恒为1,是方便与参数中的相乘,形成偏置项。样本输入的数学表达形式可表示为如下形式:
,令均方误差最小化,求其最优解:
,对求偏导得到如下方程:
可逆
与一元回归类似,令上式等于0
即可求解上述方程。通过观察不难发现,上式存在矩阵求逆的情况,对于为满秩矩阵(full-rank matrix
)或正定矩阵(positive definite matrix
)时,可求出:
,则最终的线性回归模型可表示为:
不可逆情况
不可逆,那么此时可解出多个,他们都能使得均方误差最小化。选择哪一个解作为输出,将由算法的归纳偏好决定,常见的做法是引入正则化(regularization
)项。
广义线性模型
通常我们把线性回归模型简写为:
的衍生物?例如将样本标签的对数模型作为线性模型逼近的目标,即:
这就是对数线性回归(log-linear regression
),它实际上是在试图让逼近。上式形式上是线性回归,但实际上已是在求输入空间到输出空间的非线性函数映射。
,令:
这样得到的模型称为广义线性模型(generalized linear model
)。我们把函数称为联系函数。广义线性模型的参数估计通常通过加权最小二乘法或极大似然法进行。
线性模型之logit回归
与线性回归模型的预测值联系起来。就可以达到这一点。你也许会想到单位阶跃函数,将连续值变换为离散量。但是单位阶跃函数不连续,因此希望找到一个函数来替代它。对数几率函数(logistic function
),是一种Sigmoid函数能做到这一点。其函数表达形式如下所示:
对其两边取倒数,再取对数化简,得如下变换形式:
看作样本是正例的可能性,则表示的就是负例的可能性。两者的比值表示的就是为正例的相对可能性,再将其取对数得到对数几率(logit)。
上式用线性回归模型的预测结果去逼近真实标记的对数几率,因此,对应的模型称为对数几率回归。但实际上它是一种分类学习方法。在其他地方你可能会听到逻辑回归,但周志华教授觉得中文“逻辑”与“logistic”和logit的含义想去甚远,称其为“对数几率回归”简称“对率回归”。具有如下优点:
- 无需像贝叶斯那样假设数据分布,直接对分类可能性进行建模,避免假设不准带来的偏差。
- 得到的是一个概率,比单纯的正例或者反例所含的信息量要大。
- 对率回归求解的目标函数是任意阶可导的凸函数,具有很好的性质,现有的许多数值优化算法都可以直接用于求解。
利用Logistic 回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的 “回归”一词源于佳拟合,表示要找到佳拟合参数集。
极大似然求解logit回归参数
和。极大似然法可在公众号历史文章贝叶斯这节找到。
是正例的可能性看作类后验概率估计,则对数几率回归可表示为:
有:
,对率回归模型最大化“对数似然”(log-likehood):
,,则可得到的简写。
,则似然项可写为:
等价于最小化:
的高阶可导连续凸函数,可使用牛顿法(凸优化中的内容)对其求解。更加详细的推导可参考周志华的西瓜书对数几率回归。
Python中使用Logistic回归算法
在Scikit-Learn
机器学习库中,线性模型算法族都在linear_model
类库下,当前版本一共有39
个类,是Scikit-Learn
机器学习库中最庞大的模型算法族类库之一。典型的有如下几个:
-
LinearRegression
类
对应线性回归算法,也称为普通最小二乘法(Ordinary Least Square, OLS
),用于预测回归问题,其损失函数的数学表达式如下:
LinearRegression
会调用fit方法来拟合数组X
、y
,并且将线性模型的系数存储在其成员变量coef_
中。
-
Ridge
类
对应Ridge
回归算法,又称为岭回归,用于预测回归问题,是在线性回归的基础上添加了L2
正则项,使得权重weight
的分布更为平均,其损失函数的数学表达式如下:
其中a
是一个常数,根据经验设置。
-
Lasso
类
对应Lasso
回归算法。我们知道,常用的正则项有L1
和L2
,用了L2
正则项的线性回归是Ridge
回归,用了L1
正则项的线性回归是Lasso
回归,同样是用于预测回归问题。其随时函数的数学表达式如下:
表达式的左侧与Ridge
回归算法的损失函数基本一致,只是将右侧的L2
正则表达式替换成了L1
正则表达式。你可能关注到左侧式子相比线性回归,多了一个,其中是样本数量,在优化过程的运算中不会发生变化,是一个常量,并不会对权重的调整产生影响。
# 导入线性模型中的Logistic回归算法
from sklearn.linear_model import LogisticRegression
# 导入鸢尾花分类数据集
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
# 训练模型
clf = LogisticRegression().fit(X, y)
print(clf.predict(X)) ## 使用模型进行分类预测
print(clf.score(X,y)) ## 使用模型自带性能评估器