多项式回归
在前面我们已经掌握了曲线拟合的一种方法——分段线性化。把无数条直线串在一起,每一条直线拟合曲线的一部分,这样就近似的拟合了整条曲线。可是这也增加了需要优化的参数个数,也使一条光滑的曲线分裂成小的直线,这显然是我们不希望见到的。那么还有别的方法吗,多项式回归就可以对非线性函数进行拟合。
多项式回归问题可以通过变量转换化为多元线性回归问题来解决。
下面我们给出一个二元二次方程:
y
^
(
w
,
x
)
=
w
0
+
w
1
x
1
+
w
2
x
2
+
w
3
x
1
x
2
+
w
4
x
1
2
+
w
5
x
2
2
\hat{y}(w, x) = w_0 + w_1 x_1 + w_2 x_2 + w_3 x_1 x_2 + w_4 x_1^2 + w_5 x_2^2
y^(w,x)=w0+w1x1+w2x2+w3x1x2+w4x12+w5x22
通过引入
z
1
=
x
1
z_1=x_1
z1=x1,
z
2
=
x
2
z_2=x_2
z2=x2,
z
3
=
x
1
x
2
z_3=x_1x_2
z3=x1x2,
z
4
=
x
1
2
z_4=x_1^2
z4=x12,
z
5
=
x
2
2
z_5=x_2^2
z5=x22,可以得到:
z
=
[
x
1
,
x
2
,
x
1
x
2
,
x
1
2
,
x
2
2
]
z = [x_1, x_2, x_1 x_2, x_1^2, x_2^2]
z=[x1,x2,x1x2,x12,x22]
有了这些重新标记的数据,原表达式可以写成如下的一元线性方程:
y
^
(
w
,
x
)
=
w
0
+
w
1
z
1
+
w
2
z
2
+
w
3
z
3
+
w
4
z
4
+
w
5
z
5
\hat{y}(w, x) = w_0 + w_1 z_1 + w_2 z_2 + w_3 z_3 + w_4 z_4 + w_5 z_5
y^(w,x)=w0+w1z1+w2z2+w3z3+w4z4+w5z5
多项式回归在回归分析中很重要,因为任意一个函数至少在一个较小的范围内都可以用多项式任意逼近,因此在比较复杂的实际问题中,有时不问y与诸元素的确切关系如何,而用回归分析进行分析运算。
比如,对房屋成交信息建立多项式回归方程,并依据回归方程对房屋价格进行预测 。
代码实现
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
x = np.random.uniform(-3, 3, size = 100)
X = x.reshape(-1, 1)
y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size = 100)
ploy = PolynomialFeatures(degree=2)
ploy.fit(X)
X2 = ploy.transform(X)
lin_reg2 = LinearRegression()
lin_reg2.fit(X2, y)
y_predict2 = lin_reg2.predict(X2)
plt.scatter(x, y)
plt.plot(np.sort(x), y_predict2[np.argsort(x)], color='r')
plt.show()

import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
x = np.random.uniform(-3, 3, size=100)
X = x.reshape(-1, 1)
y = 0.5 * x**2 + x + 2 + np.random.normal(0,1,size = 100)
poly_reg = Pipeline([
("poly",PolynomialFeatures(degree = 2)),
("std_scaler",StandardScaler()),
("lin_reg",LinearRegression())
])
poly_reg.fit(X, y)
y_predict = poly_reg.predict(X)
plt.scatter(x, y)
plt.plot(np.sort(x),y_predict[np.argsort(x)], color='r')
plt.show()

本文介绍了多项式回归作为非线性函数拟合的方法,它通过变量转换转化为多元线性回归问题。以二元二次方程为例,展示了如何将原表达式改写为一元线性方程,并提到在回归分析中的重要性。最后,文中提到了在房屋价格预测中应用多项式回归的实际案例。

被折叠的 条评论
为什么被折叠?



