概述
线性回归是机器学习的最基本算法,本文向读者介绍了线性回归的原理和使用,以及如何通过Java语言编写线性回归的模型代码。并且以水泥质量预测为例构造出一个水泥质量预测模型。还通过线性回归介绍了机器学习的基本概念,如回归、最小二乘法和梯度下降等。本文可以作为机器学习甚至是深度学习的入门文章。
要解决的问题
本文将使用一批水泥成分的样本数据(附件中的 ConcreteTable.csv 文件),让程序学习这些样本数据,来得到一个较好的水泥质量预测模型。下面的表 1 中 摘取了一小部分这些水泥样本数据:
表1. 部分水泥样本数据
表 1 中 ,每行是一个样本,1-7 列是每立方米混合物中各个成分的重量(单位:千克),第 8 列是已使用天数,第 9 列 是该行水泥样本的强度(单位:MPa)。前 8 列 是水泥的输入属性,最后 1 列是输出,我们要让机器学习这些样本后得到一个模型,这个模型可以输入样本表格之外的数据,预测出水泥的强度。一般这个模型会对应一个公式,可以通过机器学习中很多算法实现,如线性回归,神经网络等,由于这个问题相对较为简单,所以我们通过最基本的线性回归算法来实现,后续文章中会介绍通过神经网络等算法来解决稍微复杂的问题。
线性回归模型
线性回归简介
首先我们简单介绍下线性回归(Linear Regression),线性回归是假设特证属性之间满足线性关系,利用数理统计中回归分析,即根据给定的样本数据训练,来确定两种或两种以上特征属性与输出属性之间的相互依赖关系并得出一个线性模型的分析方法。
如图 1 所示,以平面点为例,如果有 N 个样本点,线性回归算法就是求一条曲线 y =h(x)。使得各点到这个曲线的距离的绝对值之和最小。
图 1. 平面线性回归
具体方法可以用迭代实现,设曲线为 y=ax+b,即一条直线, a 和 b 是我们要求得参数,则步骤如下:
先分别给 a 和 b一 个初始的参数(比如 1 )对所有样本进行计算得到 N 个 计算出的 y 值 ,计算出的 y 值 与样本中真实 y 值 之差的绝对值就得到误差(也称为损失)。然后想办法重新调整 a 和 b 参数,再循环上面步骤,得到一个新的更小一些的误差,如此循环使误差越来越小,直到误差收敛为一个基本固定的值为止,这时候得到最终的 a 和 b 的 参数,带入模型公式 y =ax+b,这个公式就可以近似的模拟输入样本之外的新数据,得到近似的结果。如下面图 2 所 示就是这个迭代的过程,随着迭代的进行,生成的曲线与样本点的距离越来越近:
图 2. 线性回归迭代过程
在平面例子中只有一个自变量 x ,更普遍的情况是有多个自变量即多个特征,假设有 n 个 特征,则线性回归的公式可表示为:
这里包括多个自变量 x 和 一个因变量 y ,b 是偏移量,也称为 0 参数,且因变量和自变量之间是线性关系,这种多个自变量和因变量的关系的分析称为多元线性回归分析。现实中有很多这样的分析例子,如房屋的面积,房间数等自变量和房价的关系等,都是线性回归的例子。
公式中如果设定 n 等于 8 ,则 8 个自变量 x 就对应水泥混合物表 1 中 的 8 个水泥特征值,如水泥含量,矿渣含量,煤灰含和凝固时间量等,水泥强度就是因变量 y ,θ 是每个特征值的权重参数,即每个特征对水泥强度质量的重要程度。我们的目标就是要求所有 θ 参数和 b 参 数的值,然后代入到线性回归公式中,来预测样本之外的水泥配料数据对应的水泥强度。
接下来,将线性回归的公式稍微整理一下,将偏移量 b 合 并到参数 θ 中用
表示,并且多加一个对应的因变量 >
恒等于 1 ),将自变量 x 与参数 θ 用向量来表示,即:
则线性回归公式可用向量表示为:
通常将
称为假设函数 (Hypothetical Function),那么我们现在就是要求解一组 θ ,求解的过程也称为寻找最优参数 θ ,如何求解呢?方法有很多,这里我们使用最常用也是最经典的最小二乘法。
最小二乘法
前面提到过,通过迭代,计算所有样本数据的 y 值再与真实 y 值求差,最后取其绝对值,得到的就是误差,要让这个误差尽量最小,最小二乘法(Least Squares)就是基于这个思想的方法,先看其公式:
上式中 m 是样本总数量,
是计算出的 y 值 ,