语音合成学习(五)学习笔记
我们先要清楚什么是模型。
模型是指一种数学函数,它能够将输入数据映射到预测输出
可以表示为y=f(x) y为预期结果 ,f(x) 的f为模型,x为数据内容
模型的评估与选择
经验误差与过拟合
误差
错误率:分类错误的样本占样本总数的比例:E = a m
m 个样本中有 a 个样本分类错误
误差:学习器的实际预测输出值与样本真实输出值之间的差异。
训练误差:学习器在训练集上的误差,也叫经验误差。
泛化误差:在新样本上的误差。
机器学习上,我们希望得到泛化误差小的学习器。比如我有一个区分性别的分类器,它不仅可以区分动物的性别,把它用到单性花上也能很好的区分出雌雄株。然而我们并不知道新样本长啥样,所以我们努力做到训练误差最小化。很多情况下,我们可以做到经验误差很小,对多有的训练样本分类全部正确,这是不是我们想要的学习器呢?不幸的是:这种学习器的泛化能力一般很小,对待新样本多数情况下都不好。
泛化能力: 对没有见过的数据的预测能力
过拟合与欠拟合
过拟合: 学习样本学得太好了,很可能已经把训练样本自身的一些特点当做了所有样本都具有的一般性质,这样会导致泛化能力的下降,就是偏科的同学
欠拟合: 对训练样本的一般性质都没有学好,就是差生,一样的不行。
代价曲线
1.明确参数: p = m+/m
2.解释(基本思路)
代价曲线目的: 对于一个模型,根据p(正样例,反样例)不同 找到使得代价总期望最小的模型的阈值
(我们每个模型的算法是固定的,但是每个算法算完之后给的阈值是不固定的,我们要找到这个阈值,把模型确定下来,模型确认下来之后,比例就出来了,指标就出来了。根据总代价期望来确定模型的性能指标,这样就能够去对比模型,否则无法去对比不同模型)
横轴: 归一化的正概率代价期望
分母用来做归一化
cost 01-> 是不是固定的值 我们知道 p变得时候求期望的最小值 为什么要用p乘这个值呢?
p变动 选择不同的阈值
纵轴:归一化的总代价期望
分子 :
FNR R就是横向比 N 就是Negative predictions 里错的
FPR R就是横向比 P就是Positive predictions里面错的
various thresholds : 总损失期望
大致过程:给定p,给定模型。根据归一化代价期望的最小值
确定FPR FNR 的横向比 的比例。
阈值决定了这个比例。 反过来说这个比例确定了,阈值也就 确定了, 所以这时模型的阈值也对应确定下来了
假设检验目的
例: 一个数据 x , 有一个训练集train 验证集val 测试集 test
有一个模型 f 在训练集通过训练得到一个 y' 验证集得到一个 y' 测试集得到一个 y'
通过和真实的y 对比 得到一个错误率 E 训练 验证 测试 都会得到一个错误率
真实去使用时候 很多的数据 已知了我在测试的错误率是 ε 有多大的程度上能保证我在真实数据情况下错误率是一个什么程度。这个保证程度就是比较检验的目的。
第一个程度指标
在测试集test上得到了一个泛化性能 比如错误率ε
在真实数据test_all得到了一个ε 0不同的测试集 错误率不同 同一个模型在t上测试了很多次 得到的结果也不同这样的情况下 怎样去评估真实数据的泛化能力 尤其是在真实数据上多大程度上去保证这个真实数据的泛化能力
Test test——all
m 共有m个样本
m‘ 判断错误的个数
错误率ε 就是 m' /m 假设错误率是ε = 0.3
假设m 是10 已经错误率 查出出现这种情况的错误率是多少个 m'
评估方法:
1. 留出法:
直接将数据集D分为两个互斥集合,其中一个集合做为训练集合S,另一个测试集合T, D = S U T ,S ∩ T = ∅;学习器在S集合行训练出模型,然后再用集合T来评估其测试误差,作为泛化误差的估计。
常见的做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试
煮个栗子:100个样本,分给训练集有 60 个样本,测试集30个样本。我们训练60个样本中,分类正确的有56个,错误分类4个。
错误率 = 错误分类/ 训样本数(4/60=0.067) 精度 = 0.933
- 注意:
训练集和测试集的划分要尽量保持和原数据一致性.你不能这样,训练集中的数据基本都是单一的数据,特征也基本一致,而测试集的数据则稀奇古怪,三类四类的都有。这种划分就不合理,最后就会导致,训练误差很小,测试出来的泛化误差就很大。
单次使用留出法得到的估计结果往往不稳定不可靠。我们一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。 比如进行 100 次随机划分,每次产生一个 训练集 / 测试集 用于实验评估,就有100 个结果,我们返回这 100 个结果的平均值。
但是哪个比列才更好呢?如果训练集 S 包含绝大多数样本,则训练出的模型可能更接近于总集合D训练出的模型,但是测试集T就少了,评估结果可能不够稳定准确;反过来测试集T多包含样本,训练集S训练度可能不够,与总集合D差别更大了,降低了评估结果的保真性。这个问题没有完美的解决方案,我们一般将 的数据用于训练,其他的部分用来测试
2. 交叉验证法
交叉验证法(cross validation)先将数据集D划分为K个大小相似的互斥子集,即:
每个子集都是通过分层采样得到,以尽可能保持数据分布的一致性;即从D中通过层次采样得到。然后每次使用k-1个子集的并集做训练集,余下的子集作为测试集,这样一共可以得到k组训练集/测试集,从而可以进行k次训练和测试,最终返回k次训练的均值。
通常把交叉验证又叫做k折交叉验证,如k取10,则是10折交叉验证;
留一法(leave-One-Out):特殊的,当数据集D中有m个样本,令k=m,即每个子集只有一个样本,也即每次只留出一个做为测试集,这样的方法叫做留一法。
交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 值,为了强调这一点,我们又称“k折交叉验证” k 的最常用取值是10,也有用5,20的。来看一张图把,助于理解。
如果我们数据集D包含m个样本,又 k = m,就得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO)
- 优点:
由于m个样本只有唯一的方式划分为m个子集——每个子集只有一个样本,划分就没有影响了。留一法使用的训练集与原始数据相比至少了一个样本,在绝大多数情况下,实际评估的模型和用D评估出来的模型很相似,结果往往比较准确。
- 缺点:
我们处在大数据阶段呢,数据是爆炸式的增长。在数据集比较大时,训练m个模型的计算机开销可能难以承受的。1000万的数据就要训练1000万次,如果加上神经网络里算法面的参数,直接gg。
3.自助法
直接以自助采样为基础。
给定 m 个样本的数据集 D,我们对其进行采样产生数据集 D’:每次随机从D中选取一个样本,将其拷贝放入D’,然后再将样本放回数据集D中,使得该样本在下次采样中仍可能被采到;重复 m 次,就收集到了 m 个数据集 D’,这就是自助采样的结果。
D中有一部分数据会多次出现,而另一部分数据则不会出现。我们可以做一个简单的估计。样本在 m 次采样中始终不会采到的概率是 (1-1/m)的m次方,取极限:
通过自助采样,初始数据集D中有36.8%的样本未出现在采集数据集 D’ 中。我们将D’用来训练,D \ D’用作测试集。
- 优点:
实际评估的模型与期望评估的模型都使用了 m 个训练样本,而我们仍然有数据总量的 1/3 没在训练集出现的样本用于测试。这个结果也叫“包外估计”,在训练集较小,难以划分 训练集 / 测试集时很常用,并且能从初始数据集D中产生多个不同的数据集,对集成学习等方法有很大的好处。
- 缺点 :
改变了初始数据集的分布,引入估计偏差,数据集较大时,留出法和交叉验证法更常用。
- 性能量度
性能量度也是衡量模型泛化能力的评价标准。 它反应了任务需求,在对比不同模型能力时,使用不同的性能量度往往会导致不同的批判结果。模型的好坏是相对的,什么样的模型什么时候是好的,不仅取决于算法和数据,还决定于任务需求。
在预测任务中,给定样例集 D={(x1,y1),(x2,y2),...,(xm,ym)}
其中 y i 的真实标记。要评估学习器 f 的性能,就要把学习器预测的结果 f ( x ) f(x)f(x) 与真实 y yy 进行比较。
回归任务最常用的性能量度是“均方误差”
对于数据分布 D 和概率密度函数 p ( ⋅ ) p(·)p(⋅),均方误差可描述为:
这里是常用的性能量度。
对于分类算法还有其他的评价指标,如运行速度,扩展性等。这些也是衡量算法性能的一部分。
以上主要是对机器学习有关的基础理论知识模型的评估与选择方法的简单介绍。