前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习基础知识

机器学习基础知识

作者头像
机器视觉CV
发布2019-07-15 19:29:09
6140
发布2019-07-15 19:29:09
举报
文章被收录于专栏:机器视觉CV机器视觉CV

建议阅读时长 8 分钟

1. 机器学习的四个分支

  1. 监督学习
    1. 序列生成:给定图像,输出描述
    2. 语法树预测
    3. 目标检测:绘制边框
    4. 图像分割
  2. 无监督学习
    1. 聚类
    2. 降维
  3. 自监督学习
  4. 强化学习:通过评价好坏来进行学习

2. 评估机器学习模型

训练集、验证集、测试集
  1. 简单留出验证
  2. K 折验证
  3. 数据打乱的重复 K 折验证

sklearn 模块有拆分数据集的功能

代码语言:javascript
复制
# 拆分数据集作为训练集和验证集
from sklearn.model_selection import train_test_split
X_train,  X_val, Y_train, Y_val = train_test_split(X_train, Y_train, test_size=0.1, random_state=2)
评估模型的注意事项
  1. 数据代表性:用来训练网络的数据应该尽量覆盖到整个样本的范围,通常做法是将数据随机打乱
  2. 时间序列:对于预测未来的模型,时间是一个重要的属性,对于这类问题,数据不应该被打乱
  3. 数据冗余:数据尽量不要有重复的样本,若重复的样本即出现在训练集又出现在测试集,容易造成数据泄漏,应该确保训练集和测试集数据之间没有交集

3. 数据预处理、特征工程、特征学习

数据预处理
  1. 向量化,将数据转换成神经网络可以处理的数据类型(张量), # keras 中的编码函数 from keras.utils import to_categorical one_hot_train_labels = to_categorical(train_labels)
    • 若是监督学习(分类)特别要注意数据和标签是一一对应的
    • 若是分类,对应的编码技术
  2. 值标准化(归一化):若不同特征的范围差距非常大,会造成较大的梯度更新,导致模型无法收敛
    1. 取值较小(0-1)
    2. 同质性:不同特征值应该在大致相同的范围
    3. 特征标准化:是平均值为 0,标准差为 1。x -= x.mean; x /= x.std
  3. 缺失值处理
特征工程

特征工程的本质:用更简单的方法表述问题,使问题变得容易,需要深入理解问题的本质。可能的话加一点遐想。

结合具体的工程背景,提取所需特征。

特征工程的好处:

  1. 良好的特征可以使用更少的资源解决问题
  2. 良好的特征可以使用更少的数据解决问题

4. 过拟合与欠拟合

深度学习的模型很擅长拟合训练数据,但是真正的难度在于泛化!

过拟合判断:判断一个模型是否过拟合,让模型在训练数据上进行预测,若预测的精度很差,说明是模型没有训练成功,反之才是模型过拟合。

验证数据上的性能经过几轮迭代后达到最高点,然后开始下降——模型开始出现过拟合

解决欠拟合
降低过拟合方法
  1. 获取更多的训练数据(最优)
  2. 减小网络大小:在模型容量(网络参数数量)过大和模型容量不足取个折中
    1. 初始时选择较少的层和参数
    2. 依次增加层数或神经元数量,直至这种增加对验证损失的影响很小
  3. 添加权重正则化(简单模型比复杂模型更不容易过拟合):强制让模型权重只能取较小的值,从而限制模型的复杂度
    1. L1 正则化:添加的成本与权重系数的绝对值。模型的某些系数刚好为 0
    2. L2 正则化:添加的成本与权重系数的平方。模型的系数很小(接近于 0 )但是不等于 0
  4. 添加 dropout 正则化(dropout 是神经网络最有效也是最常用的方法之一)—— Geoffrey Hinton 开发
    1. 训练时使用 dropout 使某些参数为 0,之后在使输出的参数按 dropout 比例放大。(常用方式)
    2. 训练时使用 dropout 使某些参数为 0,测试时是输出按的 dropout 比例缩小。
    3. 基本原理:在训练过程随机将该层的一些输出特征舍弃(设置为 0)
    4. dropout 比例:是被设置为 0 特征所占的比例,通常在 0.2-0.5 范围内。
    5. 测试时没有单元被舍弃,而该层的输出值需要按 dropout 比例缩小,因为这时比训练时有更多的单元被激活,需要加以平衡。(两种实现方式) keras 中有 dropout 层,可以方便的使用 dropout 正则化(重要的应该是考虑 dropout 比例?)
  5. early stopping。
  6. 减少迭代次数。使用验证数据集的损失和精度曲线来帮助设置迭代次数
  7. 增大学习率。

5. 机器学习通用流程

  1. 定义问题,收集数据
    1. 假设输出是可以根据输入进行预测的
    2. 假设可用的数据包足够多的信息,足以从学习输出和输入之间的关系
    3. 其他问题:有规律性的变化对数据的要求
    4. 输入数据是什么?预测什么?
    5. 要解决的是什么问题?(二分类、多分类、标量回归、向量回归、聚类、生成会强化学习)
    6. 做假设
  2. 选择衡量成功的指标(优化的目标)
    1. 平衡分类问题(每个类别的可能性相同)常用指标:精度和接收者操作特征曲线线下面积
    2. 类别不平衡问题:准确率和召回率
    3. 排序或多标签分类:平均准确率均值
    4. 自定义指标:Kaggle 网站的比赛不同问题的评估标准
  3. 确定评估方法
    1. 留出验证集:数据量大时使用
    2. K 折交叉验证:留给验证的样本量太少
    3. 重复 K 折验证:可用的数据很少
  4. 数据准备与初始化 对于图像处理 keras 有图像处理辅助工具的模块 from keras.preprocessing.image import ImageDataGenerator
    1. 数据格式化为机器学习的格式(如张量)
    2. 归一化处理(取值进行缩放,不同特征取值缩放到一致的范围)
    3. 特征工程
  5. 开发比基准更好的模型
    1. 最后一层的激活:
    2. 损失函数:见下表
    3. 优化配置:优化器的选择?学习率的选择?大多数情况下使用 rmsprop 及其默认的学习率是稳妥的
  1. 扩大模型规模:开发过拟合的模型(越过过拟合再调节) 观察模型在验证集上的性能
    1. 添加更多的层
    2. 添加更多的神经元
    3. 训练更多的轮次
  2. 模型正则化与调节超参数
    1. 添加 dropout
    2. 尝试不同的网络构架
    3. 正则化(L1、L2)
    4. 不同的超参数(每层的神经元个数、优化器的学习率)

Github: https://github.com/FLyingLSJ

CSDN : https://blog.csdn.net/LSJ944830401

BLOG: https://flyinglsj.github.io/


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器视觉CV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. 评估机器学习模型
    • 训练集、验证集、测试集
      • 评估模型的注意事项
      • 3. 数据预处理、特征工程、特征学习
        • 数据预处理
          • 特征工程
          • 4. 过拟合与欠拟合
            • 解决欠拟合
              • 降低过拟合方法
              • 5. 机器学习通用流程
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档