python - 有没有办法在 sklearn 上使用 MAPE(平均百分比误差)和 cross_validate?
问题描述
我正在尝试使用回归模型来训练和预测多输出数据集(即预测多个目标列)。
sklearn 文档中的此列表中没有 MAPE 的记分员: https ://scikit-learn.org/stable/modules/model_evaluation.html
我知道,您可以单独使用 sklearn.metrics.mean_absolute_percentage_error 计算 MAPE。但是有没有办法将它与 cross_validate() 结合起来?我愿意使用 cross_val_score 或其他交叉验证方法。
谢谢!
解决方案
我不知道您是否已经找到了解决方案(因为它已经很久没有发布了)但这是我使用的解决方案:我使用此处解释的 MAPE 公式实现了我自己的 MAPE 函数,如此处所述。简而言之,这是我的代码(不是很干净,但它确实有效):
def my_custom_MAPE(clf, X_val, y_true,epsilon = 0.000001):
y_pred = clf.predict(X_val)
ii = 0
for i in y_true:
if (i < epsilon) & (i > -epsilon):
y_true[ii] = epsilon
else:
y_true[ii] = y_true[ii]
ii = ii+1
MAPE = (1/len(y_true))*np.sum(np.abs(y_true - y_pred)/y_true)
return MAPE
然后在 cross_validate 中调用它
Scoring_type = {'R2':'r2','NegMSE':'neg_mean_squared_error', 'MAPE': my_custom_MAPE}
cv = KFold(n_splits=K, shuffle=True, random_state=seed)
cv_results = cross_validate(Lin_model, X, y, cv=cv, scoring=Scoring_type)
我希望它有帮助
推荐阅读
- c# - WindowsFormHost 不适用于 WPF 用户控件
- android - Firebase- 带有 Twitter 的 Sigin 显示您的浏览器不再受支持
- python - Python:如何在另一个指定字符串之后立即提取字符串
- node.js - 从 node_modules 在现有项目上构建私有 npm 包
- ios - didFinishPickingMediaWithInfo 在 iOS 13 中返回不同的 URL
- jquery - 如何重用 kendo-combobox jquery 代码来制作多个输入框?
- javascript - JavaScript,幕后
- java - 创建一个使用速度的可重用解析方法
- javascript - 如何在 joi 模式中运行自定义验证功能
- c++ - 带有回调函数的状态机