The sharing of resources about Statistical Learning Theory and Machine Learning(includeing SVM,Semi-Supervised Learning,Ensemble Learning,Clustering) ,welcome to contact and communicate with me: Email: xiankaichen@gmail.com,QQ:112035246,

Tuesday, June 24, 2008

我对算法模型的总结

最近在做算法改进,发现了很多问题,也从中学习到了很多知识,打算总结一下,好使得思路更加的清晰。
1,数据预处理。这里包括了很多分析方法,在这里需要做的是,收集,噪音处理(吴信东做的不错),相关性分析(p卡方检验可以),主成份分析(在学习中)。
2,选择适当的学习算法,得到训练模型。模型的训练的时候存在一个很直接的问题,就是模型参数选择的问题,可以使用交叉验证来评价选择参数的合理性。
3,用模型对测试数据预测。
4,算法评估。时间复杂度分析,空间复杂度分析,最高精度比较,显著性检验(配对 t-检验),我比较赞同后者的评估方法,很多算法都那最高精度的进行比较,显然这不是很合理的,因为这些结果可能没有再现性,所以需要做显著性检验来说明改进后的实验结果是有显著性差别的,如果没有显著性差别,我认为就算它的实验结果最高精度多好也不能说明你的模型比别人的好。
下面以支持向量机做进一步的说明
(1),设训练集为S={x1,...xn},Y={-1,+1},S已经经过了预处理了,这里主要说明2-4部分的实现细节。
(2),为了分出训练集和测试集我们使用随机抽样的方法,抽样的方法可以这样,可以利用randon函数为每个样本随机产生一个随机数,然后按照随机数的大小对样本进行排序,然后对排序后的样本按一定的比例进行抽取样本(如7:3,70%是训练集,剩下的为30%测试集),注意每次抽样的训练集和测试集可能不相同的,因此,做一次抽样出来的数据,特别是训练集的数据,它可能不是模型所服从的分布,在这个时候,我们可以做多次抽样,训练得到每个不同的模型,然后选择模型精度最好的做为算法的模型。如果在一开始就已经分好了训练集和测试集,那么我们就可以省略这步骤了。
(3),在(2)后,得到的训练集和测试集就不要再改变了,接下来就是训练模型,训练模型就是从训练集应用支持向量机算法得到一个用于3中的预测的一个模型。为了训练得到这个模型,我们使用交叉验证来评价某一个参数下(算法)得到的模型的合理性。为此我们使用10折交叉验证法,这里也顺便介绍一下10折交叉验证法:(点击下面图片可以清晰阅读在这里一般k=10,就是说,选择了支持向量机的参数(C,核函数的参数)p(是一个参数向量)之后,我们将训练集分成10分,循环十次得到交叉验证误差e,则e就可以做为对参数p好坏的一个评价,当e小的时候说明p参数是好的,当e大的时候说明p参数是不好的,在选择p的时候得凭借一定的经验进行选择,也需要耐心,从众多的候选参数p中我们选择e最小时的参数p做为支持向量机的参数,然后对训练集进行训练得到相应的模型M。
(4),得到了模型M之后,我们接下来就要利用测试集检验模型M的精度了。
(5),在(2)中提到(3)中训练提出来的模型M不一定是合理的,因此我们得要重复执(2)进行多次抽样,得到多个模型M_i,选择其中预测继精度最好的模型最为最终的支持向量机模型。
(6),对你的算法进行各方面的评估,如果就精度而言,可以考虑做统计检验,或者认为最高的精度可以做为算法的一个评价;就速度而言,就要着重考虑时间复杂度和空间复杂度分析了。

以上的步骤是实现并应用支持向量机的核心内容,也是我自己总结的,有不当之处请大家指出,大家交流。

No comments: