小数据集 < 200 个样本的二元分类

数据挖掘 机器学习 Python 分类 预测建模 scikit-学习
2022-02-13 00:03:06

我有一个由 181 个样本组成的数据集(类不平衡,有 41 个数据点带有 1 个标签,其余 140 个数据点带有标签 0)和 10 个特征和一个目标变量。这 10 个特征本质上是数字和连续的。我必须执行二进制分类。我做了以下工作:-

I have performed 3 Fold cross validation and got following accuracy results using various models:-

LinearSVC:
0.873
DecisionTreeClassifier:
0.840
Gaussian Naive Bayes:
0.845
Logistic Regression:
0.867
Gradient Boosting Classifier
0.867
Support vector classifier rbf:
0.818
Random forest:
0.867
K-nearest-neighbors:
0.823

请指导我如何为这种大小的数据集选择最佳模型并确保我的模型没有过度拟合?我正在考虑应用随机抽样来处理不平衡的数据。

2个回答

这篇文章可能很有趣。基本上通过选择具有最佳交叉验证分数的模型,您已经考虑了过度拟合。

此外,您应该将数据集分成两部分。对于第一个(验证),您运行交叉验证以选择模型,在您的情况下为 LinearSVC。对于第二个(测试),您再次运行交叉验证,但这次仅使用 LinearSVC 来获得准确度的无偏估计。

首先,对于任何类型的分析,您的数据量都非常小,因此如果有可能获得更多数据,那就更好了。其次,正如您提到的,您的数据不平衡,那么您发布的准确度指标就失去了所有意义,因为 140 个样本属于同一类,算法会为每个样本预测该类。因此,为了更好地评估计算精度、召回率和 f-score。第三,由于您的数据已经少于需要的数据,因此不要欠采样,而是使用 SMOTE(合成少数过采样技术)实现过采样。使用分层 KFold 和随机森林将是您最好的选择。但请记住,如果数据不够需要,就不可能在没有欠拟合或过拟合的情况下实现模型。