机器学习概览

Machine Learning

wangzf 2023-02-24

机器学习系统的种类

  1. 监督、无监督、半监督学习
  2. 批量学习、在线学习
  3. 基于实例、基于模型的学习

机器学习的主要挑战

  1. 训练数据的数量不足
  2. 训练数据不具有代表性
  3. 数据质量差
  4. 无关特征
  5. 模型在训练数据上过度拟合
    • 改进模型过拟合的方法之一是提供更多的训练数据,直到模型验证误差接近训练误差
    • 模型复杂度高,对模型进行正则化:
      • 多项式模型:降低多项式的阶数
      • 岭回归,Ridge Regression
      • Lasso 回归,Lasso Regression
      • 弹性网络,Elastic Net
  6. 模型在训练数据上欠拟合
    • 模型复杂度低:如果模型对训练数据欠拟合,添加更多的训练样本也没用, 此时需要使用更复杂的模型,或找到更好的特征
  7. 偏差/方差权衡
    • 模型的泛华误差可以被表示为三个不同的误差之和:
      • 偏差:这部分泛化误差的原因在于错误的假设:比如假设数据是线性的:而实际上是二次的。 高偏差模型最有可能对训练数据拟合不足
      • 方差:这部分误差是模型对训练数据的微小变化过度敏感导致的。 具有高自由度的模型,很可能有高方差,所以很容易对训练数据过拟合
      • 不可避免的误差: 这部分误差是因为数据本身的噪声所致,减少这部分误差的唯一方法是清理数据
    • 增加模型的复杂度通常会显著提升模型的方差,减少偏差;反过来,降低模型的复杂度则会提升模型的偏差,降低方差

机器学习建模法则

架构问题,关注蓝图

  1. 用商业术语定义目标;
  2. 方案如何使用?
  3. 目前的解决方案/办法是什么?
  4. 应该如何架构问题(有监督/无监督,在线/离线…)?
  5. 如何测量性能?
  6. 性能指标是否与业务目标一致?
  7. 每个业务目标需要的最低性能是什么?
  8. 有没有一些相似的问题?能重用一些经验和工具吗?
  9. 有没有相关有经验的人(专家)?
  10. 如何手动解决此问题?
  11. 列出目前为止你(或其他人)的假设;
  12. 如果可能的话,验证假设;

获取数据

  1. 列出需要的数据及其体量;
  2. 查找并记录获得数据的途径;
  3. 检查需要的空间;
  4. 检查法律义务,必要时获得授权;
  5. 获取访问权限;
  6. 创建工作空间,确保具有足够的存储空间;
  7. 获取数据;
  8. 将数据转换为可操作的格式,不改变数据本身;
  9. 确保删除或保护敏感信息;
  10. 检查数据的类型和大小;
  11. 采样一个测试数据集,放在一边,永远不要使用它;
  • 尽可能地自动化,以便获取最新数据

研究数据

  1. 创建数据的副本用于研究;
    • 如果需要,可以将其抽样为可管理的大小;
  2. 创建一个 Jupyter 笔记本来记录数据研究;
  3. 研究每个属性及其特征:
    • 特征名称
    • 特征类型
      • 类别型
        • 有序
        • 无序
      • 数值型
        • 整型
        • 浮点型
        • 有界
        • 无界
      • 文本
      • 结构
    • 缺失值的百分比
    • 噪音和噪音类型
      • 随机
      • 异常
      • 舍入误差
    • 可能有用的任务
    • 分布类型
      • 高斯分布
      • 均匀分布
      • 对数分布
  4. 对于有监督学习任务,确认目标属性;
  5. 可视化数据;
  6. 研究特征之间的相关性;
  7. 研究如何手动解决问题;
  8. 确认希望使用转换;
  9. 确认可能有用的额外数据;
  10. 记录学习到的东西;
  • 试着从这些步骤的领域专家那里获取灵感

