在商业中,进行数据挖掘有三大关键点:一是商业目标的确定,二是模型的优化,三是模型的评估。该案例主要是围绕模型的评估进行交流学习。在探讨模型评估之前,先了解以下概念:
1. 训练误差与测试误差
机器学习的目的是使学习到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。训练误差是训练模型关于训练数据集的平均损失;测试误差是训练模型关于测试数据集的平均损失。当损失函数是0-1损失时,测试误差就变成了常见的测试数据集上的误差率(预测错误的个数除以测试数据的总个数)。
训练误差的大小,对判定给定问题是不是一个容易学习的问题是有意义的,但本质上不重要。测试误差反映了学习方法对未知数据集的预测能力,是学习中的重要概念。显然,给定两种学习方法,测试误差小的方法具有更好的预测能力,是更有效的方法。
2. 过拟合与模型选择
我们知道假设空间理论上有无限个模型,它们有着不同的复杂度(一般表现为参数个数的多少),我们希望选择或学习一个合适的模型。
如果一味提高对训练数据的预测能力,所选的模型的复杂度则往往会比真实模型更高。这种现象称为过拟合。过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测很好,但对未知数据预测很差的现象。
下面,以多项式函数拟合问题为例,说明过拟合与模型选择,这是一个回归问题。
多项式函数拟合的任务是假设给定数据由M次多项式函数生成,选择最有可能产生这些数据的M次多项式函数,即在M次多项式函数中选择一个对已知数据以及未知数据都有很多预测能力的函数。
我们用y = sin(x)生成10个数据点,并适当的在y值上加了一些误差,下面我们分别用0~9次多项式对数据进行拟合。
上图给出了M=1,M=3时多项式拟合的情况。当M=1时多项式曲线是一条直线,数据拟合效果很差。相反,如果M=9,多项式曲线通过每个数据点,训练误差为0。从对给定的训练数据拟合的角度来说,效果是最好的。但是因为训练数据本身存在噪声,这种拟合曲线对未知数据的预测能力往往并不是最好的,这时过拟合现象就会发生。
3. 正则化
结构风险最小化正是为了解决过拟合问题来提出来的策略,它在经验风险上加一个正则化项。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。比如,正则化项可以是模型参数的向量的范数。正则化项可以取不同的形式。例如,回归问题中,损失函数是平方损失,正则化项可以是参数向量的范数:
正则化符合奥卡姆剃刀原理。奥卡姆剃刀应用在模型选择时想法是:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。从贝叶斯估计的角度来看,正则化项对应于模型的先验概率。可以假设复杂模型有较小的先验概率,简单的模型有较大的先验概率。
4. 交叉验证
如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成两部分,分别为训练集和测试集。训练集用来训练模型,测试集用于最终对学习方法的评估。在学习到的不同复杂度的模型中,选择对验证集有最小预测误差的模型。
但是在许多实际应用中数据是不充分的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据;把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。
简单交叉验证
首先随机地将已给数据分为两部分,一部分作为训练集,另一部分作为测试集;然后用训练集在各种条件下训练模型,从而得到不同的模型;在测试集上评价各个模型的测试误差,选出测试误差最小的模型。
n折交叉验证
这种方法应用最多。首先随机地将已给的数据切分为n个互不相交的大小相同的子集;然后利用其中的n-1个子集的数据训练模型,然后用余下的子集测试模型;将这一过程对可能的n种选择重复进行;最后选出n次评测中平均测试误差最小的模型。
留一交叉验证
n折交叉验证的特殊情形是n=N,称为留一交叉验证,往往在数据缺乏的情况下使用。这里,N是给定数据集的容量。
泛化能力
学习方法的泛化能力是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。现实中采用最多的办法是通过测试数据集的误差来评价学习方法的泛化能力。但是因为数据是有限的,并不能代表全体未知样本,所以很有可能按照这样评价到得的结果是不可靠的。
泛化误差反映了学习方法的泛化能力,如果一种方法学习的模型比另一种方法学习的模型具有更小的泛化误差,那么这种方法就更有效。事实上,泛化误差就是所学习到的模型的期望风险。
交叉验证主要用于建模应用中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。这个过程一直进行,直到所有的样本都被预报了一次而且仅被预报一次。
用交叉验证的目的是为了得到可靠稳定的模型。常用的精度测试方法主要是交叉验证,例如10折交叉验证(10-fold cross validation),将数据集分成十份,轮流将其中9份做训练1份做验证,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。
在前面已经提到,评估模型的质量并不能只看模型预测准确度,还要看模型的稳定性,只有又准确有稳定的模型才是好模型,而模型的稳定性甚至比模型的准确性更重要。而交叉验证法是用于验证模型稳定性的方法,而不是提升模型稳定的方法。接下来,我们通过一个简单的例子介绍一下如何使用交叉验证法评估模型的稳定性。工作流如下:
要实现交叉验证一共需要以下几步:
第一步,读取数据。在这里我们还是使用诊病数据。
第二步,使用X分区节点定义验证的折数,我们指定为10。配置如下:
第三步,连接要测试的模型,此处我们来测试贝叶斯模型。连接如工作流中所示。首先,使用类型节点定义目标变量,将药物的角色设置为目标,配置如下:
贝叶斯训练节点和预测节点分别配置如下(大部分时候都不需要配置,使用默认配置即可):
第四步,使用X聚合节点,与X分区节点形成测试的闭环。该节点一般都无需配置,采用默认配置即可。执行后,输出结果如下:
从表中可以看出每次验证的误差,第一列是行ID,第二列表示模型的误判率,第三列表示测试集的记录数,第四列表示误判个数。从表中可以看出模型的误判率基本都在10%~15%之间,模型相对比较稳定。
您还可以使用分类评估节点分析模型的整体准确率。分析结果如下:
从表中可以看出,模型验证的平均准确度为86.5%。因此可以得出结论,该模型是一个即准确又稳定的模型。
概览
内容工具
活动