13.3 拟合非线性关系
问题描述
对一个非线性关系建模。
解决方案
在线性回归模型中纳入多项式特征,以创建多项式回归模型:


讨论
到目前为止,我们只讨论了对线性关系的建模。建筑物的楼层数和建筑物的高度就是线性关系的一个例子。在线性回归中,我们假设楼层数量和建筑物高度之间的关系大致是恒定的,也就是说20层楼的高度大约是10层楼的两倍,10层楼的高度大约是5层楼的两倍。但是有许多关系并不是严格线性的。
我们也会希望拟合一个非线性关系,比如学生学习的小时数与他的考试分数之间的关系。从直觉上,我们可以想象完全不学习的学生与学习1小时的学生考试分数存在很大差异。但是,对于学习99小时的学生和学习100小时的学生来说,他们之间的分数差异要小很多,1小时的学习时间对学生考试成绩的影响随着学习总时长的增加而减小。
多项式回归是线性回归的一种扩展,它使我们可以对非线性关系进行建模。要创建多项式回归模型,需要将13.1节中使用的线性函数:

转换成多项式函数,这可以通过加入多项式特征来实现:

其中d是多项式的维度。为什么可以将线性回归用于非线性函数?因为这里只是为模型添加了特征,并没有改变线性回归拟合模型的方式。也就是说,线性回归并不“知道”x²是x的二次变换,而是把它当作另一个变量来处理的。
下面对这一过程进行分步介绍。首先,为了建模非线性关系,我们可以将现有特征提升到某个幂次(平方项、三次方等)来创建新特征。模型添加的新特征越多,拟合的“线”就越灵活。为了进一步说明,这里假设需要创建一个最高到三阶的多项式。简单起见,我们只关注一个样本(数据集中的第一个样本)x₀:

为了创建多项式特征,将第一个样本的值提升到二阶(x1²):

这样就得到了一个新特征。然后将第一个样本的值提升到三阶(x1³):

将所有三个特征(x、x²和x³)包含在特征矩阵中,然后进行线性回归,这样就构造了一个多项式回归模型:

PolynomialFeatures有两个重要参数。第一个参数是degree,它确定多项式特征的最高阶数。例如,degree = 3将生成x²和x³。第二个参数是include_bias,默认情况下PolynomialFeatures包含一个全为1的特征(称为偏差,bias),可以通过设置include_bias = False来删除它。



本书评论