python - 为什么每当我刷新随机森林回归器时。 MSE 和 MAE 发生变化吗?为什么它会有所不同并取决于什么?

标签 python machine-learning output random-forest

我正在使用 jupyter 笔记本,因此我可以尽可能频繁地刷新该 block 以适应/预测/评估。每次刷新时,即使训练数据未打乱,MSE/MAE/RMSE 也会返回不同的值。为什么会这样?

我尝试查找问题,但这似乎没有帮助,所以我想知道这是因为我的代码还是我缺乏理解

我经常刷新这个 block

rf1 = SklearnExtra(clf = RandomForestRegressor(), seed = Seed, params = tune)
rf1.fit(x_train, y_train)
evaluate(rf1, x_test, y_test)
print('Test MAPE '+ str(mean_absolute_percentage_error(rf1, y_test, x_test)))
def evaluate(model, test_features, test_labels):
    predictions = model.predict(test_features)
    errors = metrics.mean_absolute_error(test_labels, predictions)
    MSerrors = metrics.mean_squared_error(test_labels, predictions)
    RMSE = np.sqrt(metrics.mean_squared_error(test_labels, predictions))
    RMSLE = np.sqrt(np.mean(np.power(np.log1p(predictions) - np.log1p(test_labels), 2)))
    print('Model Perfomance')
    print('MAE Error: {:0.4f} degrees. '.format(errors))
    print('Average MSE Error: {:0.4f} degrees. '.format(MSerrors))
    print('Average RMS Error: {:0.4f} degrees. '.format(RMSE))
    print('Average RMSLE Error: {:0.4f} degrees. '.format(RMSLE))
    return 'end of test'
class SklearnExtra(object):
    def __init__(self, clf, seed = 0, params = None):
        params['random_state'] = seed
        self.clf = clf

    def train(self, x, y):
        self.clf.fit(x, y)

    def predict(self, x):
        return self.clf.predict(x)

    def fit(self, x, y):
        return self.clf.fit(x,y)

    def feature_importances(self, x, y):
        clf2 = self.clf.fit(x,y)
        return (clf2.feature_importances_)

    def name(self):
        return str(self.clf)
Test Data
Model Perfomance
MAE Error: 26.3329 degrees. 
Average MSE Error: 1950.4288 degrees. 
Average RMS Error: 44.1637 degrees. 
Average RMSLE Error: 0.3016 degrees. 
Test MAPE 24.11994617834992

#next refresh
Test Data
Model Perfomance
MAE Error: 29.7638 degrees. 
Average MSE Error: 2479.5202 degrees. 
Average RMS Error: 49.7948 degrees. 
Average RMSLE Error: 0.3129 degrees. 
Test MAPE 25.520876708239378

最佳答案

每棵树都是建立在数据的随机部分( Bootstrap )和/或所有特征的子样本上的,因此模型每次都不同。这是一个随机森林;-)

您可以使用RandomForestRegressor(bootstrap=False)关闭引导采样,但每次特征采样时您仍会得到略有不同的结果。

但是,如果您希望每次都获得相同的结果,则可以将 randon_state 参数设置为固定值,例如RandomForestRegressor(random_state=42)。 :-)

Here Sycorax 在 CrossValidated 上给出了很好的解释。

关于python - 为什么每当我刷新随机森林回归器时。 MSE 和 MAE 发生变化吗?为什么它会有所不同并取决于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57116146/

相关文章:

python - 如何判断我的 Python 项目未使用哪些已安装的软件包?

java - javafx 中的多行文本输出

java - 统计分析

python - 检测和定位两个图像中与文本不同的区域(平面/曲线/旋转)

python - 人员列表中 2 人或 3 人的团体的所有组合 [Python]

python - 使用 Keras 使用多个指标进行预测

machine-learning - 样本权重在分类模型中如何发挥作用?

statistics - 使用朴素贝叶斯分类器进行在线学习

python - fmin_cg : Desired error not necessarily achieved due to precision loss

c++ - 使用数组,将数据存入数组并输出