多项式回归
目的
多项式回归不再用直线拟合,而是使用曲线或曲面,我们要找的函数变成了
h
(
x
)
=
θ
0
+
θ
1
x
+
θ
2
x
2
+
…
θ
n
x
n
h(x) = \theta_0+\theta_1x+\theta_2x^2+…\theta_nx^n
h(x)=θ0+θ1x+θ2x2+…θnxn
还是要找到这些系数。
办法
其实跟多元线性回归一模一样,把
x
n
x^n
xn看成是
x
n
x_n
xn就完事儿了,跟多元线性回归毫无区别,忘了就去看看多元线性回归那篇.
如果是多元的多项式回归,同样可以转化为多元的线性回归,道理一样。把非线性的项看成一个新的特征即可,多加几列而已。
一元多项式回归实现
# encoding:utf-8
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
# 载入数据
data = np.genfromtxt("../data/job.csv", delimiter=',')
x_data = data[1:, 1, np.newaxis]
y_data = data[1:, 2, np.newaxis]
# 定义多项式回归
poly_reg = PolynomialFeatures(degree=4) # degree代表多项式最高次数
# 特征处理
x_poly = poly_reg.fit_transform(x_data)
# 定义回归模型
lin_reg = LinearRegression()
lin_reg.fit(x_poly, y_data)
# 画图
plt.plot(x_data, y_data, 'g.')
# 把点搞得多一点,这样曲线看起来平滑一点
x_test = np.linspace(1, 10, 100)[:, np.newaxis]
plt.plot(x_test, lin_reg.predict(poly_reg.fit_transform(x_test)), c='brown')
plt.show()