2017-07-13 95 views
2

在一本书更高程度的功能,我发现下面的代码,适合一个线性回归至二次数据:配件使用PolynomialFeatures和线性回归

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]] 

BUT:如何是线性回归能够适应这个数据?意思是LinearRegression正在做什么,背后有什么概念。

我很感激任何解释!

回答

2

PolynomialFeatures有两个学位将创建一个数组,看起来像:

[[1, X[0], X[0]**2] 
    [1, X[1], X[1]**2] 
    ..... 
    [1, X[n] ,X[n]**2]] 

让我们把上面X矩阵。然后,将线性回归是寻找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. 对于你的问题中提到的特定的阵列,所述线性回归方法是寻找数字a,b,c最小化总和

    (A * 1 + B X [0] + C X [0] ** 2-Y [1])** 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

因此,将找到一组这样的数字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作为附加功能。
+0

好的谢谢。现在可以说,线性回归函数找到了最佳参数,其中a = 1,b = 2和c = 3,比第一行的函数变为:y = 3x ** 2 + 2x + 1。现在?? 1.什么是LinearRegression在做什么,因为这个函数不是线性的...... 2.另外,如果LinearRegression正在为数组中的每一行做这件事,那么在一个* m数组中,是否正确计算n个线性回归? 3.我还没有得到如何线性回归可以得到弯曲的形状? – 2Obe

+0

@ 2Obe看到我更新的答案。 –

+0

附加功能意味着附加的轴是否正确?因此,二维坐标系中的线性回归曲线可能看起来像一条曲线,但实际上它仍然是一条直线,但在更高维空间中? – 2Obe