机器学习

线性回归

一、回归问题的定义

回归是监督学习的一个重要问题,回归用于预测输入变量和输出变量之间的关系。回归模型是表示输入变量到输出变量之间映射的函数。回归问题的学习等价于函数拟合:使用一条函数曲线使其很好的拟合已知函数且很好的预测未知数据。
回归问题分为模型的学习和预测两个过程。基于给定的训练数据集构建一个模型,根据新的输入数据预测相应的输出。
回归问题按照输入变量的个数可以分为一元回归和多元回归;按照输入变量和输出变量之间关系的类型,可以分为线性回归和非线性回归。但一般来说,非线性回归问题是从线性回归问题上扩展而来的,所以我们重点讲解线性回归问题。

二、线性回归

这里使用sklearn中的鸢尾花数据集进行示例:

import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
irs = pd.DataFrame(iris.data, columns=iris.feature_names)

数据集示例如下:
irs
接下来我们主要探究花瓣长度(petal length)和花瓣宽度(petal width)这两个属性之间的关系,我们首先将其可视化一下:
irs.png
可以看出两个变量之间大致呈现一种线性关系,那么我们就可以提出假设(设x为花瓣长度,y为花瓣宽度):
接下来我们可以将其表示为向量形式,首先x的向量形式为:,我们为矩阵添加一个全为1的列向量:
然后我们定义一个向量:,这样上述公式就可以表示为:
下面我们就可以使用数据集来计算了。

三、成本函数

既然要计算,我们首先要确定一个评价标准,不然我们可以任意取一个值说这个就是最优值。那么怎么说要优于呢?我们一般都要定义一个函数,这个用于表示的优劣程度的函数称为成本函数(cost function)。
首先我们随机取一个值,然后利用这这个参数可以得出一个预测向量,那么我们可以自然地想到可以使用预测值与真实值差的平方和(平方误差)的大小来衡量预测的效果,这个值越小,预测值就越贴近真实值,预测效果就越好。
考虑到不同数据集的大小不同,我们再除以样本的大小m(均方误差):
(这里除以2是为了之后运算简便)
既然上述函数可以表示不同下的模型的预测效果,那么我们就可以使用这个函数来衡量的好坏。最好的应当对应于最小的误差值,那么我们下一步的目标就明确了,找出使最下的值。
为了实现这一过程,可以使用一些优化算法:梯度下降、牛顿法等。上述算法已有专门文章讨论,这里就不再赘述,请自行点击链接查看。

四、向量公式

在线性回归中使用梯度下降等优化算法,一般需要进行多次迭代,在机器学习中有一种更为常用的方法来避免显式的循环,即使用向量公式。
利用矩阵的迹运算,我们可以求出
令上式等于0可得(因为是实数,所以也可以写成)。
利用上式可以直接得出更新之后的的值。
根据这个方法我们可以直接求出鸢尾花的花瓣长与宽之间的拟合结果为(注这里的数据因为矩阵求逆需要非奇异矩阵的问题,所以根据花瓣长度进行了去重处理。这也反应了向量公式的一个局限性,当特征数较少时,容易出现奇异矩阵无法应用):
y=x
值得注意的是,使用向量公式求解线性回归问题,样本量不大的情况下是个好方法,但却并不具有可行性,因为这个公式一次将所有的数据投入运算,而在实际中我们的样本可能非常大,无法一次投入运算。