我正在努力寻找适合我的数据集的学习算法。

我正在处理一个典型的回归器问题。我关注的数据集中有6个功能。我的数据集中大约有800个数据点。这些特征和预测值具有很高的非线性相关性,因此这些特征并非没有用(据我所知)。预测值具有双峰分布,因此我很快就忽略了线性模型。

因此,我尝试了5种不同的模型:随机森林,多余的树木,AdaBoost,梯度提升和xgb回归器。训练数据集返回准确性,而测试数据返回11%-14%。两个数字都吓到我了哈哈。我尝试调整随机森林的参数,但似乎没有什么特别的大不同。

调整参数的功能

def hyperparatuning(model, train_features, train_labels, param_grid = {}):
    grid_search = GridSearchCV(estimator = model, param_grid = param_grid, cv = 3, n_jobs = -1, verbose =2)
    grid_search.fit(train_features, train_labels)
    print(grid_search.best_params_)
    return grid_search.best_estimator_`


评估模型的功能

def evaluate(model, test_features, test_labels):
    predictions = model.predict(test_features)
    errors = abs(predictions - test_labels)
    mape = 100*np.mean(errors/test_labels)
    accuracy = 100 - mape
    print('Model Perfomance')
    print('Average Error: {:0.4f} degress. '.format(np.mean(errors)))
    print('Accuracy = {:0.2f}%. '.format(accuracy))


我希望输出至少在您知道的可接受范围内,但是我得到的训练数据为64%,测试数据为12-14%。看到这个数字真是恐怖!

最佳答案

您的问题有几个问题。

对于初学者,您正在尝试使用似乎是回归问题的准确性,这毫无意义。

尽管您没有提供确切的模型(可以说是个好主意),但是评估功能中的这一行

errors = abs(predictions - test_labels)


实际上是mean absolute error的基础(MAE-顾名思义,您实际上应该指平均值)。 MAE和MAPE一样,确实是回归问题的性能指标。但是您接下来使用的公式

accuracy = 100 - mape


实际上并不成立,也没有在实践中使用。

的确,从直觉上讲,一个人可能想要获得1-MAPE数量。但这不是一个好主意,因为MAPE本身有很多缺点,严重限制了它的使用;以下是Wikipedia的部分列表:


  
  如果存在零值(有时会在需求数据中发生),则无法使用该参数,因为会被零除。
  对于太低的预测,百分比误差不能超过100%,但是对于太高的预测,百分比误差没有上限。

关于python - 5种不同型号的训练量低(〜64%)和测试准确性(〜14%),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57042077/

10-12 19:39