我在 Xtrain 和 Ytrain 上安装了随机森林回归器,然后应用了预测 Xtest 和 Xtrain 的方法。
forest = RandomForestRegressor(random_state=1,n_estimators=1000,criterion='squared_error',n_jobs=-1)
forest.fit(X_train,y_train)
y_train_pred = forest.predict(X_train)
y_test_pred = forest.predict(X_test)
但是,虽然 y_train_pred 对于 X_train 的每个值都有一个值,但 y_test_pred 对于所有 X_train 都有相同的值 X_测试值。
X_test = [109 110 ... 156 157]
X_train = [1 2 ... 106 107]
有人可以建议我为什么吗? 谢谢你。
我认为将预测方法应用于带有 X_test 和 X_train 估计器的估计器 可能有相同的行为。
这是您提供的用于拟合 RandomForestRegressor 并对 X_train 和 X_test 进行预测的代码:
forest = RandomForestRegressor(random_state=1, n_estimators=1000, criterion='squared_error', n_jobs=-1)
forest.fit(X_train, y_train)
y_train_pred = forest.predict(X_train)
y_test_pred = forest.predict(X_test)
y_train_pred
和y_test_pred
值之间的不匹配可能是由于模型已经很好地学习了训练数据并且过度拟合。由于 y_train_pred
是使用模型在训练过程中看到的训练数据计算的,因此预计它与实际训练目标值密切匹配 (y_train
)。但是,y_test_pred
对于所有实例可能具有相同的值,因为模型可能会过度概括并预测未见过的测试数据的单个值 (X_test
)。
为了解决这个问题,可以考虑调整RandomForestRegressor的超参数来减少过度拟合。一些值得探索的选项包括:
最大深度:限制森林中单棵树的最大深度,以控制其复杂性并防止过度拟合。您可以在
max_depth
中设置 RandomForestRegressor
。
Min Samples Split:设置
min_samples_split
以确保节点仅在包含最小数量的样本时才被拆分。这有助于控制树木生长并防止过度拟合。
最大特征:尝试使用
max_features
来限制每次分割考虑的特征数量。这可以带来更好的泛化。
减少估计器:虽然拥有更多的树可以提高模型的性能,但拥有太多的树也会导致过度拟合。尝试减少
n_estimators
的数量。
使用其他标准:尝试使用
'squared_error'
(均方误差)作为标准,而不是 'mse'
。