我正在努力寻找一个适合我的数据集的学习算法。你知道吗
我正在处理一个典型的回归问题。我关心的数据集中有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%。看到这些数字真是太可怕了!你知道吗
你的问题有几个问题。你知道吗
对于初学者来说,您试图在一个似乎是回归的问题中使用准确性,这是一个无意义的问题。你知道吗
尽管您没有提供精确的模型(可以说这是一个好主意),但是这一行在您的评估函数中
实际上是mean absolute error的基础(MAE-尽管你实际上应该取它的平均值,顾名思义)。MAE和MAPE一样,确实是回归问题的一个性能指标;但是接下来使用的公式
实际上不成立,也没有在实践中使用。你知道吗
诚然,凭直觉,人们可能想要得到
1-MAPE
数量;但这不是一个好主意,因为MAPE本身有很多缺点,严重限制了它的使用;下面是Wikipedia的部分列表:我建议通过以更好的形式预处理数据来改进。尝试手动删除异常值,检查库克距离的概念,以查看对模型有很大影响的元素。此外,您可以使用与标准缩放不同的形式缩放数据,如果数据中的元素太大或太小,则使用日志缩放。或者使用特征变换,如DCT变换/SVD变换等
或者更简单地说,你可以用现有的数据创建你自己的特征,例如,如果你在股票价格预测中把最新收盘价和今天开盘价作为两个特征,你可以创建一个新的特征,表示成本%的差异,这对你的准确度有很大帮助。你知道吗
做一些线性回归分析,了解Beta值,更好地了解哪个特征对目标值的贡献更大。为了同样的目的,你也可以在随机林中使用特征的重要性,并尽可能地改进该特征,以便模型能够更好地理解。你知道吗
这只是冰山一角的冰可以做什么。我希望这有帮助。你知道吗
这是一个安装过度的问题。你在训练数据上很好地拟合了这个假设。 您问题的可能解决方案:
我建议您使用pipeline函数,因为它允许您同时执行多个模型。 例如:
相关问题 更多 >
编程相关推荐