用libsvm做时间序列预测,为什么训练数据越少越准确?

用libsvm做时间序列预测,为什么训练数据越少越准确?,第1张

楼主的说法似乎不太对

首先,训练数据的主要区别是什么是测试数据:

如果我有一堆计时数据,首先随机分为两堆,一堆训练只用于看模型是好的,然后前者称为训练数据。下面是几个训练数据序列。(注意不要把训练数据的结果作为模型质量的度量,这是最基本的)。这个主题想说当马尔可夫阶数是1时比较好,时间序列数据应该看起来不错。所谓的k阶马氏序列意味着当前数据只与历史K数据点相关,且与该窗口之外的数据无关。如果数据本身是一个一阶Markovian,那么 T-2和数据本身都是独立的,也就是说在T-2或更不帮助预测时间不知道的历史,这个额外的数据相当于噪声,和大多数学习算法的输入噪声的影响。主题可以尝试L1 SVM(libsvm有此选项),或增加规则系数C来消除这些噪声的影响,当然如果数据符合一级马尔可夫完美假设,最好是去掉无关的信息。当然,还有另一种可能,即数据对一阶外矩的依赖性是高阶(非线性)。如果与二阶效应问题的题目是可怜的,但一次不是特别好(如P值不小),它可以被认为是一个问题。在这个时候,你可以考虑使用更复杂的模型,添加了更多的历史信息预测,你可以考虑尝试RBF核函数SVM(libsvm有),贝叶斯网络,或神经网络等模型。

根据课题的新的描述,第三(大概率)可以对数据本身信息的缺乏:股票价格预测的一般都是看新闻的同时,或者如果公司是看涨的,不是根据新闻跟进的经济和商业趋势,只看股票价格永远不能预测当秋天/熊市。

最后,如果像预测股票价格一切都那样简单,那么就不需要这么多机器学习和金融专家才能进行高频交易。

