我并不是真正的程序员,但这就是我到目前为止所拥有的。我正在尝试应用线性回归来从样本数据中预测某些内容。我可能在这里犯了一些错误,因为我得到的 rmse 高于 1。我检查了连续变量之间的相关性,结果发现该相关性非常小,最大值达到 0.2。还使用四分位数范围方法检查了异常值,但没有。
请问有人可以告诉我如何降低均方根误差吗?
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
最佳答案
自从您的 y
变量是停留时间,没有理由它应该有 rmse < 1
。 Here是解释 RMSE 公式定义的资源。可以看到如果(y_pred - y)
平均大于 1,那么您的 RMSE 将大于 1。
至于为什么会发生这种情况,您似乎正在尝试使用大量变量来拟合模型,而这些变量的总和实际上与您的输出变量并不相关。您应该只在实际相关的数据上拟合模型,因为相关性意味着输入数据会以某种方式影响输出数据。
尝试限制适合的输入变量的数量,从相关性最高的数据开始。
关于python - 如何在Python中执行线性回归时减少rmse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44692292/