可能會随時更新,,,
第一個實驗(desktop computer) 将2224個ep和normal總樣本進行歸一化: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-scale.exe epnorma llibsvm.svm > epnormallibsvm.scale WARNING: original #nonzeros 2127904 new #nonzeros 6671908 Use -l 0 if many original feature values are zeros
對2224個總樣本抽樣(按約8:2的比例分為訓練集和測試集): D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\tools>python subset.py epnorm allibsvm.scale 1770 epnormallibsvm.train epnormallibsvm.test
使用最easy的方式跑第一次svm,即使用easy.py工具(需要安裝gnuplot軟體): D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\tools>python easy.py epnormal libsvm.train epnormallibsvm.test Scaling training data... WARNING: original #nonzeros 5309923 new #nonzeros 5309939 Use -l 0 if many original feature values are zeros Cross validation... 艾瑪,機子卡了,,,
the second day...
D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-predict.exe epnor mallibsvm.test.scale epnormallibsvm.train.model epnormalresult1.txt Accuracy = 97.7974% (444/454) (classification)
結果還不錯啊。
第二組實驗(laptop,不使用easy.py工具了,第一組實驗準确率還挺高的,不知道是否存在過拟合): 對歸一化後的2224個總樣本抽樣(按約7:3的比例分為訓練集和測試集): D:\libsvm-3.20\tools>python subset.py epnormallibsvm.scale 1550 epnormallibsvm.t rain epnormallibsvm.test
直接用svm-train.exe工具對訓練集進行訓練svm模型: D:\libsvm-3.20\tools>cd ../windows
D:\libsvm-3.20\windows>svm-train.exe epnormallibsvm.train epnormallibsvm.train.m odel * optimization finished, #iter = 798 nu = 0.828093 obj = -1218.847945, rho = -5.348895 nSV = 1291, nBSV = 1276 Total nSV = 1291
使用svm-predict.exe工具對上一步訓練好的model在測試集上進行測試: D:\libsvm-3.20\windows>svm-predict.exe epnormallibsvm.test epnormallibsvm.train. model epnormalresutl2.txt Accuracy = 61.5727% (415/674) (classification)
果然存在過拟合。。。或者還是參數沒有調好,,,或者特征樣本點不夠“特征”??
第三個實驗(laptop,對第二個實驗進行自動選擇最優參數,即還是使用easy.py,隻是想對比一下結果): 估計得跑個十幾分鐘了(開始時間:2015.4.17 8:42:01) 有兩台電腦任自己調配的好處就是,一台機器跑着一個實驗,可以在另一台機器上跑另一個實驗,吼吼~ 現在已經是9:17:30了,過去半個多小時了,還在跑着,,,使用easy.py進行參數調優實在是太慢了,準備手動調優參數了。 。。。 9:32:30了,50分鐘過去了,仍然是Cross validation。。。此時的參數為(gnuplot上實時顯示的): Best log2(C) = 5 log2(gamma) = -5 accuracy = 96.7742% C = 32 gamma = 0.03125 其中,log2(C) 為橫坐标,log2(gamma)為縱坐标。 實際上,手動調參,主要就是懲罰系數C和rbf徑向基核函數的參數gamma。那就參考此刻的C值哈gamma值,從這裡開始吧。它是是繼續跑它的(laptop),我在desktop上手動調參。 下面的幾個實驗都做完了,這個實驗直到11:03:28才完成,曆時2個小時21分鐘。 看下結果吧(昨天晚上跑的第一個實驗,早晨來了一看又崩了,沒看到結果。。。這次可以看了,desktop還不如laptop): D:\libsvm-3.20\tools>python easy.py epnormallibsvm.train epnormallibsvm.test Scaling training data... WARNING: original #nonzeros 4649937 new #nonzeros 4649962 Use -l 0 if many original feature values are zeros Cross validation... Best c=32.0, g=0.03125 CV rate=96.7742 Training... Output model: epnormallibsvm.train.model Scaling testing data... WARNING: original #nonzeros 2021971 new #nonzeros 2021983 Use -l 0 if many original feature values are zeros Testing... Accuracy = 97.9228% (660/674) (classification) Output prediction: epnormallibsvm.test.predict
哈哈,貌似漫長的等待總是值得的,這次得到的Accuracy最高! 是不是可以想到,做事情不要浮躁,不要急于求成,靜下心來研究,踏實走好每一步,結果總會好的~~
第四個實驗(desktop,和第二個類似,隻是train集和test集的比例換成約6:4): 首先對2224個總樣本進行抽樣: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\tools>python subset.py epnorm allibsvm.scale 1330 epnormallibsvm4.train epnormallibsvm4.test 對train集進行訓練: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-train.exe epnorma llibsvm4.train epnormallibsvm4.train.model * optimization finished, #iter = 715 nu = 0.823675 obj = -1035.060451, rho = -5.268397 nSV = 1105, nBSV = 1085 Total nSV = 1105 對test集進行測試: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-predict.exe epnor mallibsvm4.test epnormallibsvm4.train.model epnormalresult4.txt Accuracy = 60.7383% (543/894) (classification) 僅僅通過實驗二和實驗四是否可以得出,僅僅訓練不調優參數,實驗結果差不多就在61%左右了??
那麼既然實驗一中的Accuracy那麼高,不妨用那個訓練好的model對實驗二和實驗四中的test集進行預測: 首先看一下對實驗二的測試結果: 實驗二的test集在laptop上(苦逼的是,有線無線網絡不在一個區域網路上,交換機雖然就在我這,但多插一根網線就會不工作,,,來回傳檔案要麼用qq,要麼用U盤代步,,登上qq機器會更卡,,一把辛酸淚,苦不堪言啊,,,),扯的太遠了,先看看對實驗四的test集的結果吧: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-predict.exe epnor mallibsvm4.test epnormallibsvm.train.model epnormalresult41.txt Accuracy = 96.868% (866/894) (classification) 額,貌似也挺高的,忽然想起來,這個模型是在約8比2的train集和test集(雖然分成了train集和test集,但已用了全部的資料樣本得出來的model)上進行交叉驗證的,仍然存在過拟合的問題,那麼,接下來就在約占8的train集上進行再分train81集和test82集,僅僅對約占8的train集進行easy.py自動化參數調優,将約占2的test21集完全隔離開來,然後用這個新的model8對全新的test21集進行預測。
還有個問題,就是上面已經提到過的,使用easy.py進行參數調優實在是太慢了,還是手動調優參數吧。 手動調參,就選約8:2的train集和test集吧: 使用參數( -g 0.03125 -c 32)進行訓練: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-train.exe -g 0.03 125 -c 32 epnormallibsvm1.train epnormallibsvm11.model ...*.* optimization finished, #iter = 4975 nu = 0.063868 obj = -1964.716169, rho = -0.959370 nSV = 545, nBSV = 25 Total nSV = 545
手動寫參數很快,就幾秒鐘就運作完了。 使用訓練好的模型,對全新的test集進行預測: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-predict.exe epnor mallibsvm1.test epnormallibsvm11.model epnormalresult11.txt Accuracy = 97.7974% (444/454) (classification)
哇哦,準确率很高。
暫時到這裡,要去開會了(Wearable2015)。10:00
回來繼續實驗(10:55)。
第五個實驗(desktop,和第二、四個類似,隻是train集和test集的比例換成5:5): 按5:5抽樣: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\tools>python subset.py epnorm allibsvm.scale 1112 epnormallibsvm5.train epnormallibsvm5.test 仍然使用參數(-g 0.03125 -c 32)對train5集進行訓練: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-train.exe -g 0.03 125 -c 32 epnormallibsvm5.train epnormal5.model ..*.* optimization finished, #iter = 3396 nu = 0.070966 obj = -1365.881889, rho = -0.961911 nSV = 429, nBSV = 15 Total nSV = 429 使用訓練好的epnormal5.model對test5集進行預測: D:\Program Files\MATLAB\R2013a\toolbox\libsvm-3.20\windows>svm-predict.exe epnor mallibsvm5.test epnormal5.model epnormalresult5.txt Accuracy = 96.4029% (1072/1112) (classification) 準确率依然不錯的樣子,但還是有上升的空間,通過這組資料看來,1000個以上的資料會有幾十個會預測錯,error number(誤差數)會随着資料量的增大而增大。
有個感慨,就是如同《機器學習那些事兒》中所說的,絕大部分的時間可能都會用在特征工程(Future Engineering,個人認為不錯的一個方向,too)上,特征工程可能會花費幾天甚至幾周,但訓練和預測也就幾個小時搞定。。