多项式回归

1. 概述

多项式回归,回归函数是回归变量多项式的回归。多项式回归模型是线性回归模型的一种,此时回归函数关于回归系数是线性的 ——百度百科

使用多项式回归可以使回归模型拟合的更好

如有一元多项式:y=w0+w1x+w2x**2w3x**3+...+wdx**d
w0、w1、……、wd为多个参数项
此时可以将高次项看作对一次项的扩展 转换为多元线性函数
	即:
	y=w0+w1x1+w2x2+w3x3+...+wdxd  (复合函数)
	x1 = x
	x2 = x**2
	……
所以多项式回归可以看作是多元线性回归,按照类似一元线性回归的处理获取到最佳的模型参数w0、w1、……组合

2. 一元多项式回归模型

一元多项式回归的步骤:
    a、将一元多项式回归转换为多元线性回归(给出最高次即可);
    b、将得到的多元线性回归中的w0、w1...作为样本特征,在LinearRegression模型中进行训练
对应代码:
	import sklearn.pipeline as pl
    import sklearn.preprocessing as sp
    import sklearn.linear_model as lm
	model = pl.make_pipeline(  # pl为sklearn的数据管线 作用:实现两个步骤顺序执行
                sp.polynomialFeatures(最高次幂), # 多项式特征扩展,将一元多项式转换为多元线性方程
                lm.LinearRegression() # 多元线性回归模型训练
                )

代码示例:

import sklearn.pipeline as pl
import sklearn.preprocessing as sp
import sklearn.linear_model as lm
import numpy as np
import sklearn.metrics as sm
import matplotlib.pyplot as plt

tx = np.array(
    [0.5, 0.6, 0.8, 1.1, 1.4, 1.6, 1.7, 2.0, 2.5, 2.6, 3.0, 3.1, 3.3, 3.6, 3.8, 3.9, 4.0, 4.1, 4.2])
ty = np.array(
    [5.0, 5.5, 6.0, 6.8, 7.0, 11, 8.4, 9.0, 9.2, 10.5, 11, 11.1, 12.0, 13.3, 13.4, 15.7, 16, 14.8, 14.9])
tx_arr = tx.reshape(-1, 1)
# 多项式模型训练
model = pl.make_pipeline(sp.PolynomialFeatures(10), lm.LinearRegression())
model.fit(tx_arr, ty)
# 测试
res = model.predict(tx_arr)
# 训练集评分
print(sm.r2_score(ty, res))

# 画图
plt.figure('polynomial regression', facecolor='lightgray')
plt.title('polynomial regression', fontsize=18)
plt.grid(linestyle=':')
plt.scatter(tx, ty, s=80, color='dodgerblue', label='simple points')
plt.plot(tx, res, color='orangered', label='LR')
plt.legend()
plt.show()

在这里插入图片描述
由上图可以看出得到的拟合模型是一条没有规律的曲线,随着sp.PolynomialFeatures()中最高次幂的增大,拟合度会随之增加,但是达到一定的拟合度后,模型预测结果偏差会出现逐渐增大的现象,即过拟合现象

相关概念:
	欠拟合:过于简单的模型,无论是训练数据还是测试数据都无法给出足够精度的现象;
	过拟合:过于复杂的模型,对于训练数据具有很高的精度,但对于测试数据通常精度很低的现象;

所以多项式拟合需要根据实际情况对模型进行调整、测试

总结

前面提到的线性回归模型、岭回归模型、多项式回归模型都属于基于模型的机器学习的模型;后边会提到基于实例的机器学习的模型:决策树、正向激励、随机森林

更多推荐