Dont_overfit_ii
2019/4/9开始kaggle的Don't Overfit! II竞赛,竞赛含250条训练数据,需要据此预测19.8k条数据的目标值。特征300个,目标值为0-1变量,训练样本含正样本160条,负样本90条。
显然,此竞赛的特点是小样本和不平衡样本。
关于小样本的解决参考4;关于不平衡数据参考2。
注意:不平衡数据不会造成过拟合,不平衡数据倾向于归入大分类的误分类,AUCROC是度量这种误分类的度量函数。??????
关于不平衡:
按参考2,解决不平衡学习问题的五种方法包括: 1. Up-sample the minority class对少数分类升采样 2. Down-sample the majority class对多数分类降采样 3. Change your performance metric改变度量函数 4. Penalize algorithms (cost-sensitive training)惩罚算法(即代价敏感训练) 5. Use tree-based algorithms采用基于树的算法
COSTCLA、costsensitive包可实现方法4。
按TOM FAWCETT,分类问题不能简单地预测标签。因为但: 1. 预测标签浪费很多信息,概率才是更重要的。 2. 虽然很多分类学习器都有预测概率这个功能,但很可能其简单以0.5作为阈值划分分类标签的依据。由于算法、数据不平衡和训练测试数据集标签比例不均衡等原因,此模型所谓的”概率“是不准确的,所以不可以简单以0.5作概率阈值。 3. 在概率不准情况下需要选择合适的概率阈值作为划分标签的依据。 4.也可以校准,在sklearn中有sklearn.calibration.CalibratedClassifierCV。TOM FAWCETT先生的意思我并没有叙述准确,详见其博客(参考4、5)。
那么将train分成tra、val,选取学习器比如逻辑回归,高参由tra进行cv获取,运用全部tra并cv获取的高参训练模型。查看模型对tra和val的aucroc,比较tra和val的aucroc,若接近说明没有过拟合,可用这个模型对test进行预测。class_weight需使weigh乘以分类样本数得到的乘积平衡,在sklearn可选‘balanced’。其他包应根据分类样本数自己设定。
第一步选择逻辑回归,重复上行过程,这个结果作为基础,其他学习器的结果需好于此学习器。
参考:
- 1.Investigation on handling Structured & Imbalanced Datasets with Deep Learning;
- 2.EXPLAINERS TUTORIALS__How to Handle Imbalanced Classes in Machine Learning;
- 3.Cost-sensitive 分类算法——综述与实验;
- 4.TOM FAWCETT__Learning from Imbalanced Classes;
- 5.TOM FAWCETT__The Basics of Classifier Evaluation: Part 2;
- 4.EXPLAINERS TUTORIALS__Overfitting in Machine Learning: What It Is and How to Prevent It;
- 5.Tuning the hyper-parameters of an estimator;
- 2.EXPLAINERS TUTORIALS__How to Handle Imbalanced Classes in Machine Learning;
- 3.Cost-sensitive 分类算法——综述与实验;
- 4.EXPLAINERS TUTORIALS__Overfitting in Machine Learning: What It Is and How to Prevent It;