周志華《機器學習》課後習題解答系列(七):Ch6.3 - SVM對比實驗

查看相關答案和源代碼,歡迎訪問我的Github:PY131/Machine-Learning_ZhouZhihua.

6.3 SVM對比實驗

這裏寫圖片描述

本題實驗基於python,各種算法的實現基於的開源工具包和源碼對應如下:

這裏查看本實驗完整代碼

這裏我們選擇UCI數據集 Breast Cancer Data Set 進行分類實驗,該數據集已經集成在sklearn中,可以直接採用sklearn.datasets.load_breast_cancer獲取。

數據預處理分析

關於該數據集的相關信息參考sklearn官網sklearn.datasets.load_breast_cancer,關鍵信息如下:

類別:'malignant(惡性)' 'benign(良性)',共兩類;
樣本規模:[n_sample,n_feature] = [569, 30],;
         正負樣本數爲 212(M),357(B);
         特徵數值特性:實數,正值;

加載數據,選擇前兩個特徵可視化出散點圖如下所示:

這裏寫圖片描述

上圖中,綠色爲良性(腫瘤),紅色對應惡性,於是可直觀看出,體積越大惡性概率越高。

經過預分析,我認爲該數據集可以直接用於SVM,BPnet,C4.5的模型學習。

模型訓練與測試

首先將數據集隨機劃分爲相等了兩部分,一部分作訓練,一部分作測試。然後採用三種模型來擬合訓練集,並在測試集上進行分類預測。在訓練SVM和BP網絡時,需對數據進行歸一化處理,這裏採用sklearn.preprocessing.normalize實現。

劃分數據集與歸一化程序如下示:

from sklearn import preprocessing
from sklearn.cross_validation import train_test_split

normalized_X = preprocessing.normalize(X)
X_train, X_test, y_train, y_test = train_test_split(normalized_X, y, test_size=0.5, random_state=0)

下面是三種模型的訓練和測試的程序和結果示意:

(1) SVM - 基於sklearn,分別採用線性核和高斯核進行實驗。

clf = svm.SVC(C=C, kernel=kernel) kernel
# train
clf.fit(X_train, y_train)
# testing 
y_pred = clf.predict(X_test)

得出分類精確度如下:

max accuracy of linear kernel SVM: 0.937
max accuracy of rbf kernel SVM: 0.933

(2) BP net - 基於pybrain,採用“標準BP算法+Softmax輸出層激活函數”構建二分類器。

from pybrain.tools.shortcuts     import buildNetwork
from pybrain.structure.modules   import SoftmaxLayer
from pybrain.supervised.trainers import BackpropTrainer

n_hidden = 600
bp_nn = buildNetwork(trndata.indim, n_hidden, trndata.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(bp_nn, 
                          dataset=trndata,
                          verbose=True,
                          momentum=0.2,
                          learningrate=0.0002)
err_train, err_valid = trainer.trainUntilConvergence(maxEpochs=1000)

得出測試集分類精確度如下:

epoch: 1001  test error:  6.69%

(3) C4.5,參考ryanmadden/decision-tree - GitHub

點擊查看C4.5實驗源碼

得出測試集分類精確度如下:

accuracy of C4.5 tree: 0.909

模型對比

  • 資源消耗:BP神經網絡訓練消耗計算機資源最大,SVM也比較耗資源,C4.5決策樹消耗資源最小,訓練速度極快。

  • 參數調節:BP網絡的精度受模型結構和參數的設定影響較大,需要耐心的調參。不同核函數下的SVM精度與數據對象特性息息相關,實踐中也是結合參數(如懲罰係數)要不斷調試的,決策樹-C4.5算法則相對固定一些。

  • 模型精度:只要模型與參數設置得當,經過足夠的訓練甚至交叉驗證等,三種模型均可表現出不錯的精度。

參考

下面列出本實驗涉及到的一些重要的參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章