为了帮助读者认识更多的机器学习模型,更快地入门机器学习,本节将介绍一些简单的机器学习模型。这些模型虽然使用简单,但是在许多具体的实际问题中经常使用。另外,这些模型也经常用作复杂模型的子模型或进行数据预处理等。
很多时候,特征与目标之间并不存在线性关系,或者线性关系微弱。这个时候就需要用到非线性回归。一元非线性回归模型是指:输入只有一个特征,用于解决回归问题且表达式不是线性函数的模型。常见的一元非线性回归模型如表2.7所示。
表2.7 常见的一元非线性回归模型及其表达式
对于以上模型的训练,均可以使用最小二乘法来训练模型。如果模型参数不存在解析解,则应用数值逼近的方法求取模型的参数。
利用MATLAB工具箱cftool可以便捷地进行一元线性和非线性回归,并进行模型评价,下面以一个例子讲解cftool的使用方法。
例:面团在发酵时,由于酵母的无氧呼吸产生二氧化碳,从而导致面团体积膨胀,如表2.8所示为面团体积与发酵时间数据,请拟合出面团体积与发酵时间的回归曲线。
表2.8 面团体积与发酵时间
注: 本节主要展示cftool工具的应用,因此本节并不打算将数据分为测试集和训练集,请读者自行尝试划分。
先将数据输入MATLAB中:
打开cftool工具箱后,会弹出如图2.11所示的窗口。
单击Data导入数据,将变量 x 、 y 导入cftool中,如图2.12所示。
图2.11 导入数据集
图2.12 创建数据集并命名
创建完数据集后,单击Close按钮返回到初始界面,单击Fitting按钮创建新拟合,如图2.13所示。
命名并设置新拟合,并使用一元三次模型进行回归分析,如图2.14所示。
图2.13 创建新拟合
图2.14 选择拟合模型
选择好模型后,单击Apply按钮,模型的参数及拟合优度会在Results窗口中显示。
从Coefficients项中可以看到模型的参数,括号内为区间估计,其属于统计学的范畴,可以忽略。于是得到面团体积与发酵时间的回归曲线如下:
y =0.003664 x 3 −0.1354 x 2 +1.649 x +104
从Goodness of fit(拟合优度)项中,可以得到模型在数据集中的SSE、RMSE、 R 方与调整 R 方。从 R 方中可以看出,该模型的拟合效果比较优越。另外,cftool工具还可以可视化拟合曲线,如图2.15所示。
再次声明,在机器学习中为了评估模型效果,必须将数据分为两部分。该例为突出重点而省略了这一步,这是不对的。请读者仔细观察图2.15,曲线的末端有所上翘。耐人寻味的一点是,体积能够随时间推移无限增大吗?结合实际情况,发酵时间超过一定限度,体积总会达到饱和。因此,该模型实际上并不准确。因此,划分数据集的作用不言而喻。
图2.15 拟合效果可视化窗口
Tips: 在使用cftool工具进行曲线拟合时,导入的数据可能存在离群点或异常点。这个时候可以选择在MATLAB环境中对数据进行预处理,即选择性地删除异常数据点。另外,也可以直接将数据导入cftool中。然后在图2.13中单击Exclude按钮,根据条件设置自动过滤选项。继续执行到图2.14这一步,在Exclusion rule下拉列表框中选择设置好的自动过滤器即可。
KNN算法属于典型的拙算法(dummy algorithm),它不需要求解优化问题,只需要存储训练集的信息即可完成模型训练。因此,KNN算法也属于非参数模型(见2.2.2节)。
存储所有训练集的信息,并选取一个整数 k 就可以构成KNN模型。在使用模型时,首先输入未知个体,然后按照某种距离度量(如欧氏距离),找到训练集中离未知个体最近的 k 个近邻个体,依照这 k 个近邻点估算未知个体的因变量 y 。
假设输入有两个特征,令 k =3,测试个体用三角表示,为了判断、预估测试数据的 y 值,首先在输入数据周围找到3个近邻点,如图2.16所示。
图2.16 k =3,二特征KNN算法示意
根据问题类型进行相应的操作:
如果问题为回归问题,则将这
k
个近邻点的输出平均值作为未知个体的输出。
如果问题为分类问题,则将这
k
个近邻点按“投票”的方式输出未知个体的类别。
以下为一个应用KNN算法解决分类问题的有趣案例,请读者仔细阅读。
例:假设两军对垒,红方用三角形表示,记为1;蓝方用正方形表示,记为0。已知两军各军团的位置坐标如表2.9所示,现有一未知军团的坐标为(58,41),求该军团属于哪个阵营?图2.17中的圆点为未知军团。
表2.9 各军团的位置及所属阵营
图2.17 各军团的位置(圆点为所求军团)
注: 为了解释KNN算法,这里忽略了数据集的划分和模型评价。
通过分析可知,本例的问题为分类问题。依照“物以类聚”的思想,求解该未知军团的所属阵营可以依据周围军团的所属阵营判断。因此可以考虑使用KNN算法,令 k =3,两个军团之间的“距离”用欧氏距离表示:
依照上式,找出未知军团与其他军团的3个最近“距离”为:
dist=(445,857,1345)
它们对应的阵营分别是:0,0,1。根据投票原则,未知军团应属于0阵营(正方形)管辖。
Tips: 从上述实例中可以看出,如果 k =2则投票结果可能为一比一,从而无法判断个体的所属类别。因此,对于KNN算法, k 必须取为奇数。另外,聪明的读者可能发现, k 的取值不同,所得的结果未必一样。在实际应用中,KNN算法与线性回归一样,都需要用测试集来评价其拟合的好坏。因此,通常是先遍历多个 k ,之后测试模型在测试集中的拟合优度,最后找出拟合效果最佳时 k 的取值。