在使用随机森林等算法做预测的时候,拟合目标一共有5个指标,其中指标A、B、C有220个样本(只做了这么多实验),D、E有300个样本, 他们的特征都是一样的三个特征,A、B、C的特征样本包含在D、E内,我在训练好A、B、C模型之后直接拿D、E的300个样本进行预测(想把没有做实验的部分的数据也给补充上),于是我发现原本220个样本参与预测时得到的值与训练时得到的值偏差过大,即相同的X输入,在做预测与做训练时得到的结果不同,有人能帮我解答一下吗,感谢!
def save_model(rs, filename, x, y):
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=rs)
ss_x = StandardScaler()
x_train = ss_x.fit_transform(x_train)
x_test = ss_x.transform(x_test)
rfr = RandomForestRegressor(random_state=1)
rfr.fit(x_train, y_train.ravel())
joblib.dump(rfr, r'{}'.format(filename))
def loaded_model(filepath, x, save_path):
ss_x = StandardScaler()
x = ss_x.fit_transform(x)
rfr = joblib.load(r'{}'.format(os.path.abspath(filepath)))
outs = rfr.predict(x).reshape(-1, 1)
df = pd.DataFrame(outs, columns=['预测值'])
df.to_excel(r'{}'.format(os.path.abspath(save_path)))
出现这种现象是因为样本数量发生变化的正常情况还是有什么特殊原因呢,有没有办法能解决一下
RandomForestRegressor不给任何参数基本都是过拟合的(树的深度没有限制,叶样本量没有限制)
help(RandomForestRegressor)看下参数,设置下max_depth,min_samples_split,min_samples_leaf
设置固定的随机种子。