ä¸ï¼ä¸è½½libsvm
http://www.csie.ntu.edu.tw/~cjlin/libsvm/å¨libsvmçç½ç«ä¸ä¸è½½ libsvm-3.12.zipæ件ï¼è§£ååæ¾å¨ä»»æç®å½ä¸ï¼æ好æ¾å¨MATLABå·¥å
·ç®±ä¸ï¼æ¯å¦ C:\Program Files\MATLAB\R2011a\toolbox\libsvm-3.12ä¸ã
äºï¼é
ç½®ç¼è¯å¨
æå¼ matlabï¼åæ¢å°C:\Program Files\MATLAB\R2011a\toolbox\libsvm-3.12\matlabç®å½ä¸ï¼é®å
¥ä»¥ä¸å½ä»¤ï¼
mex âsetup
åºç°æ示è¯å¥
Please choose your compiler for building MEX-files:
Would you like mex to locate installed compilers [y]/n?n %è¿æ¬¡æ¯éæ©ç¼è¯å¨ï¼è¾å
¥nï¼éæ©èªå®ä¹çç¼è¯å¨
åºç°ä»¥ä¸é项ï¼å çµèèå¼ï¼
Select a compiler:
[1] Intel C++ 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[2] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 SP1 linker)
[3] Intel Visual Fortran 11.1 (with Microsoft Visual C++ 2008 Shell linker)
[4] Lcc-win32 C 2.4.1
[5] Microsoft Visual C++ 6.0
[6] Microsoft Visual C++ 2005 SP1
[7] Microsoft Visual C++ 2008 SP1
[8] Microsoft Visual C++ 2010
[9] Microsoft Visual C++ 2010 Express
[10] Open WATCOM C++
[0] None
Compiler: 8%å¯ä»¥ç¨å
¶ä»çï¼åºç°ä»¥ä¸æ示è¯å¥
Your machine has a Microsoft Visual C++ 2010 compiler located at
C:\Program Files\Microsoft Visual Studio 10.0. Do you want to use this compiler [y]/n?
ç¼è¯å¨é»è®¤è·¯å¾ï¼ç¡®è®¤æ£ç¡®è¾å
¥yï¼æ´æ¹è·¯å¾ï¼è¾å
¥n
è¾å
¥yåºç°å次确认
Please verify your choices:
Compiler: Microsoft Visual C++ 2010
Location: C:\Program Files\Microsoft Visual Studio 10.0
Are these correct [y]/n? y
ç¼è¯å¨é
ç½®å®æ
Trying to update options file: C:\Documents and Settings\zhangduokun\Application Data\MathWorks\MATLAB\R2011a\mexopts.bat
From template: C:\PROGRA~1\MATLAB\R2011a\bin\win32\mexopts\msvc100opts.bat
Done . . .
ä¸ï¼ç¼è¯
è¾å
¥å½ä»¤
>> make
>>
%ç¼è¯å®æ
ç³»ç»å°±ä¼çæsvmtrain.mexw32ï¼svmpredict.mexw32ï¼libsvmread.mexw32ålibsvmwrite.mexw32çæ件ï¼å¯¹äº Matlab 7.1以ä¸ä¸çæ¬ï¼çæç对åºæ件为svmtrain.dllï¼svmpredict.dllåread_sparse.dllï¼æ²¡åæµè¯ï¼ï¼ç¶åå¯ä»¥å¨matlabçèå File->Set Path->add with subfoldersï¼å¯ç´æ¥ç¨Add Folderï¼éï¼æ C:\Program Files\MATLAB\R2011a\toolbox\libsvm-3.12\matlabç®å½æ·»å è¿å»ï¼è¿æ ·ä»¥åå¨ä»»ä½ç®å½ä¸é½å¯ä»¥è°ç¨ libsvmçå½æ°äºã
åï¼æµè¯
为äºæ£éª libsvmå matlabä¹é´çæ¥å£æ¯å¦å·²ç»é
ç½®å®æï¼å¯ä»¥å¨ matlabä¸æ§è¡ä»¥ä¸å½ä»¤ï¼
>>load heart_scale
å®æ该æ¥éª¤ååç°Workspaceä¸åºç°äºheart_scale_instå heart_scale_label,说ææ£ç¡®
>>model = svmtrain(heart_scale_label, heart_scale_inst, '-c 1 -g 0.07');
>> [predict_label, accuracy, dec_values] = svmpredict(heart_scale_label, heart_scale_inst, model); %
Accuracy = 86.6667% (234/270) (classification)% done
å¦æè¿è¡æ£å¸¸å¹¶çæäºmodelè¿ä¸ªç»æä½ï¼å
¶ä¸ä¿åäºææçæ¯æåéåå
¶ç³»æ°ï¼ï¼é£ä¹è¯´ælibsvmåmatlab ä¹é´çæ¥å£å·²ç»å®å
¨é
ç½®æåã
éï¼
å¦æä½ æ²¡æ heart_scale.matï¼å®æ¹ç°å¨é½ä¸ç»äºï¼ç»çé½æ¯VC++ä¸çæ ¼å¼ æ以load ä¼æ¥éï¼heart_scale must be same as previous linesï¼
æ以å¿
须使ç¨ç»çä¸ä¸ªå½æ°ï¼è½¬åæ°æ®æ¤å½æ°ä¸ºlibsvmread()
使ç¨å¦ä¸ï¼ [label_vector, instance_matrix] = libsvmread('filename');
æ¤å¤ä¸ºäºè·å®æ¹ç»ä¸å称å¯ä»¥[heart_scale_label,heart_scale_inst] = libsvmread('heart_scale');
ç±äºheart_scaleå¨libsvm-3.11ç®å½ä¸ï¼ä¸æ¯å¨matlabä¸ï¼æ以ç´æ¥ç¨libsvmreadå½ä»¤ä¼æ¥éï¼è¦ä¹°æ¹åå½åè·¯å¾ï¼æè
使ç¨[heart_scale_label,heart_scale_inst] = libsvmread('../heart_scale');../代表è¿åä¸å±è·¯å¾ã
注æï¼
1. matlabèªå¸¦äºCç¼è¯å¨Lcc-win32Cï¼ä½æ¯libsvmåå§çæ¬æ¯C++å®ç°çï¼å æ¤éè¦C++çç¼è¯å¨æ¥ç¼è¯ï¼è¿å°±æ¯ä¸éç¨matlabé»è®¤ç¼è¯å¨èéæ©å
¶ä»C++ç¼è¯å¨çåå ã
matlabæ¯æçç¼è¯å¨ä¹æ¯æéçï¼å¯ä»¥æ¥çä¸åçæ¬matlabæ¯æçç¼è¯å¨å表
2. å¦æmatlabçæ¬å¤ªä½ï¼å¦matlab 7.0æ¯ä¸è½ç¨VSä½ä¸ºç¼è¯å¨çï¼åªè½ç¨VC++ 6.0
3. .mexw32 æ件æ¯ç»è¿å å¯çï¼æå¼æ¯ä¹±ç ï¼å½æ°æ¬èº«æ²¡æ帮å©ã
ä¾å¦è¾å
¥ help svmpredictä¼åºç°æ¥éï¼ svmpredict not found
å·¥å
·ç®±libsvm-3.12\matlabä¸READMEæ件ææ¯å¸®å©æ件ã
ä½æ¯è¾å
¥help svmtrainä¼åºç°å¸®å©ä¿¡æ¯ï¼å
¶å®åºç°çæ¯ç³»ç»èªå¸¦çsvmtrainå½æ°ï¼æ²¡ælibsvmå·¥å
·ç®±ä¸ç好ç¨ã
4.å¨æ°çæ¬libsvm3.12ä¸ï¼æ件夹libsvm-3.12\windowsä¸å·²ç»æç¼è¯å¥½çç¨åºï¼å¯ä»¥ç´æ¥ä½¿ç¨ï¼åªéè¦ælibsvm-3.12\windowsæ·»å å°matlabè·¯å¾ä¸å³å¯ï¼ä¸éè¦ç¼è¯çè¿ç¨ãå½ç¶æ好è¿æ¯èªå·±ç¼è¯ä¸éï¼å 为ç¼è¯ç¯å¢ä¸åä¼å¯¼è´ä¸äºä¸å¯é¢ä¼°çå°é®é¢ï¼èªå·±ç¼è¯çè¿ç¨æ¯å¯æ§çã
5. æµè¯ç¨æ°æ®éï¼libsvmå®ç½ä¸æä¾äºå¾å¤æ°æ®é
æµè¯ä½¿ç¨çheart_scaleæ°æ®éæ¯C++çæ¬çï¼ç±»æ ç¾ 1:第ä¸ä¸ªå±æ§ 2ï¼ç¬¬äºä¸ªå±æ§â¦ï¼ï¼å¯ä»¥ç¨libsvmreadæ¥è½¬æ¢ä¸ºmatlabçæ¬çï¼å®ä»¬çåºå«å¨ç±»æ ç¾ï¼ã
[label_vector, instance_matrix] = libsvmread(âC++çæ¬æ°æ®éâ); %å¾å°ç±»æ ç¾åå±æ§ç©éµï¼ç¶åå¯ä»¥ä½¿ç¨å®ä»¬è®ç»äºmodel = svmtrain(label_vector, instance_matrix);
>> load heart_scale
>> model = svmtrain(heart_scale_label,heart_scale_inst);
*
optimization finished, #iter = 162
nu = 0.431029
obj = -100.877288, rho = 0.424462
nSV = 132, nBSV = 107
Total nSV = 132
>> [predict_label,accuracy] = svmpredict(heart_scale_label,heart_scale_inst,model);
Accuracy = 86.6667% (234/270) (classification)
6.åèèµæ
libsvmåºä¸è½½ï¼
http://www.csie.ntu.edu.tw/~cjlin/libsvm/è§é¢ï¼
http://v.youku.com/v_showMini/id_XMjc2NTY3MzYw_ft_131.htmlï¼æå°é®é¢ï¼çä¸ä¼æå°ï¼