实用机器学习(中文版)—李沐:https://www.bilibili.com/video/BV1Xh411p7M9?share_source=copy_web

实用机器学习

数据处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-buasJqxz-1645968448379)(../ZNV/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/python/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/image-20220226101419152.png)]

数据预处理的部分

python可以采用pandas基本实现,可以先看下数据

  • 比如一些常见的看是否有空值、describe中的最大值,均值,最小值;

  • 有的数据是严格的非负数,出现了肯定是异常值,以及有些特定的工业检验值是有一个大致的范围,太高太低明显是脏数据;

  • 部分数据我们还需要经过log函数处理,log10可以让分布均匀点;

数据预处理可视化分析的部分

可用一些常见的分布图

  • seaborn.histplot;

  • seaborn.displot(data,x=x轴,hue=‘type’(不同线的按照类别),kind=‘kde’(密度分布));

  • seaborn.boxplot(箱型图)(箱型图可以看到中间部分数据所在范围对比,下图为箱型图);

  • seaborn.heatmap(协方差图,类似相关系数图,可看不同列之间的相关性)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vfncfMN9-1645968448380)(../ZNV/%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/python/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/image-20220225204059790.png)]

数据清洗的部分

这里主要是表格形式数据

  • 部分数据类别错误,一般可以修改/删除;

  • 在箱型图中,上下两边的距离中间盒子的距离是1.5倍(默认1.5,可变换)的高度,一般认为这样的值是合理的,在此之外的是点表示,认为是错误的(注意具体问题具体分析,或许有些值是异常,但有时候也可能不是);

  • 有时候某些特征列值有因果关系或者是某种正比反比的相关性,也需要判断;

  • 有时候某些列的类型是固定的,比如整型,考虑怎么转,或者丢掉。

数据变形的部分

  • 表格数据

    • 归一化,固定在某个区间,一般是0-1区间内;
    • 取对数log;
    • 标准化,一般约束在-1-1之间;
  • 图片数据可改变图片分辨率大小、剪裁下采样等;

  • 视频图片可采样帧。文本一般先分词。

特征工程的部分

  • 表格数据
    • 表格形式的整型或者浮点型数据,要么直接就用或者划分多个区间(实则就是将连续型数据变成了离散值);
    • 对于一些离散型的字符串类型的数据,可以采用独热编码;
    • 时间类型的数据可以展开,比如展开为年、月份、日,一年那一天,星期是哪个星期、是星期几;
    • 组合特征,实则是笛卡尔积,就是某个特征m个列值和另外一个特征n个列值,组合产生m*n种情况;
  • 文本数据
    • 对于文本数据,一句话可以将其分词,统计词频,但这样就失去了语句中词的顺序性;
    • 对于文本数据,部分方法可将词可转换为向量,向量之间具有一定的语义性(比如word2vec、BERT、GPT-3)
  • 图片数据
    • 现在用预训练好的深度神经网络来做(ResNet,I3D)

绝大多数互联网企业的数据还是表格类型的格式化数据,因而主要的机器学习就可方便处理,可能涉及深度学习不是很多

评估+调参

评估

  • 目前主要的回归看的是r^2,也比较考虑mse、mae,分类主要是看f1,也比较考虑auc曲线、召回率;聚类主要看轮廓系数;

  • 过拟合和欠拟合部分

    • 关心的是泛化误差而不是训练误差(在新的数据上模型的表现情况);
    • 模型复杂度:模型能够去拟合各种各样函数的能力;
    • 数据复杂度:数据里面有多少信息,信息量越大,数据复杂度越大;
    • 模型选择:需要去选择一个合适的模型去避免欠拟合和过拟合【模型复杂度过高导致的过拟合(overfitting),模型复杂度过低导致的欠拟合(underfitting)】;
  • k折交叉验证法:常用的检验训练集和验证集的方法,现在很多用测试集代替了验证集,但按照规范,测试集只能使用一次,用来衡量泛化误差;

  • 偏差和方差

    • 偏差:训练到的模型与真实模型之间的区别;
    • 方差:每次学习的模型之间差别有多大;
    • 减小偏差:偏差很大,说明模型复杂度可能不够,可以使用一个模型复杂度高一点的模型(在神经网络中可以 增加层数 增加隐藏层单元个数(宽度));也可使用【Boosting;Stacking】
    • 减小方差:方差太大可能代表你的模型过于复杂,我们可以是用一个简单点的模型,或者是使用正则化(使用L2,L1正则项,限制住每个模型能够学习的范围);也可使用【Bagging;Stacking】
    • 降低噪声:在统计学习中,这个是不可以降低的误差,但是在真实的场景,这是来自于数据采集,可以通过更精确的数据采集,更干净的数据来使得噪声降低
    • 集成学习:使用多个模型来提升性能

调参

  • 人工记录
    • 将版本记录,或者将每一次的参数记录在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变大直到结束,以此类推
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