使用 PolynomialFeatures 和 LinearRegression 拟合更高阶函数
Fitting a higher degree function using PolynomialFeatures and LinearRegression
我在一本书中找到了以下代码,它适合二次数据的线性回归:
m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
但这怎么可能呢?我从 documentation 知道 PolynomialFeatures(degree=2, include_bias=False)
正在创建一个数组,如下所示:
[[X[0],X[0]**2]
[X[1],X[1]**2]
.....
[X[n],X[n]**2]]
但是:LinearRegression 如何拟合这些数据?表示 LinearRegression 在做什么以及其背后的概念是什么。
非常感谢任何解释!
二次多项式特征将创建一个如下所示的数组:
[[1, X[0], X[0]**2]
[1, X[1], X[1]**2]
.....
[1, X[n] ,X[n]**2]]
我们称上面的矩阵为X
。然后 LinearRegression 正在寻找 3 个数字 a,b,c
以便向量
X* [[a],[b],[c]] - Y
具有最小的均方误差(即上述向量中平方和的平均值)。
请注意,乘积 X* [[a],[b],[c]]
只是矩阵 X
与列向量 [a,b,c].T
的乘积。结果是与 Y
.
维度相同的向量
关于您评论中的问题:
这个函数在新的特征集中是线性的:x, x**2
。只需将 x**2
视为模型中的附加功能即可。
对于您问题中提到的特定数组,LinearRegression 方法正在寻找使和
最小化的数字a,b,c
(a*1+bX[0]+cX[0]**2-Y[0])**2+(a*1+b X[1]+cX[1]**2-Y[1])**2+..+(a*1+bX[n ]+cX[n]**2-Y[n])**2
所以它会找到一组这样的数字a,b,c
。因此,建议的函数 y=a+b*x+c*x**2
不仅仅基于第一行。相反,它是基于所有行的,因为选择的参数 a,b,c
是使上述总和最小的参数,而这个总和涉及 所有 行的元素。
- 创建向量
x**2
后,线性回归仅将其视为附加特征。你可以给它起一个新名字v=x**2
。那么线性回归的形式是y=a+b*x+c*v
,也就是说,它在x
和v
之间是线性的。该算法不关心您如何创建 v
。它只是将 v
视为附加功能。
我在一本书中找到了以下代码,它适合二次数据的线性回归:
m = 100
X = 6 * np.random.rand(m, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(m, 1)
poly_features = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly_features.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)
但这怎么可能呢?我从 documentation 知道 PolynomialFeatures(degree=2, include_bias=False)
正在创建一个数组,如下所示:
[[X[0],X[0]**2]
[X[1],X[1]**2]
.....
[X[n],X[n]**2]]
但是:LinearRegression 如何拟合这些数据?表示 LinearRegression 在做什么以及其背后的概念是什么。
非常感谢任何解释!
二次多项式特征将创建一个如下所示的数组:
[[1, X[0], X[0]**2]
[1, X[1], X[1]**2]
.....
[1, X[n] ,X[n]**2]]
我们称上面的矩阵为X
。然后 LinearRegression 正在寻找 3 个数字 a,b,c
以便向量
X* [[a],[b],[c]] - Y
具有最小的均方误差(即上述向量中平方和的平均值)。
请注意,乘积 X* [[a],[b],[c]]
只是矩阵 X
与列向量 [a,b,c].T
的乘积。结果是与 Y
.
关于您评论中的问题:
这个函数在新的特征集中是线性的:
x, x**2
。只需将x**2
视为模型中的附加功能即可。对于您问题中提到的特定数组,LinearRegression 方法正在寻找使和
最小化的数字a,b,c
(a*1+bX[0]+cX[0]**2-Y[0])**2+(a*1+b X[1]+cX[1]**2-Y[1])**2+..+(a*1+bX[n ]+cX[n]**2-Y[n])**2
所以它会找到一组这样的数字a,b,c
。因此,建议的函数 y=a+b*x+c*x**2
不仅仅基于第一行。相反,它是基于所有行的,因为选择的参数 a,b,c
是使上述总和最小的参数,而这个总和涉及 所有 行的元素。
- 创建向量
x**2
后,线性回归仅将其视为附加特征。你可以给它起一个新名字v=x**2
。那么线性回归的形式是y=a+b*x+c*v
,也就是说,它在x
和v
之间是线性的。该算法不关心您如何创建v
。它只是将v
视为附加功能。