【机器学习】机器学习阶段一 机器学习了解 - hippowc/hippowc.github.io GitHub Wiki

ML 入门

ml的作用

  • 解决预测问题
    • 输入一个x,预测一个合理的y
  • 典型例子
    • 二分类问题(有两个可能的输出结果)
      • 输入一封邮件,输出是否是垃圾邮件
    • 多分类问题
      • 根据症状,预测疾病
    • 回归问题
      • 预测股票价格,输入历史股票价格,输出明天的股票价格

预测函数

  • 预测函数输入x,输出y
  • 我们需要为了解决特定的问题寻找合适的预测函数
  • ml可以帮忙找到最好的预测函数

ml是什么

什么不是ml

  • 专家系统
    • 基于规则的方式
    • 根据专家经验,了解处理过程,然后将这个过程实现成为算法
  • 专家系统的问题
    • 需要花很大精力去建立
    • 不能泛化处理意料之外的输入
    • 不能自然的处理不确定性
    • “brittle”脆性

现代AI

  • 不是去实现专家决策过程
  • 机器自发学习,只提供训练数据

关键概念

  • 常见ml问题类型
    • 分类
    • 多分类
    • 回归
  • 预测函数
    • 根据输入x预测输出y
  • 训练数据
    • 一系列(input x, output y)对
  • 有监督学习算法
    • 使用训练数据,产出一个预测函数

ML流程中的元素

给ML算法“喂”输入数据

  • 原始输入类型可以是
    • 文本
    • 变长时间序列
    • 图片
    • 声音记录
    • DNA序列
  • 不过大多数ML预测函数希望输入是:
    • 定长的数字数组
    • double[d]
    • R^d

特征提取

  • 特征提取是指将机器学习算法不能识别的原始数据转化为算法可以识别的特征的过程
    • 比如,给定一组文档,我们的任务是要做文档分类。直接将文档输入给分类器是无法工作的,因为每篇文档有不同的字不一样,字的数目也不一样。而绝大多数的分类器只是接受标准化的矩阵格式的输入,比如每一行是一篇文档,每一列是文档的属性(特征)。 将原始文档转化为标准的矩阵格式输入的过程就可看作是特征向量提取。
  • 特征选择是指去掉无关特征,保留相关特征的过程,也可以认为是从所有的特征中选择一个最好的特征子集。特征选择本质上可以认为是降维的过程
  • 数据和特征决定机器学习的上限,而模型和算法只是逼近这个上限。

特征模板?

  • One-Hot Encoding?

标记数据

  • 将特征向量和输出标签打包
  • 每一行是一个标记的资料
  • 最后一列是“输出”或者“标记列”
  • 需要对未标记的特征向量进行预测

预测函数

预测函数:

  • 输入:一个特征向量
  • 输出:一个标记

学习算法

学习算法:

  • 输入:标记的数据
  • 输出:一个预测函数

评估一个预测函数

loss function 损失函数

loss(prediction,target) 函数返回的值叫做 “the loss”

分类损失函数

  • Classification loss or “0/1 Loss”
    • 如果预测错误 Loss是1
    • 如果预测正确 Loss是0
  • Square loss for 回归问题
    • loss = (predicted - target)2

评估一个预测函数

  • 一个预测函数:测试数据后,平均分类loss是0.01
  • 如果不达标则需要在新的输入做的更好

测试集

  • 测试集是独立于训练数据的标记数据
  • 譬如:将所有标记数据分为80%的训练数据和20%的测试数据
  • 测试和训练的分配原则
    • 测试应该尽量呈现实际应用的场景
    • 随机分离标注数据通常是正确的途径
      • why?
    • 但是要考虑时间序列预测,是否要把时间随机分配?

其他的测试资源 ≠ 部署

  • Leakage 泄露
    • 指的是关于标签结果的信息泄露到了特征中
  • Sample Bias 抽样偏差
    • 测试输入和实际输入有不同的分布
  • Nonstationarity 非平稳性
    • 建模的东西会随时间改变

模型复杂和过度拟合

