3天
svm模型训练后的参数说明
现简单对屏幕回显信息进⾏说明:
#iter 为迭代次数,
nu 与前⾯的 *** 作参数 -n nu 相同,
obj 为 SVM ⽂件转换为的⼆次规划求解得到的最⼩值,
rho 为判决函数的常数项 b ,
nSV 为⽀持向量个数,
nBSV 为边界上的⽀持向量个数,
Total nSV 为⽀持向量总个数。
训练后的模型保存为⽂件 model ,⽤记事本打开其内容如下:
svm_type c_svc % 训练所采⽤的 svm 类型,此处为 C- SVC
kernel_type rbf % 训练采⽤的核函数类型,此处为 RBF 核
gamma 00769231 % 设置核函数中的 g ,默认值为 1/ k
nr_class 2 % 分类时的类别数,此处为两分类问题
total_sv 132 % 总共的⽀持向量个数
rho 0424462 % 决策函数中的常数项 b
label 1 -1% 类别标签
@微生豪资料集合分享
nr_sv 64 68 % 各类别标签对应的⽀持向量个数
SV % 以下为⽀持向量
1 1:0166667 2:1 3:-0333333 4:-043396
2 5:-0383562 6:-1 7:-1 8:0068702
3 9:-1 10:-0903226 11:-1 12:-1 13:1
05104832128985164 1:0125 2:1 3:0333333 4:-0320755 5:-0406393 6:1 7:1 8:00839695 9:1 10:-0806452 12:-0333333 13:05
1 1:0333333 2:1 3:-1 4:-0245283 5:-0506849 6:-1 7:-1 8:0129771 9:-1 10:-016129 12:0333333 13:-1
1 1:0208333 2:1 3:0333333 4:-0660377 5:-0525114 6:-1 7:1 8:0435115 9:-1 10:-0193548 12:-0333333 13:1
4 )采⽤交叉验证选择最佳参数 C 与 g
通常⽽⾔,⽐较重要的参数是 gamma (-g) 跟 cost (-c) 。⽽ cross validation (-v)
的参数常⽤ 5 。那么如何去选取最优的参数 c 和 g 呢? libsvm 的 python ⼦⽬录下⾯的 gridpy 可以帮助我们。 此时。其中安
装 python25 需要(⼀般默认安装到 c:/python25
下),将 gnuplot 解压。安装解压完毕后,进⼊ /libsvm/tools ⽬录下,⽤⽂本编辑器(记事
本, edit 都可以)修改 gridpy ⽂件,找到其中关于 gnuplot 路径的那项(其默认路径为
gnuplot_exe=r"c:/tmp/gnuplot/bin/pgnuplotexe" ),根据实际路径进⾏修改,并保存。然
后,将 gridpy 和 C:/Python25 ⽬录下的 pythonexe ⽂件拷贝到 libsvm/windows ⽬录下,键⼊以下命令: $ python gridpy
train1scale 执⾏后,即可得到最优参数 c 和 g 。
另外,⾄于下 libsvm 和 python 的接⼝的问题,在 libsvm286 中林⽼师已经帮助我们解决,在/libsvm/windows/python ⽬录下⾃带了 svmcpyd 这个⽂件,将该⽂件⽂件复制到
@微生豪资料集合分享
libsvm/python ⽬录下,同时,也将 pythonexe ⽂件复制到该⽬录下,键⼊以下命令以检验效
果(注意: Py ⽂件中关于 gnuplot 路径的那项路径⼀定要根据实际路径修改):
python svm_testpy
如果能看到程序执⾏结果,说明 libsvm 和 python 之间的接⼝已经配置完成,以后就可以直接在python 程序⾥调⽤ libsvm 的函数了!
5 ) 采⽤最佳参数 C 与 g 对整个训练集进⾏训练获取⽀持向量机模型
$ svmtrain –c x –g x –v x training_set_file [model_file]
x 为上述得到的最优参数 c 和 g 的值, v 的值⼀般取 5 。
6 )利⽤获取的模型进⾏测试与预测
使⽤ Svmtrain 训练好的模型进⾏测试。输⼊新的 X 值,给出 SVM 预测出的 Y 值
$ Svmpredict test_file model_file output_file
如: /svm-predict heart_scale heart_scalemodel heart_scaleout
Accuracy = 866667% (234/270) (classification)
这⾥显⽰的是结果
⼀个具体使⽤的例⼦。
以 libsvm 中的 heart_scale 作为训练数据和测试数据,同时已经将 python 安装⾄ c 盘,并将gridpy ⽂件中关于 gnuplot 路径的默认值修改为实际解压缩后的路径,将
heart_scale 、 gridpy 和 pythonexe 拷贝⾄ /libsvm/windows ⽂件夹下。
/svm-train heart_scale
optimization finished, #iter = 162
nu = 0431029
obj = -100877288, rho = 0424462
nSV = 132, nBSV = 107
Total nSV = 132
此时,已经得到 heart_scalemodel ,进⾏预测:
/svm-predict heart_scale heart_scalemodel heart_scaleout
Accuracy = 866667% (234/270) (classification)
正确率为 Accuracy = 866667% 。
/python gridpy heart_scale
得到最优参数 c=2048 , g=00001220703125
/svm-train -c 2048 -g 00001220703125 heart_scale 得到 model 后,由 /svm-predict heart_scale heart_scalemodel
heart_scaleout 得到的正确
率为 Accuracy = 851852%这块还有点迷惑?为什么正确率降低了?
当然也可以结合subsetpy 和 easypy 实现⾃动化过程。
@微生豪资料集合分享
如果要训练多次,可以写个批处理程序省好多事。
这⾥举个例⼦:
::@ echo off
cls
:: split the data and output the results
for /L %%i in (1,1,1000) do python subsetpy b59txt 546 b59(%%i)in8 b59(%%i)out2
for /L %%i in (1,1,1000) do python easypy b59(%%i)in8 b59(%%i)out2 >> result89txt
这段批处理代码⾸先调⽤subsetpy对⽂件b59txt执⾏1000次分层随机抽样(对数据进⾏80-20%分割)然后调⽤easypy 进⾏1000次参数寻优,把记录结果写到result89txt中
(包括1000次训练的分类准确率和参数对)。
还可以调⽤fselectpy进⾏特征选择,调⽤plotrocpy进⾏roc曲线绘制。
先写到这⾥吧,希望能和⼤家⼀起学习libsvm,进⼀步学好svm。
打开APP获取全文

