ããè¿å¸åå°±æ¯åæ¥ææåæ¥è§¦libsvmï¼svmï¼çåå¦å¦ä½å©ç¨libsvmè¿è¡åç±»é¢æµï¼å
³äºåæ°å¯»ä¼çé®é¢å¨è¿éå§ä¸ä¸è°ï¼å¦æå¸å详述ã
å
¶å®ä½¿ç¨libsvmè¿è¡åç±»å¾ç®åï¼åªéè¦æå±æ§ç©éµåæ ç¾ï¼ç¶åå°±å¯ä»¥å»ºç«å类模åï¼modelï¼ï¼ç¶åå©ç¨å¾å°çè¿ä¸ªmodelè¿è¡åç±»é¢æµäºã
é£ç¥é©¬æ¯å±æ§ç©éµï¼ç¥é©¬åæ¯æ ç¾å¢ï¼æ举ä¸ä¸ªç´ç½çä¸è½å¨ç´ç½çä¾åï¼
说ä¸ä¸ªç级éé¢æ两个ç·çï¼ç·ç1ãç·ç2ï¼ï¼ä¸¤ä¸ªå¥³çï¼å¥³ç1ã女ç2ï¼ï¼å
¶ä¸
ç·ç1 身é«ï¼176cm ä½éï¼70kgï¼
ç·ç2 身é«ï¼180cm ä½éï¼80kgï¼
女ç1 身é«ï¼161cm ä½éï¼45kgï¼
女ç2 身é«ï¼163cm ä½éï¼47kgï¼
å¦ææ们å°ç·çå®ä¹ä¸º1ï¼å¥³çå®ä¹ä¸º-1ï¼å¹¶å°ä¸é¢çæ°æ®æ¾å
¥ç©éµdataä¸ï¼å³
ããdata = [176 70;
ãã180 80;
ãã161 45;
ãã163 47];
ããå¤å¶ä»£ç
ããå¨labelä¸åå
¥ç·å¥³çç±»å«æ ç¾ï¼1ã-1ï¼ï¼å³
ããlabel = [1;1;-1;-1];
ããå¤å¶ä»£ç
ããè¿æ ·ä¸é¢çdataç©éµå°±æ¯ä¸ä¸ªå±æ§ç©éµï¼è¡æ°4代表æ4ä¸ªæ ·æ¬ï¼åæ°2表示å±æ§æ两个ï¼labelå°±æ¯æ ç¾ï¼1ã-1表示æ两个类å«ï¼ç·çã女çï¼ã
Remark:è¿éæä¸ç¹åºè¯ä¸äºï¼å 为æçå°ä¸æ¢ä¸ä¸ªæåé®æè¿ä¸ªç¸å
³çé®é¢ï¼:
ä¸é¢æ们å°ç·çå®ä¹ä¸º1ï¼å¥³çå®ä¹ä¸º-1ï¼é£å®ä¹æå«çæå½±ååï¼
è¿ä¸ªè¯å®æ²¡æå½±ååï¼ï¼ç¨è趾头é½è½æ³åºæ¥ï¼æä¸ç¥é为ä»ä¹ä¹ä¼æ人é®ï¼ï¼è¿éé¢çæ ç¾å®ä¹å°±æ¯åºåå¼ç·çå女çï¼æä¹å®ä¹é½å¯ä»¥çï¼åªè¦å®ä¹ææ°å¼åçå°±å¯ä»¥ã
æ¯å¦æå¯å°å°ç·çå®ä¹ä¸º2ï¼å¥³çå®ä¹ä¸º5ï¼åé¢çlabelç¸åºä¸ºlabel=[2;2;5;5];
æ¯å¦æå¯å°å°ç·çå®ä¹ä¸º18ï¼å¥³çå®ä¹ä¸º22ï¼åé¢çlabelç¸åºä¸ºlabel=[18;18;22;22];
为ä»ä¹æ说è¿ä¸ªç¨è趾头é½è½æ³æä¹å®ä¹é½å¯ä»¥å¢ï¼å¦è¿æ°å¦çåºè¯¥é½ä¼æç½ï¼å°ç·çå®ä¹ä¸º1ï¼å¥³çå®ä¹ä¸º-1åå°ç·çå®ä¹ä¸º2ï¼å¥³çå®ä¹ä¸º5æ¬è´¨æ¯ä¸æ ·çï¼åºä¸ºå¯ä»¥æ¾å°ä¸ä¸ªæ å°å°ï¼2ï¼5ï¼è½¬æ¢æï¼1ï¼-1ï¼ï¼soæ以æ¬è´¨é½æ¯ä¸æ ·çï¼åé¢ç18ã22æ¬è´¨ä¹æ¯ä¸æ ·çã
è¿éè¦å¤è¯´ä¸äºï¼å¦æä½ åæ¬çæ°æ®éåçæ ç¾ä¸æ¯æ°å¼åçï¼æ¯å¦aãbãcï¼é£ä¹ä½ å®å
¨å¯ä»¥éè¿æç§è½¬æ¢æ å°å°ä¸æ¯æ°å¼åçæ ç¾è½¬æ¢ææ°å¼åçã
ç°å¨åå½æ£é¢ï¼æäºä¸é¢çå±æ§ç©éµdataï¼åæ ç¾labelå°±å¯ä»¥å©ç¨libsvm建ç«å类模åäºï¼ç®è¦ä»£ç å¦ä¸ï¼
ããmodel = svmtrain(label,data);
ããå¤å¶ä»£ç
ããæäºmodelæ们就å¯ä»¥ååç±»é¢æµï¼æ¯å¦æ¤æ¶è¯¥ç级å转æ¥ä¸ä¸ªæ°å¦çï¼å
¶
身é«190cmï¼ä½é85kg
æ们æ³éè¿ä¸é¢è¿äºä¿¡æ¯å°±ç»åºå
¶æ ç¾ï¼æ³ç¥éå
¶æ¯ç·ã1ãè¿æ¯å¥³ã-1ãï¼
æ¯å¦ 令 testdata = [190 85]; ç±äºå
¶æ ç¾æ们ä¸ç¥éï¼æ们å设å
¶æ ç¾ä¸º-1ï¼ä¹å¯ä»¥å设为1ï¼
Remark:è¿éåæä¸ç¹åºè¯ä¸äºï¼å 为æçå°ä¸æ¢ä¸ä¸ªæåé®æè¿ä¸ªç¸å
³çé®é¢ï¼:
å¦ææµè¯éåçæ ç¾æ²¡ææä¹åï¼æµè¯éåçæ ç¾å°±åºè¯¥æ²¡æï¼å¦åæµè¯éåçæ ç¾é½æäºï¼è¿é¢æµä½ 妹åï¼ï¼æ²¡ææ¯æ£ç¡®çï¼å°±åä¸é¢ä¸æ ·ï¼æ°æ¥çå¦çå
¶æ ç¾å±ä¸åºç¥éï¼å°±æ³éè¿å
¶å±æ§ç©éµæ¥é¢æµå
¶æ ç¾ï¼è¿ææ¯é¢æµåç±»ççæ£ç®çã
ä¹æ以平æ¶åæµè¯æ¶ï¼æµè¯éåçæ ç¾ä¸è¬é½æï¼é£æ¯å 为ä¸è¬äººä»¬æ³è¦ççèªå·±çåç±»å¨çææå¦ä½ï¼ææçè¯ä»·ææ ä¹ä¸å°±æ¯åç±»é¢æµçåç¡®çï¼è¿å°±éè¦ææµè¯éçæ¬æ¥ççå®çæ ç¾æ¥è¿è¡åç±»é¢æµåç¡®çç计ç®ã
è¯å½æ£ä¼ ï¼å³
testdatalabel = -1;
ç¶åå©ç¨libsvmæ¥é¢æµè¿ä¸ªæ°æ¥çå¦çæ¯ç·çè¿æ¯å¥³çï¼ä»£ç å¦ä¸ï¼
ãã[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model)
ããå¤å¶ä»£ç
ããä¸é¢æ们æ´ä½è¿è¡ä¸ä¸ä¸é¢è¿æ®µæ¶ æ[e gao]çèæ¯æ°æ®å代ç ï¼ä½ å«ç¬ï¼è¿ä¸ªæ¯çè½è¿è¡çï¼ä¹æç»æçï¼ï¼
ããdata = [176 70;
ãã180 80;
ãã161 45;
ãã163 47];
ããlabel = [1;1;-1;-1];
ããmodel = svmtrain(label,data);
ããtestdata = [190 85];
ããtestdatalabel = -1;
ãã[predictlabel,accuracy] = svmpredict(testdatalabel,testdata,model);
ããpredictlabel
ããå¤å¶ä»£ç
ããè¿è¡ç»æå¦ä¸ï¼
ããAccuracy = 0% (0/1) (classification)
ããpredictlabel =
ãã1
ããå¤å¶ä»£ç
ããåï¼æ们çå°ï¼éè¿é¢æµæ们å¾ç¥è¿ä¸ªæ°æ¥çå¦ççæ ç¾æ¯1(ç·ç)ï¼ç±äºåæ¬æ们å设å
¶æ ç¾ä¸º-1ï¼å设é误ï¼æ以åç±»åç¡®ç为0%ã
好ï¼éè¿ä¸é¢ç讲解ï¼ä¸ç¥é诸ä½çå®å¯¹äºå©ç¨libsvmè¿è¡åç±»æ¯å¦æäºä¸å®äºè§£ãè°è¦æ¯è¿ä¹éä¿çä¾åè¿æä¸æ¸
æ¥æä¹ä½¿ç¨libsvmè¿è¡åç±»ï¼é£æçæ è¯å¦ãï¼ä¸é¢ä½¿ç¨libsvmå·¥å
·ç®±æ¬èº«å¸¦çæµè¯æ°æ®heart_scaleæ¥å®é
è¿è¡ä¸ä¸æµè¯ï¼
ãã%% HowToClassifyUsingLibsvm
ãã% by faruto @ faruto's Studio~
ãã%
http://blog.sina.com.cn/farutoãã% Email:
[email protected]ãã%
http://www.MATLABsky.comãã%
http://www.mfun.laãã%
http://video.ourmatlab.comãã% last modified by 2010.12.27
ãã%% a litte clean work
ããtic;
ããclose all;
ããclear;
ããclc;
ããformat compact;
ãã%%
ãã% é¦å
è½½å
¥æ°æ®
ããload heart_scale;
ããdata = heart_scale_inst;
ããlabel = heart_scale_label;
ãã% éåå200个æ°æ®ä½ä¸ºè®ç»éåï¼å70个æ°æ®ä½ä¸ºæµè¯éå
ããind = 200;
ããtraindata = data(1:ind,:);
ããtrainlabel = label(1:ind,:);
ããtestdata = data(ind+1:end,:);
ããtestlabel = label(ind+1:end,:);
ãã% å©ç¨è®ç»éå建ç«å类模å
ããmodel = svmtrain(trainlabel,traindata,'-s 0 -t 2 -c 1.2 -g 2.8');
ãã% å类模åmodel解å¯
ããmodel
ããParameters = model.Parameters
ããLabel = model.Label
ããnr_class = model.nr_class
ããtotalSV = model.totalSV
ããnSV = model.nSV
ãã% å©ç¨å»ºç«ç模åçå
¶å¨è®ç»éåä¸çåç±»ææ
ãã[ptrain,acctrain] = svmpredict(trainlabel,traindata,model);
ãã% é¢æµæµè¯éåæ ç¾
ãã[ptest,acctest] = svmpredict(testlabel,testdata,model);
ãã%%
ããtoc;
ããå¤å¶ä»£ç
ããè¿è¡ç»æï¼
ããmodel =
ããParameters: [5x1 double]
ããnr_class: 2
ããtotalSV: 197
ããrho: 0.0583
ããLabel: [2x1 double]
ããProbA: []
ããProbB: []
ããnSV: [2x1 double]
ããsv_coef: [197x1 double]
ããSVs: [197x13 double]
ããParameters =
ãã0
ãã2.0000
ãã3.0000
ãã2.8000
ãã0
ããLabel =
ãã1
ãã-1
ããnr_class =
ãã2
ããtotalSV =
ãã197
ããnSV =
ãã89
ãã108
ããAccuracy = 99.5% (199/200) (classification)
ããAccuracy = 68.5714% (48/70) (classification)
ããElapsed time is 0.040873 seconds.
ãã>>