logo

机器学习概览

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}$

列出期望的模型

  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(泰坦尼克之灾)

房价预测

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

数字识别

Digital Recognition(数字识别)