返回信息流初学svm,主要是想解决二分类问题,数据规模大概几千,一般都是些什么流程?而且觉得好多参数,一开始都不知道设置成什么。当前采用的libsvm
现在想的就是用C_SVC模型,用RBF核函数,但是里面有gamma,C需要自己设定,不知道一般设置成多少合适。
另外有几个流程问题不清楚:
1、归一化,感觉不用svm_scale那个函数,也是可以成功运行程序的,而且输入特征向量也没有必要要求是单位向量一类的啊
2、交叉验证
不知道上面两个步骤与 train、predict是什么关系,一般怎么用
这是一条镜像帖。来源:北邮人论坛 / ml-dm / #13127同步于 2014/4/26
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ML_DM机器人发帖
[问题]svm小问题求助~
t01
2014/4/26镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
1 归一化主要是为了将原本不同范围的特征值归一到一个范围内,防止有的特征过大或过小对结果造成影响,例如 一个特征值是零点几,另一个特征值是上千,对结果影响肯定大。
至于归一化有什么影响,你可以比较一下归一化前和归一化后的结果差别
2 交叉验证的作用就是找出最合适的gamma 和 C 否则你就不知道用RBF核训练的时候选什么参数好。 交叉验证直接用tools里的grid.py脚本 使用事例:python grid.py [训练文件]
结果会输出最佳的gamma和C 然后再带入svm-train 中进行训练
谢谢学长了,那归一化那个我下次自己试试看。不过交叉验证我用的是C++写的程序,有C++的程序么,还是先用单独跑脚本得到C和gamma?
【 在 moonfighting 的大作中提到: 】
: 1 归一化主要是为了将原本不同范围的特征值归一到一个范围内,防止有的特征过大或过小对结果造成影响,例如 一个特征值是零点几,另一个特征值是上千,对结果影响肯定大。
: 至于归一化有什么影响,你可以比较一下归一化前和归一化后的结果差别
: 2 交叉验证的作用就是找出最合适的gamma 和 C 否则你就不知道用RBF核训练的时候选什么参数好。 交叉验证直接用tools里的grid.py脚本 使用事例:python grid.py [训练文件]
: ...................
大概懂了,那一般步骤应该就是 训练数据+测试数据归一化 —> 交叉验证 -> 训练 -> 测试 吧?
那归一化一般用 (x-xmin)/(xmax-xmin)最普通的归一化到(0,1),这样可以么?
【 在 xiaopihai 的大作中提到: 】
: 就是直接使用训练集,他帮你找到最佳参数,然后你就用这个参数来训练模型。归一化是必须的,效果差很多
哦,知道了。看见svm.cpp里面好像有,谢谢学长了~~
【 在 moonfighting 的大作中提到: 】
: 这个你得看对应的源代码,看清楚里面的交叉验证是怎么做的
: 发自「佳邮」
【 在 t01 的大作中提到: 】
: 大概懂了,那一般步骤应该就是 训练数据+测试数据归一化 —> 交叉验证 -> 训练 -> 测试 吧?
: 那归一化一般用 (x-xmin)/(xmax-xmin)最普通的归一化到(0,1),这样可以么?
可以啊,你看那个scale程序就是这么做的,不过也要考虑一下特殊情况吧,最好上下都+1来避免分母为零
哦,最近学东西老是不确定也不知道自己做的对不对。
还有个问题,可以问一下学长有用过c++写交叉验证么?
svm.cpp中的代码太长,细看函数调用逻辑太麻烦了,我就大概看了一下默认有的示例svm-train.c,照着里面写cross validation可以么?但是,我看的资料是通过在交叉验证中通过简单的网格搜索找到最佳的C和gamma,这样网格搜索部分要自己写么?感觉提供的示例svm-train.c好像也没有外重循环的样子。
感觉svm-train.c中的cross validation不像是在寻找最优参数呀
【 在 xiaopihai 的大作中提到: 】
: 可以啊,你看那个scale程序就是这么做的,不过也要考虑一下特殊情况吧,最好上下都+1来避免分母为零
学长有没有研究过C++部分的源码呢?我怎么看着没有呢?
还有我用python跑过一遍grid.py的脚本,如果样本是用自带的heart_scale是可以出图,并且寻找到最优的C和gamma的,但是我按照相同格式设置好自己的数据,就只出gnuplot的窗口,但根本不出图这是什么原因呢?
大概是1500个样本,每个样本2800个特征左右,之前也归一化过,范围在[0,1]闭区间内
【 在 moonfighting 的大作中提到: 】
: 这个你得看对应的源代码,看清楚里面的交叉验证是怎么做的
: 发自「佳邮」