2023年模式识别第二次上机实验报告.docx
北京科技大学计算机与通信工程学院模式分类第二次上机实验报告姓名:X XXXXX学号:0 0 000000班级:电信11时间:2 0 23-04-16一、实验目的1 .掌握支持向量机(SVM)的原理、核函数类型选择以及核参数选择原则等;二、实验内容2 .准备好数据,一方面要把数据转换成Libsvm软件包规定的数据格式为:la b e 1 i nde x 1 : v a luel index2:value 2 .其中对于分类来说1 abe 1为类标记,指定数据的种类;对于回归来说label为目的值。(我重要要用 到回归)Ind e x是从1开始的自然数,va 1 ue是每一维的特性值。该过程可以自己使用excel或者编写程序来完毕,也可以使用网络上的F onnatD a taL i bs v m. x 1 s来完毕。FormatD a t a Libsvm.x 1 s 使用说明:先将数据按照卜.列格式存放(注意label放最后面):val u el v alue 21 a belval u el value 2 lab e 1然后将以上数据粘贴到FormaiDalaLibs v m.xl s中的最左上角单元格,接着工具一宏执行行 FormatDataToL i bsvm宏。就可以得到lib s vin规定的数据格式。将该数据存放到文本文献中进行 下一步的解决。3 .对数据进行归一化。该过程要用到1 i b svm软件包中的s v msea 1 e .ex eS v msc a le 用法:用法:svmsc a le - 1 1 ower u u p p e r -y y_lower y_uppc r -s s a v e_ f il e name -r re store _fil e n a me f i I e n a m e (缺省值: 1 o wer = 1, upper = 1,没有对 y 进行 缩放) 其中,-1:数据卜限标记;lower:缩放后数据下限;-u:数据上限标记;u ppc亡缩放后数据上限; 一 y:是否对目的值同时进行缩放;y_l ower为下限值,y_up p er为上限值;(回归需要对目的进行缩 放,因此该参数可以设定为-y 11 ) -s save_fil e n a me:表达将缩放的规则保存为文献sa v e _f i I e name; -r re s t ore_f i lename:表达将缩放规则文献 r e store_filen a m e 载入后按此缩 放;f ilen a me:待缩放的数据文献(规定满足前面所述的格式)。缩放规则文献可以用文本浏览器打开,看到其格式为:ylower u p per mi n m a x xlower u p p eri n dex 1 mini max 1index 2 niin2 max 2其中的lower与upper与使用时所设立的lower与u p per含义相同;in dex表 示特性序 号;min转换前该特性的最小值;max转换前该特性的最大值。数据集的缩放结果在此情况下通过 DOS窗口输此当然也可以通过DOS的文献重:定向符号”/将结果另存为指定的文献。该文件中的 参数可用于最后面对目的值的反归化。反归一化的公式为:(Vai ue_ 1 ow e r)*(max -mi n ) /(upp e r -1 o wer)+ 1 owe r其中value为归一化后的值,其他参数与前面介绍的相同。建议将训练数据集与测试数据集放在同一个文本文献中一起归一化,然后再将归一化结果提成训练 集和测试集。4 .训练数据,生成模型。用法: svm t rain opli o ns (raini n g_ s e t_ f ile mod e其中,opti。ns(操作参数):可用的选项即表达的涵义如下所示-ssvm类型:设立SVM类型,默认值 为0,可选类型有(对于回归只能选3或4):0 - C-SV C 1 - n -SVC 2 - one-clas s - S VM 3 - e -SVR4 一 n - SVR -t核函数类型:设立核函数类型,默认值为2,可选类型有:0 -线性核:u,*vl -多项式核:(g- u* v + c o e f O)de g re e 2 RBF 核:e( u v 2) g - 3 s i gmoid 核:tan h (g*u,* v + coef 0) d d e g re e :核函数中的d e gree设立,默认值为3;g g :设立核函数中的g ,默认值为1/k ;-rcoefO:设立核函数中的co e f 0,默认值为0; c cos t:设立C- SVC、e SVR、n6-SVR中从处罚系数C,默认值为l;-n n:设立n- SVC、one class-SVM与n-SVR 中参数n ,默认值0.5;- pe :设立n - SVR的损失函数中的e,默认值为0.1;m c a c hesize:设立c a che内存大小,以MB为单位,默认值为40; -e e:设立终止准则中的可 容忍偏差,默认值为0.00 1; -h shrinking:是否使用启发式,可选值为0或I.默认值为l;-b概 率估计:是否计算SVC或SVR的概率估计,可选值0或1,默认0;-wi weight:对各类样本的处罚 系数C加权,默认值为1; -v n: n折交叉验证模式。其中一g选项中的k是指输入数据中的属性数。操作参数-v随机地将数据剖分为n部分并计算 交叉检查准确度和均方根误差。以上这些参数设立可以按照SVM的类型和核函数所支持的参数进 行任意组合,假如设立的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数; 假如应有的参数设立不对的,参数将采用默认值。t r a in i ng_sct_filc是要进行训练的数据 集;mode 1 .file是训练结束后产生的模型文献,该参数假如不设立将采用默认的文献名,也可以设立成自己惯 用的文献名。本实验中的参数一s取3, -t取2 (默认)还需拟定的参数是-c,-g,- p另,实验中所需调整的重要参数是-c和-g,-c和-g的调整除了自己根据经验试之外,还可以使用 g ridrc g rcssion.py对这两个参数进行优化。(需要补充)该优化过程需要用到PythonQ. 5),G n uplot (4. 2), gri d reg r e ssio n . py(该文献需要修改途 径)。然后在命令行下面运营:p ython. e x e gridreg r ess i on. py - 1 og2c -10,10, 1 -log2g 10, 10,1 -io g 2 p 10,10, 1 -s 3 -t 2 -v 5 - s vmtrai nE :1 i bsvmlibsvm-2.86wi n dow s s v m-tra i n .exe-g nuplol E : 1 i b svmMib s vm-2.86gn u p 1 otbin p g n u plo t .e x e E: 1 ibsvmM i bs v m- 2 .86w i ndowstrai n .txt > g r i d r e gre s sio n _f e ature.parame t er以上三个途径根据实际安装情况进行修改。-1 og2c是给出参数c的范围和步长-1 og2g是给出参数g的范围和步长一1 og2P是给出参数p的 范围和步长上面三个参数可以用默认范围和步长-s选择SVM类型,也是只能选3或者4 -t是选择核函数-v 10将训练数据提成1 0份做交叉验证。默认为5 为了方便将g ridre g ression.p y是存放在p y ( h on.exe安装目录下t ri a n. txt 为训练数据,参数存放在 gri d reg r ession_f e a t u re. p a rameter 中,可以自 己命名。搜索结束后可以在g ridreg r es s ion_ f eat u re.param e te r中最后一行看到最优参数。其中,最后一行的第一个参数即为-c,第二个为-g,第三个为-p,最后一个参数为均方误差。前三个 参数可以直接用于模型的训练。然后,根据搜索得到的参数,重新训练,得到模型。5.测试用法:s vmprcdi c t op t ions t e st_fi 1 c mod e l_filc o u t p ut_fil e options(操作参数):-b probabili t y_ e slim a les:是否需要进行概率估计预测,可选值为0或者I,默认值为0。model_fi 1 e是由s v mtrain产生的模型文献;t est_ file是要进行预测的数据文献;ou t put_ f ile是svmpr e di c t的输出文献,表达预测的结果值。输出结果涉及均方误差(Mean s quar c d error)和相关系数(Squared c orrcl a t i o n cocffici e nl)o三、实验仪器、设备1. PC机-系统最低配置5 12M内存、P4CPU;2. Matlab仿真软件 一 7.0 / 7.1 /202 3a等版本的Mallab软件。3coi12 0数据库;四、实验原理。使用s v m- s cal e 对数据进行缩放是必要的。由于适当的scale有助于参数的选取和建svm 模型的速度。svm-scale会对value做s cal e。范围用-1, -u指定,通常是0,1 ,或是 1, 1。(文本分类一般选0 ,1。输出在s td。ut。此外要注意的是te s ting d a ta和train i ng dat a要一起scaleo而svm- s cale最难用的地方就是iS办法指定(es t ing da t a / t r a ining dat a为同一文档,然后一起scale。因此为了后面测试,还要对测试集进行s c五、实验数据及结果分析:6 26769.7训练样本辨认率1(%)测试样本辨认$ /(%)72.979.38 1S vmt o y输出图形S v m分类器ma t I ab代码cle a r;%清屏c 1 c ; aX =1o a d(*data. txt');n =1 ength(X);%总样本数量y= X(:,4); %类别标志X =X(:,1:3); a TOL = 0.0 0 0 1 ;% 精度规定 aC =1;%参数,对损失函数的权重Ab = 0;%初始设立截距gWo 1 d =0;%未更新a时的W(a )Wnew = 0: %更新 a 后的 W(a)fori = I :50%设立类别标志为1或者-1ay(i) enda = z e ros ( n , 1 ); % 参数 afor i = 1 : n%随机初始化 a, a 属于0,C aa (i) = 0. 2 ;end%为简化计算,减少反复计算进行的计算K =ones(n,n);Afor i = 1 :n%求出K矩阵,便于之后的计算af or j = I : nK (i, j) = k ( X(i, :),X( j , :);a endAends um = z e ros(n,l);%中间变量,便于之后的计算,s u m(k) =sigina a(i) * y (i) *K(k,i); fork = I : nf or i = 1 : nsum(k) = sum( k ) + a (i) * y (i) * K( i , k);endendwhile I %迭代过程a%启发式选点nl = I; %初始化,nl,n2代表选择的2个点n2 = 2; 4%nl按照第一个违反KKT条件的点选择whi 1 e nl <= da i f y(nl) * ( s u m( n 1) 4- b ) = 1 && a(nl) >= C && a ( n 1 )<=0b rcak;endA if y( n 1 ) * ( s um(n I) + b) > 1 & & a(n 1 ) -= 0 abre a k;e nd* i f y (nl) * (sum(n 1 ) + b) < 1 & & a (n 1)b r e ak;en nl = nl + 1;AendA% n 2按照最大化|E1-E2|的原则选取aEl = 0;E 2 = 0 ;AmaxDif f = 0;%假设的最大误差aEI = sum(n 1 ) + b y (nl) ;%nl 的误差Afor i = 1 : nAtem p S um = s um (i) + b y ( i ); a if a bs (El - t empSum)>m a xDif很m a xD i ff = a b s(E 1 - tempSum);E2 = tempSum;e rxbendA%以下进行更新a I o 1 d = a (nl);a 2 old = a(n2);KK =K(nl,nl) + K (n2, n2) -2*K(n I,n2);a2new = a2old + y( n 2) *( E 1 - E2) / KK;%计算新的 Q%a2 必须满足约束条件aS - y(nl) * y ( n 2 );i f S = -1U = max( 0 , a 2 old - a 1 old) V = min (C,C - alo 1 d + a2 o 1 d );a e 1 seU = m a x (0, a 1 old + a2ol d C ) ;a V = mi n (C , alo 1 d + a2old);endif a2new > V.* a2n e w = V ;endif a2n e w < a2new = U/e n cUal n ew = alold + S * (a2o 1 d - a 2 n e w) ;%计算新的 a1a(nl) = a 1 new;%更新 aa (n2) = a2new;a%更新部分值sum = z eros(n, I);fork =1 : M f or i = 1 :sum(k) = s um(k) + a (i) * y(i)* K(i,k);4 endendWo 1 d = Wnew;AWn e w = 0 ; %更新 a 后的 W(a)t e mp S um = 0; %临时变量Afor i = 1 : nfor j =1 : nt e mpS u m= t e m p Sum + y ( i )*y( j )* a (i)*a(j)*K(i, j )泠 en dW n ew= Wn e w+ a( i );W n ew= Wn e w+ a( i );endWnew= Wn e w - 0 . 5 * lempSum;%以下更新b:通过找到某一个支持向量来计asupport= 1;%支持向量坐标初始化Awh i 1 e abs( a(su p port) < le-4 && su p port V= ha suppor t = s u pport + 1 ;e nckb = 1 / y(support) - s um(s u p p ort);%判断停止条件if abs (Wne w/ Wold - 1) <= TOLbrca k 泠endend%输出结果:涉及原分类,辨别函数计算结果,svm分类结果a f or i = 1 :nfpr i ntf('第d 点:原标号',i);A i fi <= 50f p rint f ('- 1 *);a e Isef pri n tf(' 1'); endfp r intf C判别函数值 f分类结果s u m(i) + b); a i f abs( s um(i) +b - 1) < 0. 5f p r i n t f ('1 n ');a ei s e if abs(sum(i) + b + 1) < 0.5fprin t f('-ln,);elsefprin t f ('归类错误n')泠endend-e n dy = exp(-0.5* n o rm( x 1y = exp(-0.5* n o rm( x 12 .名为f的功能函数部分:function y = k(x 1,x2>a2).A2) ;Aend