问题描述:

在模式识别实验中,matlab环境,已有训练集A,如何利用bagging算法随机选取一些样本组成样本子集?比如从A中随机选择一些样本组成20个样本子集,然后训练生成20个分类器(最近邻),matlab程序应该怎么写?

1个回答

分类:

综合

2014-10-07

问题解答:

我来补答

agging我不知道有没有工具箱可以用,但是你找数学论坛肯定能找到bootstrap采样的子程序,个人观点模式识别的话完全没必要写这种成型数学理论的东西,应用数学的论坛应该是到处都有的下载.

NN算起来麻烦其实写程序挺简单的,你可以先定义个距离范数子程序,然后用bootsrap子程序运行20次的结果分别保存在20个矩阵里,然后每个矩阵单独用NN算范数,比较大小分别输出范数最小的类别标签作为单一分类器的结果,最后用if else if循环加上一个计数器或者任何你想用的方法对类别投票就可以了,投票最多的是最终结果.要是KNN的话也可以用大投票或者其他方式,比如你用7近邻,取每个分类器范数最小的7个都拿来投票,最后对140个投票结果合并,采用什么方法可以试试看,哪种好用哪种,没有定式.

再问: 谢谢你的回答,知识很渊博,回答很有深度 其实knn有工具箱的,不需要自己写,我就是想怎么利用bagging算法从A数据集中随机选择样本然后生成分类器的,当然,生成的样本子集个数是自己定的。

再答: bagging核心就是用bootstrap算法自举出来子样本集,然后用子样本集训练最后投票。这里bootsrap算法并非是控制科学搞出来的,而是在应用数学或者统计学比较常用的一种自举方法,我的直观感觉是这种方法更多的是一个概念,而不是具体的算法,真要是编程有很多方法可以实现,所以我建议你找一找相关成型的子程序读一读。真要自己写的话你看透了理论就很简单了,比如不知道分布的情况下用中央极限定理,实际上就是告诉你,只要你随机的等概率重复对原样本集抽样,生成的子样本都近似于均值与原样本集相同,而方差不同的正态分布。换个直观的说法就是你只要是等概率的去抽取,那你得到的一系列子样本集理论上都和原样本集均值相同,只是方差在随机改变,正是因为这种特性,所以你拿来训练以后会产生一系列较为精确但是又不完全相同的分类器,最后投票的话有可能效果比原样本集好。 理论论证了一大堆,答案可能比较可笑,你等概率的随机抽就行了,比如你从140个样本当中抽回来120个样,编上号1到120,生成一列1到120可重复的随机数,然后拿随机数当序号把样本拿过来就行了。 可以看出你肯定是读过相关文献的,文献里面之所以交代上面我说的理论,是因为做理论研究必须有完整的数学体系,我刚开始看的时候看到这里也迷糊,能直观理解的话就很简单了。实际上多数文献都论证了这么一件事:我如何从原来的样本集当中重复抽取出来一部分生成子样本集,同时这个子样本集还和原样本集理论上具有同样的均值和不同的方差。中央极限定理的做法就是只要样本不是很小等概率的抽取就能达到这种效果,但是方差的改变是近乎随机的。置信区间的做法是在知道样本的分布情况下,增加一个约束条件可以使得这种抽取能得到一个更满意的方差。

展开全文阅读

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