第四章,机器学习基础
二分类,多分类,标量回归都属于监督学习的例子。
机器学习四大分支:
监督学习:学会将输入数据映射到已知目标,也叫做标注。
监督学习变体:序列生成,语法树检测,目标检测,图像分割。
无监督学习:没有目标的情况下寻找输入数据的变换,目的在于数据可视化,数据压缩,数据去噪或更好理解数据中的相关性。降维和聚类是常用无监督学习方法。
自监督学习:没有人工输入的标签,标签从输入数据中生成,采用启发式算法生成。
时序监督学习:用未来的输入数据作为监督。
强化学习:智能体接收有关环境的信息,学会选择使某种奖励最大化的行动。
评估模型的三个集合:训练集(训练模型),验证集(评估模型),测试集(找到最佳参数后测试)。
开发模型时总是需要调节模型配置,调节过程需要使用模型再验证数据上的性能作为反馈信号,这个调节过程本质上是一种学习。
可用数据较少时的评估方法:
- 简单的留出验证:留出一定比例数据作为验证集,剩余数据训练,测试集上评估。划分数据前随机打乱,导致模型性能差别很大。
- K折验证:数据划分为大小相同的K个分区,对于每个分区i,再剩余的K-1个分区上进行训练,在分区上评估模型,最终分数等于k个分数的平均值。
- 带有打乱数据的重复K折验证:多次使用K折验证,每次将数据划分为K个分区之前都将数据打乱。最终分数是每次K折验证分数的平均值。
模型评估注意事项:
数据要具有代表性,分类问题前,通常应随机打乱数据;
预测未来,划分数据前不应该随机打乱数据,为避免时间泄露,应保证测试数据时间晚于训练数据集;
确保训练集和验证集之间没有交集,防止数据冗余。
数据预处理:
神经网络的所有输入和目标都必须是浮点型张量(特定情况下为整形张量)。处理之前都需要数据向量化(数据必须首先转换为张量)。
数据输入网络前,对每个特征做标准化,使其均值为0,标准差为1。
对于取值相对较大的数据或异质数据(数据特征范围差异大)可能导致网络无法收敛。输入数据应保持同质性,确保取值较小。
处理好缺失值:将缺失值设置为0;当测试数据中含有缺失值时,认为生成一些有缺失项的训练样本,多次复制一些训练样本,删除测试数据的可能缺失的特征。
特征工程:数据输入模型之前,利用数据和算法知识对数据进行硬编码的转换,以改善模型效果。本质上是用简单的方式表述问题,使问题变得更容易。消耗更少资源,减少对数据量的过度依赖。
优化(学习过程):调节模型以在训练数据上得到最佳性能。
泛化(学习目的):训练好的模型在前所未见的数据上的性能好坏。
降低过拟合:获取更多训练数据>调节模型允许存储的信息量
常见正则化方法
- 减小模型大小,减少模型中可学习参数的个数。
- 添加权重正则化:因为简单模型(参数值分布的熵更小的模型)比复杂模型更不容易过拟合。所以强制让模型权重只能取得较小的值,限制模型复杂度,使得权重值分布更加规则。实现方法是向网络损失函数中添加较大权重值相关的成本。形式有如下两种:
- L1正则化:添加成本与权重系数的绝对值(权重的L1范数(特征稀疏,去掉没有信息的特征))成正比。
- L2正则化(权重衰减):添加的成本与权重系数的平方(权重的L2范数(防止迎合过于复杂的训练集而造成的过拟合情况))成正比。在Keras中,添加权重正则化的方法是向层传递权重正则化项实例作为关键字参数。
from keras import regularizers
Regularizers.l1()
Regularizers.l2()
惩罚项只在训练时添加
3 .添加dropout正则化:对某一层使用dropout,就是在训练过程中随机将该层的一些输出特征舍弃。Dropout比率是被设为 的特征所占的比例。输出值按dropout比率缩小。
平衡分类问题:精度和接收者操作特征曲线下面积是常用指标;
类别不平衡问题:使用准确率和召回率
问题类型 |
最后一层激活 |
损失函数 |
二分类 |
Sigmoid |
Binary_crossentropy(交叉熵二进制) |
多分类、单标签 |
Softmax |
Categorical_crossentropy(分类交叉熵) |
多分类、多标签 |
Sigmod |
Binary_crossentropy |
回归到任意值 |
无 |
Mse(均方误差) |
回归到0~1范围内的值 |
Sigmoid |
Mse或binary_crossentropy |
机器学习基本流程:
- 定义问题,收集数据集(机器学习只能记忆训练数据中存在的模式)
- 选择好衡量成功指标
- 确定评估方法:留出验证集,k折交叉,重复的k折交叉
- 准备数据,处理数据
- 开发比基准更好的模型(获得统计功效)
- 扩大模型规模:开发过拟合的模型
- 模型正则化与调节超参数,直到模型达到最佳性能