2017-02-23 153 views
1

我想使用三個獨立變量來擬合線性迴歸模型,並使用sklearn來計算均方誤差,但我似乎無法把它弄清楚。如何使用三個獨立變量擬合線性迴歸模型並使用sklearn計算均方誤差?

我的數據是波士頓房屋,以及三名獨立變量如下:1。 CRIM(人均由鎮犯罪率) 2. RM 3. PTRATIO(每個房間居住的平均數)(光瞳通過城鎮教師的比例)

擬合模型:

import numpy as np 
import pandas as pd 
import matplotlib as mpl 
import matplotlib.pyplot as plt 
import sklearn 
lm = LinearRegression() 
lm.fit(X[['CRIM']['RM'], ['PTRATIO']], boston_df.PRICE) 

計算均方誤差

from sklearn.metrics import mean_squared_error 
y_true = ['CRIM', 'RM', 'PTRATIO'] 
y_pred = ['PRICE'] 
mean_squared_error(y_true, y_pred) 

任何意見或提示都非常感謝!

+0

會發生什麼情況?你忘了提及什麼問題 – iled

+0

我無法擬合線性迴歸模型並計算均方誤差。感謝您的回覆!! –

+0

我的意思是,請發佈實際的錯誤信息 – iled

回答

0

嘗試X[['CRIM', 'RM', 'PRTATIO']]代替X[['CRIM']['RM'], ['PTRATIO']]擬合模型

對於預測你需要這兩個向量比較:

y_true = boston_df.PRICE 
y_pred = lm.predict(X[['CRIM', 'RM', 'PRTATIO']]) 
mean_squared_error(y_true, y_pred) 

基本上你y_pred應該從你的模型,它是lm在此預測值案件。

+0

埃米爾,非常感謝! –

0

sklearn有很棒的文檔。下面是一個完整的示例數據集的完整示例:http://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html

您遇到的最大問題是您的數據集。就像你的代碼在這裏:

y_true = ['CRIM', 'RM', 'PTRATIO'] 
y_pred = ['PRICE'] 

這甚至不是真正的數據,它僅僅是2串標籤的列表,所以這當然是行不通的:

mean_squared_error(y_true, y_pred) 

從我張貼的例子,您可以嘗試使用「hello world」類型的代碼(使用現有的數據集)來確保代碼正常工作,然後您只需將數據集替換爲您自己的數據即可。正如您所看到的,大部分代碼都是專門用於準備數據的,因此它將正確加載到線性迴歸函數中:

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn import datasets, linear_model 

# Load the diabetes dataset 
diabetes = datasets.load_diabetes() 

# Use only one feature 
diabetes_X = diabetes.data[:, np.newaxis, 2] 

# Split the data into training/testing sets 
diabetes_X_train = diabetes_X[:-20] 
diabetes_X_test = diabetes_X[-20:] 

# Split the targets into training/testing sets 
diabetes_y_train = diabetes.target[:-20] 
diabetes_y_test = diabetes.target[-20:] 

# Create linear regression object 
regr = linear_model.LinearRegression() 

# Train the model using the training sets 
regr.fit(diabetes_X_train, diabetes_y_train) 

print("Mean squared error: %.2f" % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)) 
+0

真棒!非常感謝!!! –

+0

在這種情況下,你分割數據集,但是做一些類似'regr = linear_model.LinearRegression()'然後'regr.fit(diabetes_X,diabetes.target)'然後最後'np.mean((regr .predict(diabetes_X,diabetes.target)** 2)'?這是否合理?因爲我想看看錯誤的適合程度有多好,所以我想我可以使用相同的整個數據集......這是一個好方法嗎? –

+1

@Euler_Salter @Euler_Salter一般來說,如果您使用相同的數據來訓練模型,然後測試一個模型,那麼您並沒有真正預測任何事情,因爲模型已經「知道」每個輸入的正確答案,所以這樣做並不真的合理。儘管你可以自由嘗試,但當然可以試試看。由於這是一個線性迴歸,根據您的數據,它可能仍然無法做出完美的預測。再仔細檢查一下我的例子中的均方誤差線,你似乎誤解了它。 –

相關問題