从最基本的开始吧: 基于词典的正负词词频, 我们实验室一个小组曾经在新浪微博上使用这个方法, 惊讶的发现这个如此不优美的方法的效果竟然那么的“可以看”。 在此之上一个改进的办法是对大量数据做一次二元的离散化(假定是正负情感), 以此选定阈值, 离散化的方法有很多, 不再赘述。接下来的方法主要分为两类:基于特征(feature-based): 这类方法比较好理解, 无非是人来选定特征空间, 然后对每一个数据项生成一个特征向量, 使用分类器对向量进行分类, 理论上所有的分类器都可以实现这个需求, 只是效果更不同。 方法之一是就是KNN, 但是和所有基于特征的方法一样, 特征的选取是一个永恒的话题,像KNN这种还需要维护巨大矩阵的方法尤其难以满足实用需求, 但是对于KNN的空间优化也有相应的办法, 就是对每个数据项指记录K项最近距离, 也就是K个<数据项ID, 距离>, 当有更近的数据项进来时, 替换最远的数据项, 此外, 我也同意@范文阁下的观点, 觉得KNN的效果不会好于SVM。 SVM: 经典分类器, 我决不敢自称完全理解SVM, 但使用方法大同, 也是将数据项生成特征向量(稍后会介绍另一种方法), 但是特征的选取是一个永恒的话题, 因为一切特征对于描述一个数据项来说都是必要的(但是不一定重要), 但是我们尽量选取合适的特征组来保证分类的准确率, 这一切, 这所做的一切都是对无法枚举出所有特征的现状的妥协。 SVM的开源包有很多, 楼主可以试试libsvm和svmlight。基于核函数(KernelMethod-based): 前面提到人为的选取特征的局限性, 并且隐含的线性不可分问题。 核函数是一个计算两个对象之间“相关度”(kernel)的函数。 有关核函数的定义和优化方法不一会儿能够谈清, 仅列出文献: wiki:http://enwikipediaorg/wiki/Kernel_methods Text Classification using String Kernels:http://dlacmorg/citationcfmid=944799&dl=ACM&coll=DL&CFID=96216241&CFTOKEN=33225628 Kernel Method for General Pattern Analysis:http://wwwkernel-methodsnet/tutorials/KMtalkpdf(以下方法没有经过验证) 基于核函数的SVM, 应用方式(以情感分类为例)可以简单地做文本分类(当然可以预先做词性过滤), 对于每一个需要做情感分类的文本之间算出kernel值, 用这个矩阵在svm中得到model, 然后对于测试数据, 或者预测数据在对训练数据中的每一项算kernel值, 拿这个矩阵用model去做测试(预测)。 这个过程的一个“快餐”的理解方式是: 将每一个数据与测试数据集中的每一项的相似度的向量当成之前feature-based的方法中的特征向量, 整个过程不过还是一个基于特征的训练-预测过程(当然, 这说法是不对的)。 libsvm中自带subsequence kernel 的实现使用参数-t来进行使用, 此外也支持自定义核函数。 之前谈过的KNN, 我觉得也可以引入kernel, 但是至于可行性和必要性嘛, 大家也就当讨论一下吧。 简单来说就是将KNN中的欧式距离替换成kernel值。==============================CRF应该没办法做情感分类吧, 毕竟不是分类器, 拿它做过实体识别, 感觉序列标注器不适合这个问题。严重同意@范文阁下的说法, 在实用领域, 预处理和数据获取(语料)才是王道, 机器学习就和人学习一样, 教育方法再好, 教的东西不好一样是浮云。 拿我大二数据挖掘老师的话讲, 统计模型都是现成的, 拼得就是数据。

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文件的大小很小,但效果还可以,不过我没有做过多的测试。光说不练假把式,最后贴上效果图和源代码的下载地址代码下载地址:http://downloadcsdnnet/detail/yang_xian521/3800468OpenCV配套的教程Tutorials对于Video的部分,没有实例进行说明,我只能摸石头过河啦,之前试过一个camShift做目标检测,这次试一试光流法做运动估计。这里使用的光流法是比较常用的 Lucas-Kanade方法。对于光流法的原理,我就不过多介绍了,主要讲使用OpenCV如何实现。首先利用goodFeaturesToTrack函数得到图像中的强边界作为跟踪的特征点,接下来要调用calcOpticalFlowPyrLK函数,输入两幅连续的图像,并在第一幅图像里选择一组特征点,输出为这组点在下一幅图像中的位置。再把得到的跟踪结果过滤一下,去掉不好的特征点。再把特征点的跟踪路径标示出来。说着好简单哦~~程序的效果和代码下载http://downloadcsdnnet/detail/yang_xian521/3811478视频捕捉的对象中,背景通常保持不变。一般分析中关注移动的前景物体,威力提取出前景物体,需要建立背景的模型,将模型和当前帧进行比对检测前景物体。前景提取应用非常广泛,特别是在智能监控领域中。如果有不含前景物体的背景,提取前景的工作相对容易,只需要比对当前帧和背景的不同,调用函数absdiff实现。但是大多数情况,获得背景是不可能的,比如在复杂的场景下,或者有光线条件的变化。因此,就需要动态的变换背景。一种简单的办法是对所观察到的取平均,但这样做也有很多弊端,首先,这种办法在计算背景的前需要输入大量的,其次我们进行取平均的过程中不能有前景物体进入。所以一种相对好的办法是动态建立背景并实时更新。具体的实现过程主要分为两部分:一部分是调用absdiff函数找出当前和背景的区别,这之中使用了threshold函数去除为前景,当前像素与背景像素变化超过一定阈值的时候才认定其为前景;另一个工作是更新背景,调用函数accumulateWeighted,根据权重参数可以调整背景更新的速度,将当前更新到背景中,这里巧妙利用得到的前景提取结果作为mask,在更新背景的过程中避免了前景的干扰。程序效果如图,代码下载地址为http://downloadcsdnnet/detail/yang_xian521/3814878虽然可以调整阈值参数和权重更新速度调节前景提取的结果,但从测试视频可以发现,树叶的运动对结果的干扰还是不小的,特别对于第一帧出现前景的情况,由于后续更新背景都是对前景mask后对背景进行更新的,所以第一帧的前景部分对背景的影响因子很难被更新掉。这里提出一种改进的办法——混合高斯模型。可以使一个像素具有更多的信息,这样可以有效的减少类似树叶的不停飘动,水波的不停荡漾这种对前景的干扰。这个精密的算法比之前我所介绍的简单方法要复杂很多,不易实现。还好,OpenCV已经为我们做好了相关工作,将其封装在类BackgroundSubtractorMOG,使用起来非常方便。实现代码如下:view plainMat frame; Mat foreground; // 前景 namedWindow("Extracted Foreground"); // 混合高斯物体 BackgroundSubtractorMOG mog; bool stop(false); while (!stop) { if (!captureread(frame)) { break; } // 更新背景并且输出前景 mog(frame, foreground, 001); // 输出的前景并不是2值,要处理一下显示 threshold(foreground, foreground, 128, 255, THRESH_BINARY_INV);

