1000个特征7个类别MATLAB中SVM得训练多久

1000个特征7个类别MATLAB中SVM得训练多久,第1张

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如何使用的急求!!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10089449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存