我正在努力寻找适合我的数据集的学习算法。
我正在处理一个典型的回归器问题。我关注的数据集中有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/