这一节我们介绍线性模型,介绍思路如下:我们先介绍概念,什么叫做线性模型?在了解了基本的线性模型之后,我们将其应用于 一元线性回归,之后扩展到 多元线性回归。之后我们再将其扩展到 广义线性模型。最后通过广义线性模型迁移到 logit
回归(分类问题)中。
线性模型基本概念
线性模型(Linear Model
)是在假设特征满足线性关系,给定一些数据,需要用这些数据训练一个模型,并用此模型进行预测。但这个模型是属性的线性组合,其函数形式为:
用向量表示的话,如下所示:
其中的w 和b 是我们需要学习的参数。一旦w ww和b bb确定下来,那么这个模型也就确定下来了。
一元线性回归
假定我们现在手头上有一些训练样本那么我们如何来找到一组参数w ww和b bb使得构建的线性模型能够很好地表示这组样本输入与输出之间的关系呢?
在开始建模之前,我们需要思考一个问题,什么叫做很好地表示?我们需要将这个好坏量化一下。通常我们以范数作为量化的标准。在这里表示的就是,对于真实的输入x 1 ,我的预测输出y p r e与真实输出y 1 之间的误差。在这里我们以均方差作为度量标准。
因此这个问题就转变为了,我们需要找一组参数w 和b,能够使得这些样本在当前模型下的均方误差最小,用数学形式表达如下所示:
基于均方差最小化来进行模型求解的方法称为最小二乘法(least square method)。在线性回归问题中,最小二乘法试图寻找到一条直线,使所有样本到直线的欧式距离之和最小。
求解最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation)。
由于E ( w , b ) 是关于w 和b 的凸函数,所以对其求偏导数,令其偏导数等于0,所求出来的解即为最优解。其偏导数求解如下所示:
多元线性回归
在一元回归问题中,样本只有一个属性。假设样本具有n nn个属性,此时期望找到一组模型参数w 和b ,使得使得函数输出f ( x i )与真实标签y i 越接近越好。我们将这类问题称为多元线性回归问题(multivariate linear regression),或者叫做多变量线性回归问题。
将标签以同样的方式写成向量的形式有令均方误差最小化,求其最优解:
与一元回归类似,令上式等于0
即可求解上述方程。通过观察不难发现,上式存在矩阵求逆的情况,对于为满秩矩阵(full-rank matrix
)或正定矩阵(positive definite matrix
)时,可求出:
不可逆情况
如果不可逆,那么此时可解出多个w ,他们都能使得均方误差最小化。选择哪一个解作为输出,将由算法的归纳偏好决定,常见的做法是引入正则化(regularization
)项。
广义线性模型
通常我们把线性回归模型简写为:
那我们能否将模型预测值逼近真实标签y yy的衍生物?例如将样本标签y yy的对数模型作为线性模型逼近的目标,即:
这就是对数线性回归(log-linear regression
),它实际上是在试图让逼近y。上式形式上是线性回归,但实际上已是在求输入空间到输出空间的非线性函数映射。
更一般的,考虑单调可微函数g ( ⋅ ),令:
这样得到的模型称为广义线性模型(generalized linear model
)。我们把函数g ( ⋅ ) g(·)g(⋅)称为联系函数。广义线性模型的参数估计通常通过加权最小二乘法或极大似然法进行。
线性模型之logit回归
如何用线性模型做分类?其实我们自需要找一个单调可微函数,将分类任务的真实标记y yy与线性回归模型的预测值联系起来。就可以达到这一点。你也许会想到单位阶跃函数,将连续值变换为离散量。但是单位阶跃函数不连续,因此希望找到一个函数来替代它。对数几率函数(logistic function
),是一种Sigmoid函数能做到这一点。其函数表达形式如下所示:
对其两边取倒数,再取对数化简,得如下变换形式:
如果将y yy看作样本x xx是正例的可能性,则1 − y 1-y1−y表示的就是负例的可能性。两者的比值表示的就是为正例的相对可能性,再将其取对数得到对数几率(logit)。
上式用线性回归模型的预测结果去逼近真实标记的对数几率,因此,对应的模型称为对数几率回归。但实际上它是一种分类学习方法。在其他地方你可能会听到逻辑回归,但周志华教授觉得中文“逻辑”与“logistic”和logit的含义想去甚远,称其为“对数几率回归”简称“对率回归”。具有如下优点:
- 无需像贝叶斯那样假设数据分布,直接对分类可能性进行建模,避免假设不准带来的偏差。
- 得到的是一个概率,比单纯的正例或者反例所含的信息量要大。
- 对率回归求解的目标函数是任意阶可导的凸函数,具有很好的性质,现有的许多数值优化算法都可以直接用于求解。
利用Logistic 回归进行分类的主要思想是:根据现有数据对分类边界线建立回归公式,以此进行分类。这里的 “回归”一词源于佳拟合,表示要找到佳拟合参数集。
极大似然求解logit回归参数
在这一小节,用最大似然法求解logit回归参数w ww和b bb。极大似然法可在公众号历史文章贝叶斯这节找到。
将样本x 是正例的可能性y 看作类后验概率估计p ( y = 1 ∣ x ) ,则对数几率回归可表示为:
上式是关于β \betaβ的高阶可导连续凸函数,可使用牛顿法(凸优化中的内容)对其求解。更加详细的推导可参考周志华的西瓜书对数几率回归。
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
正则表达式。你可能关注到左侧式子相比线性回归,多了一个1 2 n \frac{1}{2 n}2n1,其中n nn是样本数量,在优化过程的运算中不会发生变化,是一个常量,并不会对权重w ww的调整产生影响。
# 导入线性模型中的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)) ## 使用模型自带性能评估器
参考
- 周志华 《机器学习》
- 机器学习算法的数学解析与Python实现
我的微信公众号名称:深度学习与先进智能决策
微信公众号ID:MultiAgent1024
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!