polynomial curve fitting 多项式曲线拟合(一个ML算法)

  • 通过一个多项式进行拟合:f(x) = w0 + w1x + w2x^2 + ... + wMx^M
  • 一个学习函数:double[] fitPolynomial(Data data, int M)
    • 这个函数就是做学习的,返回w0, w1,...wM 这个数组
    • 根据这个数组和M就可以创建预测函数:double predictPolynomial(double[] w, int M, double x)
    • 学习算法可以找到最好的参数,w0,w1,...wM
  • 参数和超参数(hyperparameter)
    • 参数:就是机器学习需要确定的参数:w0...wM
    • 超参数:是ML算法本身的一个参数,上面的例子中指的是M
    • 超参数是学习不到的,是预先定义的,模型中的调参指的就是调超参数
  • ML简单流程总结
    • 选择预测函数模型
    • 调节超参数
    • 写学习函数
    • 获得预测函数模型

多项式模型复杂度

  • M控制模型复杂度
  • M越大,使得预测函数更复杂
  • 模型复杂度高时,对于训练数据表现好,但是对于测试数据没有变更好

过拟合

  • 简单说,如果训练数据好,但是测试表现差,那么就是过拟合
  • 如何修复过拟合
    • 减小模型复杂度
    • 使用更多的训练数据

超参数

  • 几乎所有的学习算法都有至少一个超参数或者叫调整参数 tuning parameter
  • 你需要tune这些值
  • 超参数控制很多事情
    • 模型复杂度
    • 控制模型复杂度类型
    • 优化算法
    • 模型类型

machine learning 流程总览

  • 将标记数据分为 training、validation和test 集合
  • 重复,知道validation集合的表现足够好
    • 建立、修改你的特征提取方法论
    • 选择一些ML算法
    • 通过一些超参数设置训练ML模型
    • 在验证集上评估预测函数
  • 重新训练模型
  • 评估在测试集上的表现
  • 重新在所有标记数据上进行训练
  • 部署最终的预测函数

概念总结

问题

什么是回归?

  • 分类问题与回归问题的区别

    • 输出类型:离散 -- 连续
    • 目的:寻找决策边界 -- 找到最优拟合
  • 回归问题输出是定量的,可以衡量输出值与真实值误差的大小,譬如预测价格,真实为5元,6元误差为1,7元误差为2

  • 分类问题输出是定性的,分类只有正确和错误,譬如应该分到class5,那么分到class6,和class7 误差没有区别

  • 特征模板

    • 如何进行特征提取?
  • 时间序列预测

    • 时间序列预测分析就是利用过去一段时间内某事件时间的特征来预测未来一段时间内该事件的特征。
    • 和回归分析模型的预测不同,时间序列模型是依赖于事件发生的先后顺序的
  • 均方误差(英語:mean-square error、MSE)

  • Cross-Validation 交叉验证

    • 在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果
    • 当用于模型训练的数据量越大时,训练出来的模型通常效果会越好。所以训练集和测试集的划分意味着我们无法充分利用我们手头已有的数据,所以得到的模型效果也会受到一定的影响。
    • LOOCV Leave-one-out cross-validation
      • 计算量过于大
    • K-fold Cross Validation
      • 每次的测试集将不再只包含一个数据,而是多个,具体数目将根据K的选取决定
  • 召回率(recall)和精确率(precision)

    • 对于一个样本包含正类和负类,预测函数要找到所有的正类
    • 召回率:扫描完整个样本后,预测正确的正类 / (预测正确的正类 + 预测错误的正类)
    • 精确率:扫描完整个样本后,预测正确的正类 / (预测正确的正类 + 预测错误的负类)
    • F 值 = 正确率 * 召回率 * 2 / (正确率 + 召回率)(F值即为正确率和召回率的调和平均值)
  • 机器学习力的模型通俗来说就是一个函数关系,表明输入数据到输出数据的映射,基本的假设前提是输入数据和输出数据符合某种联合概率分布,而模型训练的过程其实就是在确定函数式的具体参数值的过程,比如假设你要做一个多项式回归分析的模型,比如f(x)=w1x1+w2x2+w3x3,那么模型训练的过程中其实就是在学习对应的w的值