查看相關答案和源代碼,歡迎訪問我的Github:PY131/Machine-Learning_ZhouZhihua.
6.3 SVM對比實驗
本題實驗基於python,各種算法的實現基於的開源工具包和源碼對應如下:
- SVM -> sklearn
- BP -> pybrain
- C4.5 -> 來自GitHub/ryanmadden/decision-tree
這裏我們選擇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。
得出測試集分類精確度如下:
accuracy of C4.5 tree: 0.909
模型對比
資源消耗:BP神經網絡訓練消耗計算機資源最大,SVM也比較耗資源,C4.5決策樹消耗資源最小,訓練速度極快。
參數調節:BP網絡的精度受模型結構和參數的設定影響較大,需要耐心的調參。不同核函數下的SVM精度與數據對象特性息息相關,實踐中也是結合參數(如懲罰係數)要不斷調試的,決策樹-C4.5算法則相對固定一些。
模型精度:只要模型與參數設置得當,經過足夠的訓練甚至交叉驗證等,三種模型均可表現出不錯的精度。
參考
下面列出本實驗涉及到的一些重要的參考資料:
- Pybrain官網樣例 - Classification with Feed-Forward Neural Networks;
- ryanmadden/decision-tree:來自於GitHub的C4.5算法決策樹分類器源碼;