随机森林回归 - 如何分析其性能?- 蟒蛇,sklearn

Jul*_*lia 11 python regression machine-learning random-forest scikit-learn

我正在努力评估随机森林的性能 - 我已经查看了平均相对误差,但我不确定这是否是一个好的指标。需要检查哪些事项?

另外,我应该如何优化我的超参数?我使用过 rf.score(X_test,y_test) R2,但这真的是我在进行回归时唯一应该依赖的东西吗?我查看了袋外分数,但我不知道如何解释它们。

愿你的最佳状态是全局的,并且你的超参数得到优化:)

from sklearn.ensemble import RandomForestRegressor

rf = RandomForestRegressor(n_estimators = 1000,max_depth=5,random_state = 0)
rf.fit(X_train, y_train);

predictions = rf.predict(X_test)


errors = abs((predictions - y_test)/y_test)
print('Mean Relative Error:', round(np.mean(errors), 2)) 
Run Code Online (Sandbox Code Playgroud)

Iha*_*ski 12

对于回归模型(不要与分类器模型混淆),您可以通过以下方式评估 MAE、MSE、MAPE 和 RMSE sklearn

import numpy as np
from sklearn import metrics

print('Mean Absolute Error (MAE):', metrics.mean_absolute_error(gt, pred))
print('Mean Squared Error (MSE):', metrics.mean_squared_error(gt, pred))
print('Root Mean Squared Error (RMSE):', np.sqrt(metrics.mean_squared_error(gt, pred)))
mape = np.mean(np.abs((gt - pred) / np.abs(gt)))
print('Mean Absolute Percentage Error (MAPE):', round(mape * 100, 2))
print('Accuracy:', round(100*(1 - mape), 2))
Run Code Online (Sandbox Code Playgroud)


mhe*_*ier 7

为了扩展Igor Ezersky答案,scikit learn 中实现了更多用于模型和性能评估的功能。文档中提供了所有评分参数的完整列表。此外,一些指标(例如 RMSE 和 MAPE)不再需要手动计算(scikit learn 版本 >= 0.24),因为它们是作为库函数实现的。此外,它们更安全地防止错误(例如零除数)。

上述答案的扩展版本(包含所有当前可用的回归指标)可能如下所示:

from sklearn import metrics

y_true = [...] # Your real values / test labels
y_pred = [...] # The predictions from your ML / RF model

print('Mean Absolute Error (MAE):', metrics.mean_absolute_error(y_true, y_pred))
print('Mean Squared Error (MSE):', metrics.mean_squared_error(y_true, y_pred))
print('Root Mean Squared Error (RMSE):', metrics.mean_squared_error(y_true, y_pred, squared=False))
print('Mean Absolute Percentage Error (MAPE):', metrics.mean_absolute_percentage_error(y_true, y_pred))
print('Explained Variance Score:', metrics.explained_variance_score(y_true, y_pred))
print('Max Error:', metrics.max_error(y_true, y_pred))
print('Mean Squared Log Error:', metrics.mean_squared_log_error(y_true, y_pred))
print('Median Absolute Error:', metrics.median_absolute_error(y_true, y_pred))
print('R^2:', metrics.r2_score(y_true, y_pred))
print('Mean Poisson Deviance:', metrics.mean_poisson_deviance(y_true, y_pred))
print('Mean Gamma Deviance:', metrics.mean_gamma_deviance(y_true, y_pred))
Run Code Online (Sandbox Code Playgroud)

如果您需要有关各个指标的更多信息,请查看scikit learn 用户指南


小智 -3

您还可以添加这两个指标:

from sklearn.metrics import accuracy_score, confusion_matrix
Run Code Online (Sandbox Code Playgroud)

准确度分数(my_class_column,my_forest_train_prediction)confusion_matrix(my_test_data,my_prediction_test_forest)

还可以添加每个预测的概率:

my_classifier_forest.predict_proba(variable 1, variable n)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,答案讨论的是“分类”的性能指标,而问题是关于“回归”的。 (15认同)