多项式回归(Polynomial Regression)
区分一下多元回归与多项式回归的区别:
多元回归可以分为:多元线性回归和多元非线性回归,多元回归指的是:一个因变量(y)与多个自变量(,)之间的关系。其中若y与,之间关系是线性的,那么就叫做多元线性回归,可以用下面的公式表示多元线性回归:
其实,我们常说的线性回归通常都是这种形式。
那么如果y与,之间不是线性的,而是非线性的关系,这时应该怎么办?解决办法:将非线性变成线性关系
解决办法应该是:
(1)降低维度:可以利用PCA等方法降低自变量维度,舍弃一些因素后,再利用线性关系解决
(2)做一些变量变换将非线性的转成线性的,其中多项式回归就是其中一种
多项式回归模型:
即可以看作:
这样就可以转成多元线性回归:利用多元线性回归的方法解决
补充:(1)线性关系与非线性关系:线性关系指的是自变量与因变量之间关系可以用一条直线,即变量的一次方的形式表示出来;(2)线性相关与非线性相关:指的是自变量中每个因素之间的关系,数学定义如下:
向量,如果存在一组不全为零的数k1,k2,k3,使得 ,那么这三个向量是线性相关的。如果只有k1=k2=k3=0时,等式才成立,那么这三个向量就是线性无关的。
(3)线性不可分与线性可分:能否用一个平面或者直线将两类不同的点分隔开,如果能够分隔开则是线性可分的,反之为线性不可分。
简而言之,多项式回归是解决因变量与自变量之间的非线性关系的回归方法,通常做法是将非线性关系通过平方、幂指数等方式将非线性关系转成线性关系从而求解。所以多项式回归可以称作可化为线性回归的曲线回归,除了多项式型外,以下也是常见的转化方式。
(1)双曲线型:,令,则y=a+bt
(2)幂函数型:,两边取对数,,令,则
(3)指数型:,两边取对数,,令,则
(4)S型曲线:,令,,则
实现
利用sklearn中的PolynomialFeatures来构造多项式特征,再利用线性回归模型去做(sklearn中没有直接封装好的能用的多项式回归模型)
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
##构造数据集
x = np.linspace(-3,3,100) #产生100个0,1之间的随机数
X = x.reshape(-1,1)
y = x**3 + np.random.normal(0,0.5,size = 100)
####线性模型拟合#####
model = LinearRegression()
model.fit(X,y)
y_predict = model.predict(X)
#######多项式拟合#######
Polynomial = PolynomialFeatures(degree = 3,\
interaction_only=False,include_bias=False)
#interaction_only 默认值False
#include_bias 默认值 False
x_poly = Polynomial.fit_transform(X)
model.fit(x_poly,y)
y_poly_pre = model.predict(x_poly)
plt.scatter(X, y,color='blue',label='train_set')
plt.plot(X,y_predict,color = 'yellow',label='linear',linewidth = 4)
plt.plot(X,y_poly_pre,color = 'red',label='Polynomial',linewidth = 4)
plt.legend()
plt.show()
对比图:
其中PolynomialFeatures类详解可参考:https://blog.csdn.net/weixin_39175124/article/details/79475336