2015-04-05 75 views
0

我有一些關於sklearn linear_model.LinearRegression(模塊)的輸入問題。Sklearn線性迴歸X和Y輸入格式

ages_train = [[20, 10000], [22, 12000], [22, 14000], [25, 17000], [30, 29000]] 
net_worths_train = [10000, 12000, 14000, 17000, 29000] 

reg = linear_model.LinearRegression() 
reg.fit(ages_train, net_worths_train) 

上述工作,但它使得很難繪圖。舉例來說,這樣做是行不通的:

plt.scatter(ages_train, net_worths_train, color = "b", label = "train data") 

所以我想做的是輸入這樣的:

ages_train = np.array([20, 22, 25, 27, 30, 31, 31, 34, 42, 50]) 
net_worths_train = np.array([10000, 12000, 16000, 20000, 30000, 33000, 34000, 38000, 49000, 60000]) 

但這種數據格式不與.fit工作() linear_model.LinearRegression的函數。輸入數據的正確方法是什麼,並使其易於繪圖?最好是使用numpy數組嗎?

回答

3

查看documentation for scikits.learn。你會看到X和Y需要分別是形狀(n_samples,n_features)和(n_sample,n_targets)的二維數組。即使您只有一個功能和一個目標,情況也是如此。

你知道形狀數組(6,1)和形狀數組(6,)之間的區別嗎?起初有點混亂,但第一個是一個真正的二維數組,恰好有一列,第二個是完全的一維數組。

以下是如何將數據轉換爲二維數組。是的,當使用像這樣的數字數據時,你應該使用numpy,而不是列表。

ages_train = np.array([20, 22, 25, 27, 30, 31, 31, 34, 42, 50]) 
net_worths_train = np.array([10000, 12000, 16000, 20000, 30000, 33000, 34000, 38000, 49000, 60000]) 
reg.fit(ages_train[:, np.newaxis], net_worths_train[:, np.newaxis]) 
print reg.coef_, reg.intercept_ 

順便說一句,如果你真的只想做簡單的線性迴歸,考慮np.polyfit(多項式擬合)或np.linalg.lstsq(廣義最小二乘法)。這些更容易安裝和使用。儘管如此,Scikits-learn還有更多的功能和先進的迴歸技術。