我不是真正的编码员,但这是我到目前为止所做的。我正在尝试应用线性回归来预测样本数据中的某些内容。我可能在这里犯了一些错误,因为我得到了高于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
答案 0 :(得分:1)
由于您的y
变量是逗留时间,因此没有理由认为它应该有rmse < 1
。 Here是解释RMSE的公式定义的资源。您可以看到,如果(y_pred - y)
平均大于1,那么您的RMSE将大于1。
至于为什么会发生这种情况,你似乎试图使用大量变量拟合模型,其总和实际上与输出变量无关。您应该只对实际相关的数据拟合模型,因为相关意味着输入数据以某种方式影响输出数据。
尝试限制适合的输入变量数量,从最高度相关的数据开始。