实用机器学习(中文版)—李沐:https://www.bilibili.com/video/BV1Xh411p7M9?share_source=copy_web
实用机器学习
数据处理
数据预处理的部分
python可以采用pandas基本实现,可以先看下数据
-
比如一些常见的看是否有空值、describe中的最大值,均值,最小值; -
有的数据是严格的非负数,出现了肯定是异常值,以及有些特定的工业检验值是有一个大致的范围,太高太低明显是脏数据; -
部分数据我们还需要经过log函数处理,log10可以让分布均匀点;
数据预处理可视化分析的部分
可用一些常见的分布图
-
seaborn.histplot; -
seaborn.displot(data,x=x轴,hue=‘type’(不同线的按照类别),kind=‘kde’(密度分布)); -
seaborn.boxplot(箱型图)(箱型图可以看到中间部分数据所在范围对比,下图为箱型图); -
seaborn.heatmap(协方差图,类似相关系数图,可看不同列之间的相关性)
数据清洗的部分
这里主要是表格形式数据
-
部分数据类别错误,一般可以修改/删除; -
在箱型图中,上下两边的距离中间盒子的距离是1.5倍(默认1.5,可变换)的高度,一般认为这样的值是合理的,在此之外的是点表示,认为是错误的(注意具体问题具体分析,或许有些值是异常,但有时候也可能不是); -
有时候某些特征列值有因果关系或者是某种正比反比的相关性,也需要判断; -
有时候某些列的类型是固定的,比如整型,考虑怎么转,或者丢掉。
数据变形的部分
-
表格数据
- 归一化,固定在某个区间,一般是0-1区间内;
- 取对数log;
- 标准化,一般约束在-1-1之间;
-
图片数据可改变图片分辨率大小、剪裁下采样等; -
视频图片可采样帧。文本一般先分词。
特征工程的部分
- 表格数据
- 表格形式的整型或者浮点型数据,要么直接就用或者划分多个区间(实则就是将连续型数据变成了离散值);
- 对于一些离散型的字符串类型的数据,可以采用独热编码;
- 时间类型的数据可以展开,比如展开为年、月份、日,一年那一天,星期是哪个星期、是星期几;
- 组合特征,实则是笛卡尔积,就是某个特征m个列值和另外一个特征n个列值,组合产生m*n种情况;
- 文本数据
- 对于文本数据,一句话可以将其分词,统计词频,但这样就失去了语句中词的顺序性;
- 对于文本数据,部分方法可将词可转换为向量,向量之间具有一定的语义性(比如word2vec、BERT、GPT-3)
- 图片数据
- 现在用预训练好的深度神经网络来做(ResNet,I3D)
绝大多数互联网企业的数据还是表格类型的格式化数据,因而主要的机器学习就可方便处理,可能涉及深度学习不是很多
评估+调参
评估
调参
- 人工记录
- 将版本记录,或者将每一次的参数记录在excel/txt文件,方便比较对比
重复实验是很难的,最好及时记录,比如会有硬件的差异、库的差异、代码的差异、随机性也有可能不一样(可以指定随机种子)
-
机器调参
- 比如跑循环,遍历大多数参数
- 自动调参(AutoML) :HPO
超参数优化
HPO:
-
BO
-
网格搜索
- 穷举,对每一组值进行迭代,每多一个参数就是指数级别的增长
-
随机搜索(主选)
- 只选择n次,每一次随机取一组参数值,n的值要取合适,玄学,也可以给定时间,到什么时候结束
-
贝叶斯优化
- 根据当前选择参数的进行预测一个值,会根据两个条件选择下一参数:1、置信的区间比较大;2、根据超参数拟合出的目标函数(可能是评价的指标)越大越好
-
Multi-Fidelity
- Successive Halving
- 选择n个超参数,每个超参数训练m个数据样本,第一次训练结果后保留n/2的超参数,将数据样本提升2m,并进行训练,下一次又保留一半在训练提升一倍,以此类推
- Hyperband
- 多个successive halving,开始m比较小、n比较大的如同上面的进行一直到结束,第二个就是n变小,m变大直到结束,以此类推
|