欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【人工智能算法】算法基础之线性回归

程序员文章站 2024-03-15 13:18:53
...

本文重点:

  • 线性回归
  • 广义线性模型 (Generalized Linear Model, GLM)
  • 链接函数(link function)

线性回归

线性回归的宗旨是构建一个相对比较简单的线性模型,将输入映射为输出。对x和Y两个变量,很容易写出它们对应的线性函数:Y=mx+b,m为斜率,b为截距。该函数之所以被称为“线性函数”,是因为其函数图像画出来就是一条直线。在同一个坐标系下,曲线代表的则是非线性函数。一个线性回归模型只对应一个变量即称“单变量的”。单变量回归模型一个常见的示例就是鞋码和身高的对应关系。这个回归模型接受一个人的身高作为输入,并计算其对应的鞋码作为输出;或者是将鞋码作为输入,而输出对应的身高数据。训练这样一个模型的工作量主要是要找到能够正确反映身高和鞋码之间关系的斜率和截距值。
不止一个输入的模型称为多变量的,多变量线性回归跟单变量的情况差不太多,唯一的区别在于每个输入都有一个对应的加法项。此外模型中还是有“截距”这个参数。比如: y = β 1 x 1 + β 2 x 2 + . . . + α y=β_1x_1+β_2x_2+...+α y=β1x1+β2x2+...+α

最小二乘法拟合

训练实际上就是寻找与训练集最为匹配的系数的过程,只要有系数的值,计算线性回归的输出值就很容易。要想使系数拟合全部的训练样本是不大可能的,但训练会使得模型对训练集中样本的误差尽可能小。
要使用最小二乘拟合,需要先构造两个矩阵,称为matrixX和matrixY,两个矩阵的行数都等于训练集的样本数。矩阵matrixX保存训练集的所有输入,因为矩阵中每个输入都附带一个常数1,便于计算截距,因此其列数等于输入个数加1。矩阵matrixY保存的则是训练集中的所有理想输出,对线性回归问题而言,输出一次只有一个,因此matrixY的列数总是1。
利用这两个矩阵,就可以拟合得到较好的线性回归系数了。这里我们要用到一种被称为“矩阵分解”的线性代数方法

最小二乘法拟合示例

先构建一个用最小二乘拟合法将摄氏温度转换为华氏温度的线性回归模型。首先有以下训练数据:

0->32
100->212

上述数据表明0摄氏度等于32华氏度,100摄氏度等于212华氏度,我们要计算出能够产生上述预期输出的线性模型对应的斜率和截距。
我们还必须要构造matrixX和matrixY。首先构造matrixX,如前所述,实际上就是在输入后面附加一个代表截距单位的常数1,构造结果如下:

[0.0,1.0]
[100.0,1.0]

然后构造由理想输出组成的matrixY:

[32.0]
[212.0]

下一步就是用QR分解来分解矩阵,可以选用语言自带的线性代数库或者GPU版的线性代数库。BLAS就是一个很常用的线性代数库,有个CUDA GPUs版本的BLAS被称为CUBLAS。在执行矩阵运算方面,GPU比CPU快多了。
我们根据matrixY,使用QR分解来分解matrixX,返回值就是与matrixX相乘可以得到结果matrixY的系数矩阵。尽管数据有两行,但系数却只有一组,这些系数对每行数据都可以得到最符合预期的结果。系数的运算结果是以下矩阵:

[1.8]
[32.0]

上述矩阵给出了斜率系数和截距,其中截距对应的是每个输入后面跟的常数1,如前所述即乘以常数1,因此将摄氏度转换为华氏度的线性模型如下:

f=(c*1.8)+32

安斯库姆四重奏

线性回归要求输入、输出之间的关系是线性的,但从数据点中强行拟合出一条直线是存在问题的。安斯库姆四重奏就是一个指出了线性回归问题所在的特殊数据集.
【人工智能算法】算法基础之线性回归
4个不同的数据集,4幅图中数据点相互之间的区别很明显,但这4个数据集都拟合出了同样的线性回归系数,经过数据点的直线即线性回归的结果。而这4个数据集的线性回归结果相同则说明线性回归的机制存在一定的缺陷。
左上角的那幅图将数据点间的关系拟合得相当好,但右上角的数据集并非线性的,下面两幅图则表现了模型中离群值的影响。所谓“离群值”,指的是一小部分与其他大部分数据点完全脱离了的数据点。

广义线性模型

广义线性模型的基础是上面讨论的线性回归模型,并使用链接函数进一步抽象广义线性模型的输出。广义线性模型可以使用的链接函数有很多种,并且由于广义线性模型的训练算法数学基础是微积分,因此链接函数必须要有导数。
广义线性模型的公式和线性回归很像,最大的不同在于广义线性模型多了一个链接函数。
【人工智能算法】算法基础之线性回归
本质上来讲,广义线性模型就是将线性回归的返回值传递给链接函数,链接函数即g( ),输入为x,输出为y,β的值构成系数,ε的值指示截距,就跟线性回归没有两样。唯一多出来的就是“链接函数”。
可选的不同链接函数有很多,最常见的一种就是逻辑函数。
逻辑函数有时也被称作sigmoid函数
【人工智能算法】算法基础之线性回归
逻辑函数能够放缩线性回归的输出,并且有几个特别重要的特性:

  • g(-Infinity) = 0;
  • g(Infinity) = 1;
  • g(0) = 1/2;
  • g(-x) = 1-g(x);
  • 若x>y,则g(x)>g(y),即单调递增。

逻辑函数的输出绝不会比0小,也绝不会比1大,因此0通常被映射为广义线性模型要预测的一个分类,1则映射为另一个分类。当x为0时,函数值为0.5,恰为(0, 1)中点。
Sigmoid函数也是单调的;所谓“单调”,指的是函数随自变量的增大,要么递增,要么递减;单调函数的变化方向不会反转。