1. 作为对比基线的 SVM
工业界的 SVM,以及 Logistic Regression,因其相较深度神经网络更为轻量级,且性能也不会差别很大的缘故,一直是模型选择的首选。而在学术界,深度学习方兴未艾的今天,SVM 只能作为一个基准模型使用,作为其他模型的陪衬。
我们就以一个手写字符识别(mnist)的例子说明,如何使用 SVM :
import pickle, gzip
from sklearn import svm
def load_data():
with gzip.open('./mnist.pkl.gz') as fp:
training_data, valid_data, test_data = pickle.load(fp)
return training_data, valid_data, test_data
def svm_baseline():
training_data, valid_data, test_data = load_data()
clf = svm.SVC()
clf.fit(training_data[0], training_data[1])
predications = clf.predict(test_data[0])
num_correct = sum(np.where(predications == test_data[1], 1, 0))
print 'Baseline classifier using svm.'
print '%s of %s correct' % (num_correct, len(test_data[0]))
if __name__ == '__main__':
svm_baseline()
2. sklearn 下 SVM 的参数
http://sofasofa.io/forum_main_post.php?postid=1001951
-
class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto’)
gamma 与 kernel 的 rbf(径向基函数)相对应,径向基函数:
K ( x − x ′ ) = exp ( − ∥ x − x ′ ∥ 2 2 σ 2 ) K(\mathbf x-\mathbf x')=\exp\left(-\frac{\|\mathbf x-\mathbf x'\|^2}{2\sigma^2}\right) K(x−x′)=exp(−2σ2∥x−x′∥2)
而构造函数参数中的
gamma
其实就是:gamma = 1 2 σ 2 \text{gamma}=\frac{1}{2\sigma^2} gamma=2σ21
也即:
K ( x − x ′ ) = exp ( − γ ∥ x − x ′ ∥ 2 ) K(\mathbf x-\mathbf x')=\exp\left(-\gamma{\|\mathbf x-\mathbf x'\|^2}\right) K(x−x′)=exp(−γ∥x−x′∥2)