【问题标题】:When I use regular run time (mins) my error is 25 but when I take a log of the runtime (to make it normal) my error is 0.3?当我使用常规运行时间(分钟)时,我的错误是 25,但是当我记录运行时(使其正常)时,我的错误是 0.3?
【发布时间】:2019-07-17 15:56:23
【问题描述】:

我正在做一个典型的机器学习回归问题。有 800 个数据点和 6 个特征。最佳模型 Extra Trees Regressor 为均方根误差返回 30。我进行了对数转换,以减少极端数据的影响。日志也将数据从偏右转换为正态分布。误差只有0.54,为什么会有这么大的变化

log(30) = 1.4 我确实了解我的统计知识不是最好的,但这对我来说似乎很奇怪。我没有对参数进行任何调整。

话虽如此,我应该相信什么错误?各自的解释是什么?

记录预测值

pricing['runtime.min'] = np.log(pricing['runtime.min'])

评估模型的功能

def evaluate(model, test_features, test_labels):
    predictions = model.predict(test_features)
    #Absolute Error
    errors = metrics.mean_absolute_error(test_labels, predictions)
    #Mean Square Error
    MSerrors = metrics.mean_squared_error(test_labels, predictions)
    #Root Mean Squared Error
    RMSE = np.sqrt(metrics.mean_squared_error(test_labels, predictions))
    print('Model Perfomance')
    print('Average 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))
    return 'end of test'

额外的树回归器

et_params = {'n_estimators': 1000,  'max_features':2}
et = SklearnExtra(clf = ExtraTreesRegressor(), seed = Seed, params = et_params)
et.fit(x_train, y_train)

base_models = [rf, et, gb, ada, xg]

for i in base_models:
    print('Model ' + i.name())
    print('Training: '+str(evaluate(i, x_train, y_train)))
    print('')
    print('Model ' + i.name())
    print('Test: '+ str(evaluate(i, x_test, y_test)))
    print('Test MAPE '+ str(mean_absolute_percentage_error(i, y_test, x_test)))
Model ExtraTreesRegressor(bootstrap=False, criterion='mse', max_depth=None,
                    max_features='auto', max_leaf_nodes=None,
                    min_impurity_decrease=0.0, min_impurity_split=None,
                    min_samples_leaf=1, min_samples_split=2,
                    min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=None,
                    oob_score=False, random_state=None, verbose=0,
                    warm_start=False)
Model Perfomance
Average MAE Error: 0.0165 degrees. 
Average MSE Error: 0.0079 degrees. 
Average RMS Error: 0.0887 degrees. 
Training: end of test

Model Perfomance
Average MAE Error: 0.3572 degrees. 
Average MSE Error: 0.2957 degrees. 
Average RMS Error: 0.5438 degrees. 
Test: end of test

【问题讨论】:

  • 模型之间的预测值统计有什么不同?最小值、最大值、平均值、标准?您是只改造了一个功能,还是同时改造了您的目标?
  • 你也可以在Data Sciencestack exchange 上提问,因为这个问题更多的是关于理论而不是编码
  • 我只转换目标而不是特征,这让我怀疑我是否也应该转换特征!
  • @G.Anderson 我之前尝试过 Data Science Exchange,但很难得到回复。
  • @G.Anderson 你认为我也应该改变我的特征吗?

标签: python machine-learning data-science metrics


【解决方案1】:

我们无法告诉您是否应该做某事,您必须决定它是否对数据有意义。

但这就是为什么我在 cmets 中询问有关转换和统计的原因,如果您更改了目标的比例,则无法使用两个模型之间的绝对差异进行分析。如果您的初始模型的 RMSE 为 30,但预测值的范围为 0 到 100,标准差为 20(例如),那么这不是很好。但是在你的新模型中,如果数据是 0 到 10 和 st.dev。是 3.5,那么 0.5 的 rmse 可能会更好。

正确答案有点主观,但归结为: 如果您使用相关模型对现实世界的数据进行预测,误差度量是否在手头任务的可接受容差范围内?对于您的初始模型,您的业务案例是否使得 30(秒?分钟?)或预测或实际之间的运行时间差异“足够接近”? 0.54 对数毫秒是否足以使您的预测对第二个模型无用?

查看"All models are wrong, some are useful"的“有用”部分

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2021-02-01
    • 1970-01-01
    • 2021-04-24
    相关资源
    最近更新 更多