转自 https://www.cnblogs.com/blogwww/p/9498607.html
CV是用来验证分类器性能的一种统计分析方法,其基本思想是在某种意义下将原始数据进行分组,一部分作为测试集,另一部分作为验证集;先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以得到的分类准确率作为评价分类器的性能指标。常见的 CV 方法如下:
1.1 交叉验证(Cross Validation,CV)
伪代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
采用CV的方法,在没有测试标签的情况下可以找到一定意义下的最佳参数c和g。这里所说的“一定意义下”指的是此时最佳参数c和g是使得训练集在CV思想下能够达到最高分类准确率的参数,但不能保证会使得测试集也达到最高的分类准确率。用此方法对wine数据进行分类预测,MATLAB 实现代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
(best c = 2,g = 0.5,rate = 98.8764)
Accuracy = 98.8764% (88/89) (classification)
1.2 K-CV 算法(K - fold Cross Validation )
将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的 K-1 组子集数据作为训练集,这样会得到 K 个模型,用这 K 个模型最终的验证集的分类准确率的平均值作为此 K-CV 下分类器的性能指标。K>=2,一般实际操作是取K=3,只有在原始数据集合数据量小的时候才会尝试取 2。K - CV 可以有效地避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。
这节主要涉及到函数 SVMcgForClass 的理解,以及使用技巧
1.2.1 SVMcgForClass
伪代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
函数接口及输入参数解析
1 2 3 4 5 6 7 8 9 10 11 |
|
以上参数只有train_label和train是必须输入的,其他的可不输入采用默认值。
1.2.2 代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
|