在訓練模型的過程中常會遇到訓練資料維度不符合的問題。本文藉由觀察錯誤及尋找網路資料以克服訓練資料維度的問題。
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 來繪圖,可得到這樣的結果:
2. 線性回歸模型的介入
學過了線性回歸模型,可以利用模型來作訓練和預測。
於是寫了這樣的程式:
from sklearn.linear_model import LinearRegression
model=LinearRegression()
model.fit(x,y)
y_pred = model.predict(x)
結果卻出錯了!
它說需要一個 2D 的陣列,結果輸入是 1D 的陣列
後來找了網路上有關轉換的方式:
x=np.reshape(x,(-1,samples))
執行後還是出錯了!
訊息說:發現樣本數目不相容
去看一下內容,結果和沒轉換一樣:
看一下這段程式,它將轉換成1列,50行的陣列
如果轉換,應該改成 50列,1行的陣列
改成這樣:
x=np.reshape(x,(samples,-1))
內容看起來是這樣:
終於成功了!
結論
要進入機器學習與類神經網路模型前,訓練的資料要先準備好。而且這些資料的形式也必須要符合模型的要求。
這裡嘗試用取得的資料來訓練線性回歸模型,也學到模型需要的資料形式。
留言列表