使用PolynomialFeatures和LinearRegression拟合更高度函数

时间:2017-07-13 21:12:09

标签: python scikit-learn linear-regression polynomials

在一本书中,我找到了以下代码,它将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)

enter image description here

但那怎么可能呢?我从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 个答案:

答案 0 :(得分:2)

具有2级的PolynomialFeatures将创建一个类似于:

的数组
   [[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具有相同维度的向量。

关于评论中的问题:

  1. 此功能在新功能集中是线性的:x, x**2。只需将x**2视为模型中的附加功能。

  2. 对于问题中提到的特定数组,LinearRegression方法正在查找最小化和的数字a,b,c

    (A * 1 + B X [0] + C X [0] ** 2-Y [0])** 2+(A * 1 + B X [ 1] + C X [1] ** 2-Y [1])** 2 + .. +(A * 1 + b X [n]的+ C X [N ] ** 2-Y [n])的** 2

  3. 因此它会找到一组这样的数字a,b,c。因此,建议的函数y=a+b*x+c*x**2不仅仅基于第一行。相反,它基于所有行,因为所选择的参数a,b,c是最小化上述总和的参数,并且此总和涉及来自所有行的元素。

    1. 创建向量x**2后,线性回归仅将其视为附加功能。您可以为其指定一个新名称v=x**2。然后线性回归的格式为y=a+b*x+c*v,这意味着它在xv中是线性的。该算法不关心您如何创建v。它只是将v视为附加功能。