当我使用常规运行时间(分钟)时,我的误差是25,但当我对运行时间取对数(使其正态化)时,我的误差是0.3?

我正在做一个典型的机器学习回归问题。有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)    #绝对误差    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))    print('模型性能')    print('平均绝对误差: {:0.4f} 度。'.format(errors))    print('平均均方误差: {:0.4f} 度。'.format(MSerrors))    print('平均均方根误差: {:0.4f} 度。'.format(RMSE))    return '测试结束'

Extra trees回归器

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('模型 ' + i.name())    print('训练: '+str(evaluate(i, x_train, y_train)))    print('')    print('模型 ' + i.name())    print('测试: '+ str(evaluate(i, x_test, y_test)))    print('测试MAPE '+ str(mean_absolute_percentage_error(i, y_test, x_test)))
模型 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)模型性能平均绝对误差: 0.0165 度。平均均方误差: 0.0079 度。平均均方根误差: 0.0887 度。训练: 测试结束模型性能平均绝对误差: 0.3572 度。平均均方误差: 0.2957 度。平均均方根误差: 0.5438 度。测试: 测试结束

回答:

我们无法告诉你你应该做什么,你必须决定这对数据是否有意义。

但这就是为什么我在评论中询问了关于变换和统计的问题,如果你改变了目标的尺度,你就不能使用两个模型之间的绝对差异进行分析。如果你的初始模型的RMSE为30,但预测值的范围是0到100,标准偏差是20(例如),那就不太好。但在你的新模型中,如果数据范围是0到10,标准偏差是3.5,那么0.5的RMSE可能会更好。

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

参见“有用”部分的“所有模型都是错误的,但有些是有用的”

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注