《机器学习:算法视角(原书第2版)》 —3.5 线性回归

举报
华章计算机 发表于 2019/12/21 15:17:35 2019/12/21
【摘要】 本节书摘来自华章计算机《机器学习:算法视角(原书第2版)》 一书中第3章,第3.5.1节,作者是[新西兰] 史蒂芬·马斯兰(Stephen Marsland),高 阳 商 琳 等译。

3.5 线性回归

就像在统计学中常见的一样,我们需要把回归问题和分类问题区分开。回归问题就是用一条线去拟合数据;而分类问题是寻找一条线,使它能够划分不同的类别。然而,通常我们会把分类问题转化为回归问题。这可以用两种方法来实现,第一种方法是引入一个指示变量(indicator variable),它简单地标示每一个数据点所属的类别。现在,问题变成了用数据去预测(predict)指示变量,这是一个回归问题。第二种方法是进行重复的回归,每一次对其中的一个类别,指示值为1代表样本属于该类别,0代表属于其他类别。既然通过这些方法能够将分类问题替换为回归问题,这里我们将考虑回归问题。

image.png

 图3-13 二维、三维空间内的线性回归感知器和更多基于统计学的方法之间唯一真正的区别在于提出问题的方式不同。对于回归问题,我们通过计算已知值xi的函数,对一个未知的值y进行预测(如类别的指示变量,或是某些数据未来的值)。现在我们考虑的是直线,因此输出值y将是xi的一种和的形式,每一个xi乘上一个常量参数,即y=∑Mi=0βixi。βi定义了一条穿过数据点(或者至少是接近)的直线(三维空间中是平面,更高维度的空间中是超平面)。图3-13给出了在二维和三维空间中的例子。

image.png

问题在于我们如何界定这条直线(更高维度的空间中为平面或超平面),使之能够最好地拟合(fit)数据。最常见的解决方法是尽量使每个数据点与我们拟合的直线之间的距离最小。我们可以测量点到一条直线的距离,只要再定义一条直线,使它能够穿过该点并且与原来的直线相交即可。学校里学过的几何知识告诉我们,当第二条直线与第一条直线相交且夹角为直角时,第二条直线是最短的,然后我们通过勾股定理来得到这个距离。现在,我们可以尽量最小化一个测量所有这些距离的和的误差函数。如果忽略掉平方根,仅仅最小化这些误差的平方和,将会得到一种最常见的最小化方法,称为最小二乘优化(least-squares optimisation)。现在我们所做的,就是选择这样的参数,使之能够最小化在所有点上预测值与实际值的差的平方和。即:∑Nj=0tj-∑Mi=0βixij2(3.21)这可以写成矩阵的形式:(t-Xβ)T(t-Xβ)(3.22)其中,t是目标值,X是输入值的矩阵(包含偏置输入),就像在感知器中一样。计算上式的最小值需要我们对它关于参数向量β求导,并且把导数设为0(展开括号项,由于ABT=BTA,因此βTXtt=tTXβ),这样有XT(t-Xβ),得到解β=(XTX)-1XTt(假设矩阵XTX可逆)。现在,给定一个输入向量z,它的预测值就为zβ。矩阵X的逆是满足XX-1=I的矩阵,这里的I是单位矩阵,即主对角线上的元素都为1并且其他位置的元素都为0的矩阵。只有当一个矩阵是方阵(行的数量和列的数量相同)并且其行列式的值不为0的时候,才存在逆矩阵。

在Python里,计算矩阵的逆是很容易的,使用NumPy中的np.linalg.inv函数即可。实际上,整个函数可以写成如下形式(这里符号是指换行):

 image.png

3.5.1 示例

在逻辑OR函数上使用线性回归的方法看上去是一件很奇怪的事,因为我们在用一个专门为回归问题设计的方法来解决分类问题。然而,我们可以这样做,并且会得到如下结果:

 image.png

也许不是很清楚这些数字代表的含义,但是如果我们为输出设置这样一个阈值,使得小于0.5的值都变为0,大于0.5的值都变为1,就能够得到正确的结果。如果用在XOR函数上,我们会发现这仍然是一种线性方法:

 image.png

测试线性回归的一种更好的方法就是去寻找一个真正的回归数据集。在这里,UCI数据库同样有用。我们将要研究的是auto-mpg数据集,它包含关于汽车的一系列数据点(重量、马力等),目标是预测每加仑的燃油效率,以英里为单位。这个数据集存在一个问题,里面有一些缺失的值(以问号“?”标记)。np.loadtxt()方法无法处理这些值,而且我们也不知道如何去应对。所以,下载完数据集之后,我们只能手动编辑文件,把包含有“?”的行全部删除。汽车的名字对线性回归也不会有什么帮助,但是因为它们在引号中出现,所以可以在np.loadtxt中把它们注明为注释,使用:

 image.png

现在你需要把数据分为训练集和测试集两个部分,然后运用训练集来求出β,再使用它来得到测试集上的预测值。然而,混淆矩阵在这里没有多大用处,因为不存在能够让我们来对结果进行分析的类别。取而代之的是平方和误差,它计算预测值与真实值的差,对差求平方使之都为正数,然后再相加,与我们在线性回归的定义中使用过的一样。显然,如果这个值较小,说明所得的结果较好。可以使用如下方法来计算:

 image.png

现在你可以试验对数据归一化是否有所帮助,并且进行特征选择,就像我们在感知器里做过的一样。另外还有其他更高级的线性统计学方法。其中之一是线性判别分析,将在我们有了所需的更深的理解之后,在10.1节中介绍。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。