• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Matlab 支持向量机整理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

Matlab 支持向量机整理

工具包libsvm3.23

  • #iter为迭代次数,

    nu 与前面的操作参数-n nu 相同,

    obj为SVM文件转换为的二次规划求解得到的最小值,

    rho 为判决函数的常数项b,

    nSV 为支持向量个数,

    nBSV为边界上的支持向量个数,

    Total nSV为支持向量总个数。

  • libsvm使用误区
    (1) 直接将训练集合和测试集合简单归一化到[0,1]区间,可能导致实验结果很差。
    (2) 如果样本的特征数非常多,那么就不必使用RBF核将样本映射到高维空间。
    a) 在特征数非常多的情况下,使用线性核,结果已经非常好,并且只需要选择参数C即可。
    b) 虽然说RBF核的结果至少比线性核好,前提下搜索整个的空间。
    (3) 样本数<<特征数的情况:推荐使用线性核,可以达到与RBF同样的性能。
    (4) 样本数和特征数都非常多:推荐使用liblinear,更少的时间和内存,可比的准确率。
    (5) 样本数>>特征数:如果想使用线性模型,可以使用liblinear,并且使用-s 2参数

数据处理

  • mat
  • excel
    读取xlsx
    首先,如果仅仅是需要处理其中数据,那么方法同1。
    如果既要处理数据又要处理字符型变量的话,就经常用到下面两种格式:
    [num,txt]=xlsread(‘filename’,‘sheet’,‘range’)
    [num,txt,raw]=xlsread(‘filename’,‘sheet’,‘range’)

产生训练集测试集

  • 是否进行数据归一化

选择核函数

  1. 线性核函数
  2. RBF核函数
  3. 多项式核函数
  4. Sigmoid核函数

创建模型

  • 优化参数
  • 交叉验证

只有 training data 才可以用在 model 的训练过程中,test data 则必须在 model 完成之后才被用来评估 model 优劣的依据。 怎么将完整的 dataset 分为 training set 与 test set 也是学问,必须遵守两个要点:
1. training set 中样本数量必须够多,一般至少大于总样本数的 50%
2. 两组子集必须从完整集合中均匀取样

其中第 2 点特别重要,均匀取样的目的是希望减少 training/test set 与完整集合之间的偏差(bias),但却也不易做到。一般的作法是随机取样,当样本数量足够时,便可达到均匀取样的效果。然而随机也正是此作法的盲点,也是经常是可以在数据上做手脚的地方。举例来说,当辨识率不理想时,便重新取样一组training set 与 test set,直到 test set 的辨识率满意为止,但严格来说这样便算是作弊了。

Cross-validation 正是为了有效的估测 generalization error 所设计的实验方法,可以细分为 double cross-validation、k-fold cross-validation 与leave-one-out cross-validation。

  • Double cross-validation 也称 2-fold cross-validation(2-CV),作法是将 dataset
    分成两个相等大小的 subsets,进行两回合的分类器训练。 在第一回合中,一个 subset 作为 training
    set,另一个便作为 test set; 在第二回合中,则将 training set 与 test set
    对换后,再次训练分类器,而其中我们比较关心的是两次 test sets 的辨识率。 不过在实务上 2-CV 并不常用,主要原因是
    training set 样本数太少,通常不足以代表母体样本的分布,导致 test 阶段辨识率容易出现明显落差。此外,2-CV 中分
    subset的变异度大,往往无法达到「实验过程必须可以被复制」的要求。

  • K-fold cross-validation (k-CV)则是 double cross-validation 的延伸,作法是将
    dataset 切成 k 个大小相等的 subsets,每个 subset 皆分别作为一次 test set,其余样本则作为
    training set,因此一次 k-CV 的实验共需要建立 k 个models,并计算 k 次 test sets
    的平均辨识率。在实作上,k 要够大才能使各回合中的 training set 样本数够多,一般而言 k=10 算是相当足够了。

  • leave-one-out cross-validation (LOOCV),假设 dataset 中有 n 个样本,那 LOOCV也就是 n-CV,意思是每个样本单独作为一次 test set,剩余 n-1个样本则做为 training set,故一次 LOOCV共要建立 n 个 models。相较于前面介绍的 k-CV,LOOCV 有两个明显的优点: 每一回合中几乎所有的样本皆用于训练model,因此最接近母体样本的分布,估测所得的 generalization error比较可靠;实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。但 LOOCV 的缺点则是计算成本高,因为需要建立的models 数量与总样本数量相同,当总样本数量相当多时,LOOCV 在实作上便有困难,除非每次训练 model的速度很快,或是可以用平行化计算减少计算所需的时间。

在MATLAB中,用户可以使用cvpartition、repartition等命令对数据集进行拆分,完成交叉验证。
c = cvpartition(n,'KFold',k)
构造 cvpartition类的对象c , 定义 k 的随机非分层分区k-在n个观测值上折叠交叉验证。分区将观测结果划分为k不相交子样本 (或褶皱), 随机选择, 但大小大致相等。k的默认值为10.
c = cvpartition(n,'HoldOut',p)
创建一个随机的非分层分区, 以便在n进行保留验证。此分区将观测结果划分为训练集和测试集 (或保留集)。参数p必须是标量。
当0 < p<1时,cvpartition随机为测试集随机选择大约p*n。当p是整数时, cvpartition会随机选择测试集的p。p的默认值为1/10.

c = cvpartition(group,'KFold',k) 

为分层k倍交叉验证创建一个随机分区。group是指示每个观察的类的字符向量的数字向量、分类数组、字符数组、字符串数组或单元格数组。每个子样本的大小和类比例大致相等, 与group中的大小和类比例大致相同.
当您将group作为cvpartition的第一个输入参数提供时, 该函数将创建交叉验证分区,

测试模型


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi关键字详解发布时间:2022-07-18
下一篇:
STK 与 matlab 连接报错发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap