1、数据清理
[kaggle]Data Cleaning:https://www.kaggle.com/learn/data-cleaning
该课程关于数据的处理,主要涉及:
- 缺失值处理:无价值的缺失值可以直接删除,由于未填写导致的缺失可以均值填充,或请根据其他行列信息推出。
- 归一化和标准化的区别:归一化是缩放,标准化是改变分布;当模型和距离计算相关则需要归一化,模型使用的前提假设是基于正态分布的,则要标准化。
- 日期的解析
- 编码问题的处理
- 离散数据的处理,例如移除空格,转为小写等
小结:基础入门
2、样本不均衡
Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset: https://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/
该博客关于样本不均衡应该怎么处理?
- 采集更多数据
- accuracy不再可靠,用其他性能度量
- 重采样:过采样、欠采样
- SMOTE
- 尝试不同的算法,例如决策树在不均衡的数据上表现好
- 惩罚因子
- 其他
不过博客中提到的不均衡都是2:8,1:9这种的,像信用卡欺诈那种999:1的不均衡还能这样处理吗?
参数调优
调参上分手册
https://mp.weixin.qq.com/s/Z3Efmix6BjZe4hrIL3dwfg
1、在训练中不断寻找最合适当前状态的学习率,根据学习率-损失曲线得到最优学习率参数
2、learning-rate与batch-size的关系:一般来说,越大的batch-size使用越大的学习率
3、权重初始化:常用的权重初始化算法是「kaiming_normal」或者「xavier_normal」,不初始化可能会减慢收敛速度,影响收敛效果
4、Dropout一般适合于全连接层部分,而卷积层由于其参数并不是很多,所以不需要dropout
5、数据集的处理:有「数据筛选」以及「数据增强」,数据预处理有zero-center(这个挺常用的),PCA whitening(这个用的比较少);尽量对数据做shuffle;
6、多模型融合:提高模型性能和鲁棒性大法,probs融合和投票法
7、差分学习率的意思,在不同的层设置不同的学习率,可以提高神经网络的训练效果
8、余弦退火(cosine annealing)和热重启的随机梯度下降
9、在图像数据集不是特别充足的情况下,可以先训练小尺寸图像,然后增大尺寸并再次训练相同模型。通过输入不同尺度的图像数据集,因为神经网络卷积池化的特殊性,这样可以让神经网络充分地学习不同分辨率下图像的特征
10、交叉验证往往是对实际应用中 「数据不充足」 而采用的,基本目的就是重复使用数据。这种方法只适合数据量比较小的情况,计算量非常大的情况很少用到这种方法
11、大多数采用的优化算法还是是adam和SGD+monmentum。adam是不需要特别调lr,sgd要多花点时间调lr和initial weights。
12、训练技巧:要做梯度归一化,clip c(梯度裁剪),dropout对小数据防止过拟合有很好的效果,值一般设为0.5,dropout的位置比较有讲究, 对于RNN,建议放到输入->RNN与RNN->输出的位置;除了gate之类的地方,需要把输出限制成0-1之外,尽量不要用sigmoid;rnn的dim和embdding size,一般从128上下开始调整. batch size,一般从128左右开始调整. batch size合适最重要,并不是越大越好;LSTM 的forget gate的bias,用1.0或者更大的值做初始化,可以取得更好的结果;Batch Normalization据说可以提升效果
13、在数据集很大的情况下,建议先用 1/100、1/10 的数据跑一跑,对模型性能和训练时间有个底,外推一下全量数据到底需要跑多久