本文所述内容,参考了机器学习实战:基于Scikit-Learn和TensorFlow一书。

机器学习系统分类

  1. 监督式学习/无监督式学习
    根据监督数量和监督类型,分为监督式学习、无监督式学习、半监督式学习和强化学习。

    • 监督式学习:提供给算法所需的有标注的训练数据。如分类任务(垃圾邮件分类)和回归任务(预测汽车价格)。
    • 无监督式学习:训练数据是未标注的。如聚类算法检测相似的访客分组,可视化算法,异常检测(如检测信用卡交易从而防止欺诈)和关联规则学习(推荐算法)。
    • 半监督式学习:大量未标记数据和少量的标记数据。如Goole相册,对人像识别后整合在一起(聚类),自己命名一下就可以了。半监督式学习算法多是监督式算法和无监督式算法的集合,如深度信念网络(DBN)使用了无监督式组件受限玻尔兹曼机(RBM)。
    • 强化学习:学习系统能够观察环境,做出选择,获得回报(reward)或惩罚,自行学习什么是最好的策略(policy)。如DeepMind的AlphaGo项目。过程大致如下: 观察--->选择执行策略--->执行--->获得奖励或惩罚--->升级策略--->不断迭代,直到产生最优策略。

    PS:降维是在不丢失太多信息的前提下简化数据,例如将多个相关特征合并为一个(特征提取)。

  2. 批量学习/在线学习

    • 批量学习:系统无法进行增量学习,必须使用所有可以使用的训练数据训练。
    • 在线学习:可以循序的给系统提供训练数据,逐步积累学习成果。在线学习流程如下:
      在线学习的学习率很重要,如果学习率很高,系统将很快适应新数据,同时忘记旧数据;如果学习率很低,系统会有很高的惰性,学习缓慢,同时对于新数据中的噪声和非典型数据点序列不敏感。
  3. 基于实例/模型学习
    良好的模型,需要在训练数据和新的对象实例上一样优秀。泛化的主要方法:基于实例和基于模型的学习。

    • 基于实例的学习:系统线完全记住学习示例,然后通过某种相似度量的方式将其泛化到新的实例上。
    • 基于模型的学习:构建示例的模型,然后使用模型进行预测。如构建线性模型:

机器学习的挑战

  1. 训练数据的不足
  2. 训练数据的不具代表性
    如果样本集太小,将会出现采样噪声(即非代表性数据被选中);即使是非常大的样本数据,如果采样方式欠妥,也同样可能导致非代表性数据集,这就是所谓的采样偏差。
  3. 质量差的数据(例如差质量的测量产生的数据)
  4. 无关特征:训练数据中需要由足够度的相关特征。
  5. 训练数据过度拟合:在训练数据上表现良好,泛化是却很差。当模型相对于训练数据的数量和噪声都过于复杂是,会发生过拟合。解决方法有:
    • 简化模型:选择参数较少的模型 ,减少训练数据中属性数量,或者约束模型(又称为正则化)。
    • 更多的训练数据。
    • 减少训练数据中的噪声,如修复数据错误或消除异常值。
  6. 训练数据拟合不足:对下层数据结构来说,模型过于简单。可以选择参数更多模型,给学习算法提供更好的特征集,减少模型约束(如减少正则化超参数)。

测试和验证

使用80%的数据进行训练,保留另外的20%来做测试。还需要留出验证集,使用不同的超参数训练多个模型,使用验证集来选出最好的模型,然后得到泛化误差的估值。常用交叉验证:将训练集分成若干个互补子集,然后每个模型都通过这些子集的不同组合来进行训练,之后用剩余的子集进行验证。一旦模型和超参数都被选定,最终的模型会带着这些超参数对整个训练集进行一次训练,最后再用测试集测量泛化误差。
没有免费的午餐(No Free Lunch)定理:如果你对数据绝对没有任何假设,那么你没有理由会更偏好于某个模型。