Machine learning 在分类问题中,列车数据召回率高,而测试数据召回率低

Machine learning 在分类问题中,列车数据召回率高,而测试数据召回率低,machine-learning,classification,Machine Learning,Classification,我对ML非常陌生,我正试图为现实生活中的问题构建一个不平衡二进制类的分类器。我尝试过各种模型,如逻辑回归、随机森林、人工神经网络等,但每次训练数据的精确度和召回率都很高(约94%),测试或验证数据的精确度和召回率都很低(约1%)。我有53个特性和97094个数据点。我尝试过调整超参数,但据我所知,以目前测试和验证数据的精度和召回率,这也不会有很大帮助。有谁能帮我理解可能出了什么问题。 多谢各位 rf = RandomForestClassifier(bootstrap=True, class_w

我对ML非常陌生,我正试图为现实生活中的问题构建一个不平衡二进制类的分类器。我尝试过各种模型,如逻辑回归、随机森林、人工神经网络等,但每次训练数据的精确度和召回率都很高(约94%),测试或验证数据的精确度和召回率都很低(约1%)。我有53个特性和97094个数据点。我尝试过调整超参数,但据我所知,以目前测试和验证数据的精度和召回率,这也不会有很大帮助。有谁能帮我理解可能出了什么问题。 多谢各位

rf = RandomForestClassifier(bootstrap=True, class_weight={1:0.80,0:0.20}, criterion='entropy',
                       max_depth=2, max_features=4, 
                       min_impurity_decrease=0.01, min_impurity_split=None,
                       min_weight_fraction_leaf=0.0, n_estimators=10,
                       n_jobs=-1, oob_score=False, random_state=41, verbose=0,
                       warm_start=False)
rf.fit(X_train, y_train)

很难说没有看到您使用的实际数据或代码,但您的模型可能与您的培训数据集或您的大多数班级过于吻合

如果您的模型超出了您的训练数据集,它将学习记忆您的实际训练数据集。它不再发现对数据进行分类的任何一般区别,但它将其分类边界调整得非常接近于训练数据。你应该考虑使用较不复杂的模型(例如,限制随机森林中树木的数量),放弃一些特征(例如,只使用53个特征中的3个)、正则化或数据增强。 有关防止训练数据过拟合的更多技术以及过拟合和欠拟合的示例,请参见


如果您的模型只是过度适合您的大多数类(例如,99%的数据具有相同的类),那么您可以尝试在培训期间对少数类进行过度采样。

由于培训性能良好,但测试性能较差,您可能过度适合模型,这告诉我,你的模型不能很好地概括,应该简化。就像@mrzo所说的——你有太多的特性了,所以在应用你的模型之前,先研究降维算法并将其应用于你的数据集。另一个好的起点是运行树分类器的“特征重要性”方法,以查看给定数据集中的实际重要性。
不看你的模型和数据集-这只是猜测。

我添加了火车和测试班分布的散点图,这可能有助于理解问题这些散点图代表什么?缺少x轴和y轴的标签。查看您的实际代码可能非常有用,例如,如何加载数据、预处理步骤是什么以及如何使用它们训练模型。用一个随机的Forrest做一个简单的例子。这将有助于进一步帮助您。我不可能添加预处理步骤。蓝色关联图是目标变量,热图是我在随机森林中使用的选定特征。为了平衡课堂,我随机选择了0级数据点。你们给出的结果,第一个来自测试,第二个来自训练?若你们实际拥有超过80000个样品,为什么你们只使用149个样品进行测试?是的,第一个是测试结果,第二个是火车。我需要在一天的水平上做预测,这就是为什么我要在历史数据上进行训练,并尝试测试一天。我正在研究你提到的要点。你能看一下散点图,告诉我还有什么需要我调查的吗?我希望这些图片能够提供一些关于这个问题的额外信息。