准备数据

  1. 清理数据:
    • 修复或删除异常值;
    • 填充缺失值;
  2. 特征选择:
    • 删除不能为任务提供任何有用信息的特征;
      • 0 方差或者近似 0 方差特征
  3. 处理特征(在适当的情况下):
    • 离散化连续特征;
    • 分解特征:
      • 分类
      • 日期/时间
    • 添加期望的特征转换
      • $log(x)$
      • $\sqrt{(x)}$
      • $x^{2}$
  • 在数据的副本上工作(保持原始数据集不变);
  • 编写适用于所有数据转换的函数:
    • 可以很容易准备下一次得到新数据时的数据;
    • 可以在未来的项目中使用这些转换;
    • 清理和准备测试数据集(testing);
    • 一旦解决方案失败,用来清理和准备新数据集;
    • 可以轻松地将准备作为超参数;

列出期望的模型

  1. 使用标准参数,从不同类别的模型中训练需求快速地不成熟的模型;
    • 线性
    • 朴素贝叶斯
    • SVM
    • 随机森林
    • 神经网络
  2. 评估并比较这些模型的性能;
    • 对于每个模型使用交叉验证计算性能的测试的均值和标准差;
  3. 分析每个算法最终要的变量;
  4. 分析模型产生的错误类型;
    • 人类用什么样的数据避免这些错误;
  5. 快速进行特征选择和处理;
  6. 对前面5步进行一到两次快速迭代;
  7. 列出前3到5个最优希望的模型,倾向于选择有不同错误类型的模型;
  • 如果数据很大,可能需要采样为较小的训练集,以便于在合理的时间内训练不同的模型;
  • 尽可能地自动化这些步骤;

微调模型

  1. 使用交叉验证微调超参数;
    • 把数据转换当做超参数,尤其是不确定时
      • 缺失值的填充
    • 需要研究的超参数值很少: Grid Search
    • 需要研究的超参数值很多: Random Grid Search
  2. 尝试组合方法,组合多个好魔性往往比单独运行效果好;
  3. 一旦对最终模型有信息,在测试集上测量性能以估计泛化误差;
  • 使用尽可能多的数据,特别是在微调结束时;
  • 自动化

展示解决方案

  1. 文档化所做的工作
  2. 创建完美的演示;
    • 确保突出蓝图;
  3. 解释为什么解决方案达到了业务目标;
  4. 展示发现的一些有趣的内容;
    • 描述什么可以工作,什么不行;
    • 列出假设和系统的局限性
  5. 确保关键发现被完美展示或易于记忆的称述;

启动、监视、维护系统

  1. 准备好生产环境的解决方案;
    • 插入生产数据输入
    • 写单元测试
  2. 编写监控代码,定期检查系统的性能,出问题时及时报警;
    • 需要考虑缓慢退化: 随着数据的增加,模型往往会不合适;
    • 测量性能可能需要人工流水线;
    • 监控输入质量
  3. 定期对新数据重新建模(自动化);

模型优化

  1. 研究模型学习曲线
  2. 判断模型是否过拟合或者欠拟合,并作出相应的调整
  3. 对模型权重参数进行分析
  4. 对于权重绝对值高或低的特征,可以进行更细化的工作,也可以进行特征组合
  5. 进行 Bad-Case 分析,针对错误的例子确定是否还有地方可以修改挖掘
  6. 进行模型融合

机器学习项目

泰坦尼克之灾

Titanic(泰坦尼克之灾)

  • 中文教程:逻辑回归应用之Kaggle泰坦尼克之灾
  • 英文教程:An Interactive Data Science Tutorial

房价预测

House Prices: Advanced Regression Techniques(房价预测)

  • 中文教程:Kaggle竞赛 — 2017年房价预测
  • 英文教程:How to get to TOP 25% with Simple Model using sklearn

数字识别

Digital Recognition(数字识别)

  • 中文教程:大数据竞赛平台—Kaggle 入门
  • 英文教程:Interactive Intro to Dimensionality Reduction