close

在訓練模型的過程中常會遇到訓練資料維度不符合的問題。本文藉由觀察錯誤及尋找網路資料以克服訓練資料維度的問題。
 

1. 由線性回歸問題開始

假設我們想要模擬一組50筆的資料,可用 numpy 程式庫

samples=50
x=np.linspace(0,5,samples)

而因變數 可以用一個線性方程式來模擬:
y=1.2*x+0.8+0.6*np.random.randn(samples)

如果用 matplotlib.pyplot 來繪圖,可得到這樣的結果:

1_1_linearRandom.png

2. 線性回歸模型的介入

  學過了線性回歸模型,可以利用模型來作訓練和預測。
於是寫了這樣的程式:
from sklearn.linear_model import LinearRegression
model=LinearRegression()
model.fit(x,y)
y_pred = model.predict(x)

結果卻出錯了!

1_2_1D_to_2D.png

它說需要一個 2D 的陣列,結果輸入是 1D 的陣列

後來找了網路上有關轉換的方式:

x=np.reshape(x,(-1,samples))

執行後還是出錯了!

1_4_firstCode_error.png

訊息說:發現樣本數目不相容

去看一下內容,結果和沒轉換一樣:

1_4_1D_firstCode.png

看一下這段程式,它將轉換成1列,50行的陣列
如果轉換,應該改成 50列,1行的陣列
改成這樣:
x=np.reshape(x,(samples,-1))

內容看起來是這樣:

1_5_2D_2ndCode.png

終於成功了!

1_6_plot.png

結論

要進入機器學習與類神經網路模型前,訓練的資料要先準備好。而且這些資料的形式也必須要符合模型的要求。
這裡嘗試用取得的資料來訓練線性回歸模型,也學到模型需要的資料形式。

arrow
arrow
    文章標籤
    Python numpy dimension
    全站熱搜
    創作者介紹
    創作者 小木屋 的頭像
    小木屋

    小木屋

    小木屋 發表在 痞客邦 留言(0) 人氣()