關於線性迴歸的矩陣格式

  直接上代碼:數據結構

 1 x = np.array([1,2,3,4]).reshape(-1,1)
 2 y = np.array([2,4,6,8]).reshape(-1,1)
 3 line = LinearRegression()
 4 line.fit(x, y)
 5 y_predict = line.predict(x)
 6 plt.plot(x, y_predict, "b-")
 7 print("x\n", x)
 8 print("\ny\n", y)
 9 print("line.coef_: ", line.coef_)
10 print("line.intercept_: ", line.intercept_)

  x [[1] [2] [3] [4]] y [[2] [4] [6] [8]] line.coef_: [[2.]] line.intercept_: [0.] 學習

  完美,這是很是標準的線性迴歸的參數形式;看到coef和intercept也是和咱們預期是相符的。spa

  下面的是轉置以後的數據處理:code

 

 1 x = np.array([1,2,3,4]).reshape(-1,1)
 2 y = np.array([2,4,6,8]).reshape(-1,1)
 3 line = LinearRegression()
 4 line.fit(x.T, y.T)
 5 y_predict = line.predict(x.T)
 6 plt.plot(x.T, y_predict, "r.")
 7 print("x.T\n", x.T)
 8 print("\ny.T\n", y.T)
 9 print("line.coef_: ", line.coef_)
10 print("line.intercept_: ", line.intercept_)

 

 

 

  x.T [[1 2 3 4]] y.T [[2 4 6 8]] line.coef_: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] line.intercept_: [2. 4. 6. 8.] blog

從圖上能夠看到,學習的結果轉變成了四個點(若是plot的參數改成"r-"則什麼也不會畫出來,由於僅僅是四個點)。學習的結果也和預期徹底不同,權重W爲0,截距是y值。產品

下面繼續,我本意是但願x表明月份,y表明銷售額,我手頭有多個產品的月份-銷售額數據,想要一次性把多個多個產品的權重求出來。可是,it

 

 1 x = np.array([[1,2,3,4],[1,2,3,4]])
 2 y = np.array([[2,4,6,8],[4,6,8,10]])
 3 line = LinearRegression()
 4 line.fit(x, y)
 5 y_predict = line.predict(x)
 6 #plt.plot(x.T, y_predict.T)
 7 print("x\n", x)
 8 print("\ny\n", y)
 9 print("line.coef_: ", line.coef_)
10 print("line.intercept_: ", line.intercept_) 

  x [[1 2 3 4] [1 2 3 4]] y [[ 2 4 6 8] [ 4 6 8 10]] line.coef_: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] line.intercept_: [3. 5. 7. 9.] io

 

  亂了,這裏全亂了,尤爲是W,怎麼成了一個4*4的格式,由於這個是兩個產品的月份,我其實期待的是一個兩行一列的數據結構。class

  這裏其實就要回到初心了,要明白線性迴歸本質是矩陣計算,目標Y是一個2*4矩陣,x是一個2*4的矩陣,Y=X.dot(W),這意味着,W要是一個4*4的矩陣,這樣X和W相乘纔可以保證Y的shape是2*4。im

  回想一下第一個例子,之因此W實現了1*1,是由於X是4*1,y是4*1,因此W的shape是1*1。

  這樣,對於線性迴歸而言咱們只能一次性分析一行,沒法實現一次性學習多個。

相關文章
相關標籤/搜索