我试图在一个小数据集(大约600条记录)上找到最好的排序模型。我不能增加这个数据集,因为它是来自600个城市的真实数据,这是我研究的范围。
更新:数据包含有关城市的信息(温度、人类发展指数等),我打算用它们来模拟疾病与病例的关系。目标变量是根据疾病发生率的类别(例如:< 20例/ mil为0级)。所以,我有5节课。
为了进行模型比较,我使用了精度和分析混淆矩阵。算法为RandomForest
我想听听你对我在这件事上可以改进什么的看法。我正在做的事情是:
train_test_split(X,y, test_size=0.20, random_state=42)
正如你可能注意到的,准确度是0.40,我认为这是非常低的。我用其他算法和特性组合做过其他测试,并且没有什么变化(精确度在0.35到0.45之间)。
在这种情况下,你建议我做些什么来改进呢?
更新2:我回顾了所有的特性,包括一些可能与我的研究主题相关的特性,并排除了科学文献中没有支持的其他特性。现在,GridSearch的准确度大约为0.56,这与我想要的(>0.7)相差甚远,但它已经是一个相当大的改进。
我用3种不同的算法(随机森林算法、MLPClassfier算法和XGBoost算法)对其进行了测试,RandomForest比神经网络稍好一些。
正如您在新的混淆矩阵中所看到的,类2是性能最差的类。它有较少的记录,但这并没有太大的差别,例如,1级。这里有什么提示可以说明我能在这门课上找到什么吗?
非常感谢。
发布于 2021-12-28 22:11:23
从我在评论中的讨论中看到的,我了解到有两个可能的问题:阶级不平衡和解释变量很少(或缺乏预测能力)。
对于第一个问题,您可以查看SMOTE (合成过采样https://imbalanced-learn.org/stable/references/generated/imblearn.over_sampling.SMOTE.html)。在任何情况下,您都需要获得更多的平衡类,以解决“第二类问题”。
第二个问题可以通过添加新的(生成)特性来解决。您可以添加“交互”,例如x_1 - x_2或x_1 / x_2等。通常使用“减号”和“除以”。通过这样做,您可以(有时)获得解释力,特别是在基于树的模型中。由于所有可能的交互通常都是“大的”,所以您需要进行特性选择(即只保留“最佳”交互),例如基于特性的重要性。或者,您可以使用所有可能的交互和使用“收缩”的功能,例如基于拉索或岭。
https://datascience.stackexchange.com/questions/106219
复制相似问题