只有线性可分的2维情况,才能画出可视化图。 高维无法可视化 线性不可分的,由于已经映射到高维空间,而且是采用核函数,本身的映射函数不可知,所以在原空间中无法画出最优分类超平面。 但通过核函数映射后在 高维空间中的分类超平面的方程可知。

<1> 下载Libsvm、Python和Gnuplot。我用的版本分别是:Libsvm(281),Python(24),Gnuplot(373)。注意:Gnuplot一定要用373版,371版的有bug

<2> 修改训练和测试数据的格式(可以自己用perl编个小程序):

目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值

例如:

23 1:56 2:32

表示训练用的特征有两维,第一维是56,第二维是32,目标值是23

注意:训练和测试数据的格式必须相同,都如上所示。测试数据中的目标值是为了计算误差用

<3> 分别使用Libsvm中的Windows版本的工具svmscaleexe进行训练和测试数据的归一化,svmtrainexe进行模型训练,svmpredictexe进行预测

(1)svmscaleexe的用法:svmscaleexe featuretxt featurescaled

默认的归一化范围是[-1,1],可以用参数-l和-u分别调整上界和下届,featuretxt是输入特征文件名

输出的归一化特征名为featurescaled

(2)svmtrtrainexe训练模型

我习惯写个批处理小程序,处理起来比较方便。例如svm_trainbat中训练语句为:

svmtrainexe -s 3 -p 00001 -t 2 -g 32 -c 053125 -n 099 featurescaled

训练得到的模型为featurescaledmodel

具 体的参数含义可以参考帮助文档。这里-s是选择SVM的类型。对于回归来说,只能选3或者4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数,原因在“A Practical Guide support vector classification”中已经简单介绍过了。-p尽量选个比较小的数字。需要仔细调整的重要参数是-c和-g。除非用 gridregressionpy来搜索最优参数,否则只能自己慢慢试了。

用gridregressionpy搜索最优参数的方法如下:

pythonexe gridregressionpy -svmtrain H:/SVM/libsvm-281/windows/svmtrainexe -gnuplot C:/gp373w32/pgnuplotexe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 H:/SVM/libsvm-281/windows/featurescaled > gridregression_featureparameter

注意:-svmtrain是给出svmtrainexe所在路径,一定要是完整的全路径

-gnuplot是给出pgnuplotexe所在路径。这里要用pgnuplotexe这种命令行形式的,不要用wgnupl32exe,这个是图形界面的。

-log2c是给出参数c的范围和步长

-log2g是给出参数g的范围和步长

-log2p是给出参数p的范围和步长

上面三个参数可以用默认范围和步长

-s选择SVM类型,也是只能选3或者4

-t是选择核函数

-v 10 将训练数据分成10份做交叉验证。默认为5

最后给出归一化后训练数据的全路径

搜索最优参数的过程写入文件gridregression_featureparameter(注意别少了这个>符号啊)

根据搜索到的最优参数修改featurescaledmodel中的参数

(3)用svmpredictexe进行预测

svmpredictexe feature_testscaled featurescaledmodel feature_testpredicted

其中feature_testscaled是归一化后的测试特征文件名,featurescaledmodel是训练好的模型,SVM预测的值在feature_testpredicted中。

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的博客

(1)首先使用subsetpy工具将iris数据集(如何将UCI转化为LIBSVM格式的,请参考前面博文)抽样:

python subsetpy irislibsvmtxt 100 iristrain iristest

抽取100个作为训练数据iristrain,剩余50个作为测试数据iristest。

(2)使用libsvm进行多分类——利用easypy工具

在使用前,要确保上面环境变量已经配置。然后将tra_iristxt、tes_iristxt拷贝到tools文件夹,以防止写长路径名。同时,因为gnuplot的安装路径人人都不相同,所以,需要在easypy中做相应修改,如下将

CODE:

else:

# example for windows

svmscale_exe = r"/windows/svm-scaleexe"

svmtrain_exe = r"/windows/svm-trainexe"

svmpredict_exe = r"/windows/svm-predictexe"

gnuplot_exe = r"D:\Program Files\gnuplot\bin\gnuplotexe"

grid_py = r"/gridpy"中D:\Program Files\gnuplot\bin\gnuplotexe,改为你的gnuplotexe所在位置。

syr 补充:

在“交叉验证寻找最优参数”之前,需要在gridpy中:

CODE:

else:

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

原文地址: http://outofmemory.cn/langs/12177074.html

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

发表评论

登录后才能评论

评论列表(0条)

保存