解释:同一个变量还有其它 ,叫做多项式。

线性回归

定义:从二维空间的角度看,说白了就是直线,从高维空间看,多变量看作一个向量,y值也是一条直线
优点:简单
缺点:不通用,现实生活中,一般不是线性关系
image.png

多项式回归

定义:从二维空间的角度看,说白了就是非线性
优点:通用,现实生活中,一般不是线性关系

举例理解:
如下图,

  • 01 什么是多项式回归 - 图2 理解成一个特征,理解成另一个特征,01 什么是多项式回归 - 图3 依然是线性方程;
  • 但是从 01 什么是多项式回归 - 图4 的角度看,是一个非线性的方程。

image.png

编码

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. # 准备数据
  4. x = np.random.uniform(-3, 3, size=100)
  5. X = x.reshape(-1, 1)
  6. y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, 100) # 加入正太分布噪音
  7. # 可视化
  8. plt.scatter(x, y)
  9. plt.show()

image.png

线性回归

  1. from sklearn.linear_model import LinearRegression
  2. # 建模
  3. lin_reg = LinearRegression()
  4. lin_reg.fit(X, y)
  5. y_predict = lin_reg.predict(X)
  6. # 模型可视化
  7. plt.scatter(x, y)
  8. plt.plot(x, y_predict, color='r')
  9. plt.show()

image.png

多项式回归

解决方案:转换为多元线性回归问题 ( 添加一个特征 :将另一个项作为一个特征)。
这里为了方便可视化,将另一个特征关联上第一个特征,公式里本质就是一个特征了。

  1. X2 = np.hstack([X, X**2]) # 两个特征: X、 X**2,这里的顺序和coef_顺序一致
  2. X2.shape # (100, 2)
  3. lin_reg2 = LinearRegression()
  4. lin_reg2.fit(X2, y)
  5. # lin_reg.coef_ # array([1.04523674, 0.49115908]) # 由于噪音数据的存在,只能接近系数 1 和 0.5
  6. # lin_reg.intercept_ # 2.1464077470150507
  7. y_predict2 = lin_reg2.predict(X2)
  8. plt.scatter(x, y)
  9. plt.plot(np.sort(x), y_predict2[np.argsort(x)], color='r') # 对x排序,画的曲线才是正常的
  10. plt.show()

image.png