2017-06-22 53 views
0

我不是一個真正的編碼員,但這是我迄今爲止所做的。我試圖應用線性迴歸來預測樣本數據中的某些內容。我可能在這裏犯了一些錯誤,因爲我得到了1以上的rmse。我檢查了連續變量之間的相關性,結果很小,最大值達到了0.2。還使用Inter Quartile Range方法檢查異常值,但沒有。如何在python中執行線性迴歸時減少rmse

請有人告訴我應該如何減少rmse?

import pandas as pd 
from sklearn import linear_model 
from sklearn.metrics import mean_squared_error 
from math import sqrt 
from sklearn.cross_validation import train_test_split 

df_hosp = pd.read_csv('C:\Users\LAPPY-2\Desktop\LengthOfStay.csv') 

df_temp, df_test = train_test_split(df_hosp, test_size=0.30, train_size=0.70) 
df_train, df_val = train_test_split(df_temp, test_size=0.30, train_size=0.70) 

X = df_train[['rcount', 'male', 'female', 'dialysisrenalendstage', 'asthma', \ 
       'irondef', 'pneum', 'substancedependence', \ 
       'psychologicaldisordermajor', 'depress', 'psychother', \ 
       'fibrosisandother', 'malnutrition', 'hemo', 'hematocrit', \ 
       'neutrophils', 'sodium', 'glucose', 'bloodureanitro', \ 
       'creatinine', 'bmi', 'pulse', 'respiration', \ 
       'secondarydiagnosisnonicd9']] 

y = df_train['lengthofstay'] 

model = linear_model.LinearRegression(fit_intercept=True, normalize=True, copy_X=True) 
m = model.fit(X, y) 

predictions_train = m.predict(X) 
print('Score: %.2f' % m.score(X, y)) 
rms_train = sqrt(mean_squared_error(y, predictions_train)) 
print ('Training set RMSE: %.2f' % rms_train) 

輸出: 得分:0.75 訓練集RMSE:1.19

回答

1

由於您的y變量是停留時間的長短,沒有理由爲什麼它應該有一個rmse < 1Here是解釋RMSE公式定義的資源。你可以看到,如果(y_pred - y)平均大於1,那麼你的RMSE將大於1.

至於爲什麼會發生這種情況,你似乎試圖擬合一個具有大量變量的模型,其中的總和實際上並不與您的輸出變量相關。您應該只對實際相關的數據擬合模型,因爲相關意味着輸入數據以某種方式影響輸出數據。

嘗試限制適合的輸入變量的數量,從最高度相關的數據開始。

+0

Thanks @pypypy。就rmse公式部分達成一致,但如果我不將數據分成不同的部分,則顯示爲0.5以下。我刪除了幾個與目標變量最不相關的變量,但輸出仍然是相同的。 – funnyguy

+0

X = df_train [''rcount','hematocrit','neutrophils','bloodureanitro',\ '呼吸','男性','女性','dialysisrenalendstage','哮喘' '肺','物質依賴',\ 'psychdisordermajor','depress','psychother',\ 'fibrosisandother','營養不良','hemo']] – funnyguy

+0

這是真的數據嗎?如果是這樣,可能沒有找到任何關係,沒有理由爲什麼數據必須符合線性迴歸。 – pypypy