已精选svm模型训练后会员文档796篇

MATLAB中SVM(支持向量机)的用法
31人阅读

OpencvSVM支持向量机参数与优化:
8人阅读

SVM参数设置及各种参数意义
32人阅读

sklearnsvm调参_SVM调优详解·7125messi的博客
西门子logo用编程软件在内存卡写程序。专用程序储存卡,可以读出程序并传递至其它的主机中,中的0BA6。用本体自带的按键及显示屏,一个一个功能块的读取、记录程序。采用专用编程电缆,通过编程软件下载程序。如果设置有密码保护,除非知道密码。否则,无解。程序储存卡、与编程电缆使用的是同一个口。如果设置暗码+带“副本维护”的存储卡,能够做到彻底的程序维护。0BA8使用micro SD的存储卡,如果将受维护的电路程序复制到其他存储卡上,当刺进该存储卡时 LOGO! 将无法识别程序并回绝加载程序。所以,西门子logo用编程软件在内存卡写程序。
如果当前目录在libsvm下,那么就会调用libsvm的svmtrain
自带的svmtrain的调用格式和libsvm的svmtrain的格式是不一样的,自带的格式是SVMStruct = svmtrain(‘训练矩阵’,‘训练标签’ 'Showplot',ShowplotValue, )
而libsvm的格式需要把标签写在第一个参数,若想使用自带的,那么把libsvm的路径从搜索路径中删除
即set path然后remove,并且把当前目录切换到toolbox下。
OpenCV开发SVM算法是基于LibSVM软件包开发的,LibSVM是台湾大学林智仁(Lin Chih-Jen)等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包。用OpenCV使用SVM算法的大概流程是1)设置训练样本集需要两组数据,一组是数据的类别,一组是数据的向量信息。2)设置SVM参数利用CvSVMParams类实现类内的成员变量svm_type表示SVM类型:CvSVM::C_SVC C-SVCCvSVM::NU_SVC v-SVCCvSVM::ONE_CLASS 一类SVMCvSVM::EPS_SVR e-SVRCvSVM::NU_SVR v-SVR成员变量kernel_type表示核函数的类型:CvSVM::LINEAR 线性:u‘vCvSVM::POLY 多项式:(ru'v + coef0)^degreeCvSVM::RBF RBF函数:exp(-r|u-v|^2)CvSVM::SIGMOID sigmoid函数:tanh(ru'v + coef0)成员变量degree针对多项式核函数degree的设置,gamma针对多项式/rbf/sigmoid核函数的设置,coef0针对多项式/sigmoid核函数的设置,Cvalue为损失函数,在C-SVC、e-SVR、v-SVR中有效,nu设置v-SVC、一类SVM和v-SVR参数,p为设置e-SVR中损失函数的值,class_weightsC_SVC的权重,term_crit为SVM训练过程的终止条件。其中默认值degree = 0,gamma = 1,coef0 = 0,Cvalue = 1,nu = 0,p = 0,class_weights = 03)训练SVM调用CvSVM::train函数建立SVM模型,第一个参数为训练数据,第二个参数为分类结果,最后一个参数即CvSVMParams4)用这个SVM进行分类调用函数CvSVM::predict实现分类5)获得支持向量除了分类,也可以得到SVM的支持向量,调用函数CvSVM::get_support_vector_count获得支持向量的个数,CvSVM::get_support_vector获得对应的索引编号的支持向量。实现代码如下:view plain// step 1: float labels[4] = {10, -10, -10, -10}; Mat labelsMat(3, 1, CV_32FC1, labels); float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} }; Mat trainingDataMat(3, 2, CV_32FC1, trainingData); // step 2: CvSVMParams params; paramssvm_type = CvSVM::C_SVC; paramskernel_type = CvSVM::LINEAR; paramsterm_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6); // step 3: CvSVM SVM; SVMtrain(trainingDataMat, labelsMat, Mat(), Mat(), params); // step 4: Vec3b green(0, 255, 0), blue(255, 0, 0); for (int i=0; iimagerows; i++) { for (int j=0; jimagecols; j++) { Mat sampleMat = (Mat_float(1,2) i,j); float response = SVMpredict(sampleMat); if (fabs(response-10) 00001) { imageatVec3b(j, i) = green; } else if (fabs(response+10) 0001) { imageatVec3b(j, i) = blue; } } } // step 5: int c = SVMget_support_vector_count(); for (int i=0; i i++) { const float v = SVMget_support_vector(i); } OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification)。注意,新版本的C++接口除了Haar特征以外也可以使用LBP特征。先介绍一下相关的结构,级联分类器的计算特征值的基础类FeatureEvaluator,功能包括读 *** 作read、复制clone、获得特征类型getFeatureType,分配分配窗口的 *** 作setImage、setWindow,计算有序特征calcOrd,计算绝对特征calcCat,创建分类器特征的结构create函数。级联分类器类CascadeClassifier。目标级联矩形的分组函数groupRectangles。接下来,我尝试使用CascadeClassifier这个级联分类器类检测视频流中的目标(haar支持的目标有人脸、人眼、嘴、鼻、身体。这里尝试比较成熟的人脸和眼镜)。用load函数加载XML分类器文件(目前提供的分类器包括Haar分类器和LBP分类器(LBP分类器数据较少))具体步骤如下:1)加载级联分类器调用CascadeClassifier类成员函数load实现,代码为:view plainCascadeClassifier face_cascade; face_cascadeload("haarcascade_frontalface_altxml"); 2)读取视频流这部分比较基础啦~~从文件中读取图像序列,读取视频文件,读取摄像头视频流看过我之前的文章,这3种方法应该了然于心。3)对每一帧使用该分类器这里先将图像变成灰度图,对它应用直方图均衡化,做一些预处理的工作。接下来检测人脸,调用detectMultiScale函数,该函数在输入图像的不同尺度中检测物体,参数image为输入的灰度图像,objects为得到被检测物体的矩形框向量组,scaleFactor为每一个图像尺度中的尺度参数,默认值为11,minNeighbors参数为每一个级联矩形应该保留的邻近个数(没能理解这个参数,-_-|||),默认为3,flags对于新的分类器没有用(但目前的haar分类器都是旧版的,CV_HAAR_DO_CANNY_PRUNING利用Canny边缘检测器来排除一些边缘很少或者很多的图像区域,CV_HAAR_SCALE_IMAGE就是按比例正常检测,CV_HAAR_FIND_BIGGEST_OBJECT只检测最大的物体,CV_HAAR_DO_ROUGH_SEARCH只做初略检测),默认为0minSize和maxSize用来限制得到的目标区域的范围。这里调用的代码如下:view plainface_cascadedetectMultiScale( frame_gray, faces, 11, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) ); 4)显示目标这个也比较简单,调用ellips函数将刚才得到的faces矩形框都显示出来更进一步,也可以在得到的每一幅人脸中得到人眼的位置,调用的分类器文件为haarcascade_eye_tree_eyeglassesxml,先将脸部区域选为兴趣区域ROI,重复上诉步骤即可,这里就不详细介绍了。当然,感兴趣的朋友也可以试试其他的xml文件作为分类器玩一下啊,感觉LBP特征虽然xml文件的大小很小,但效果还可以,不过我没有做过多的测试。光说不练假把式,最后贴上效果图和源代码的下载地址代码下载地址:>
以上就是关于1000个特征7个类别MATLAB中SVM得训练多久全部的内容,包括:1000个特征7个类别MATLAB中SVM得训练多久、西门子logo如何用内存卡写程序、matlab svmtrain如何使用的急求!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)