2017-07-13 116 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