如何在python中执行线性回归时减少rmse

时间:2017-06-22 06:59:58

标签: python linear-regression

我不是真正的编码员,但这是我到目前为止所做的。我正在尝试应用线性回归来预测样本数据中的某些内容。我可能在这里犯了一些错误,因为我得到了高于1的rmse。我已经检查了连续变量之间的相关性,结果证明它非常小,最大值达到0.2。还使用Inter Quartile Range方法检查异常值,但没有。

请有人告诉我应该如何减少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 个答案:

答案 0 :(得分:1)

由于您的y变量是逗留时间,因此没有理由认为它应该有rmse < 1Here是解释RMSE的公式定义的资源。您可以看到,如果(y_pred - y)平均大于1,那么您的RMSE将大于1。

至于为什么会发生这种情况,你似乎试图使用大量变量拟合模型,其总和实际上与输出变量无关。您应该只对实际相关的数据拟合模型,因为相关意味着输入数据以某种方式影响输出数据。

尝试限制适合的输入变量数量,从最高度相关的数据开始。