- 簽證留學(xué) |
- 筆譯 |
- 口譯
- 求職 |
- 日/韓語 |
- 德語
下一個函數(shù)testDigits()并不是全新的函數(shù),它和testRbf()的代碼幾乎一樣,唯一的大區(qū)別就是它調(diào)用了loadImages()函數(shù)來獲得類別標(biāo)簽和數(shù)據(jù)。另一個細(xì)小的不同是現(xiàn)在這里的函數(shù)元組kTup是輸入?yún)?shù),而在testRbf()中默認(rèn)的就是使用rbf核函數(shù)。如果對于函數(shù)testDigits()不增加任何輸入?yún)?shù)的話,那么kTup的默認(rèn)值就是('rbf', 10)。
輸入程序清單1中的代碼之后,將之保存為svmMLiA.py并輸入如下命令:
我嘗試了不同的σ值,并嘗試了線性核函數(shù),總結(jié)得到的結(jié)果如表1所示。
表1 不同σ值的手寫數(shù)字識別性能
表1給出的結(jié)果表明,當(dāng)徑向基核函數(shù)中的參數(shù)σ取10左右時(shí),就可以得到最小的測試錯誤率。該參數(shù)值比前面例子中的取值大得多,而前面的測試錯誤率在1.3左右。為什么差距如此之大?原因就在于數(shù)據(jù)的不同。在手寫識別的數(shù)據(jù)中,有1024個特征,而這些特征的值有可能高達(dá)1.0。而所有數(shù)據(jù)從-1到1變化,但是只有2個特征。如何才能知道該怎么設(shè)置呢?說老實(shí)話,在寫這個例子時(shí)我也不知道。我只是對不同的設(shè)置進(jìn)行了多次嘗試。C的設(shè)置也會影響到分類的結(jié)果。當(dāng)然,存在另外的SVM形式,它們把C同時(shí)考慮到了優(yōu)化過程中,例如v-SVM。有關(guān)v-SVM的一個較好的討論可以參考Sergios Theodoridis和Konstantinos Koutroumbas撰寫的Pattern Recognition。
你可能注意到了一個有趣的現(xiàn)象,即最小的訓(xùn)練錯誤率并不對應(yīng)于最小的支持向量數(shù)目。另一個值得注意的就是,線性核函數(shù)的效果并不是特別的糟糕??梢砸誀奚€性核函數(shù)的錯誤率來換取分類速度的提高。盡管這一點(diǎn)在實(shí)際中是可以接受的,但是還得取決于具體的應(yīng)用。
責(zé)任編輯:admin