サポートベクタマシン(SVM, Support Vector Machines)

v3.0.0

Link API Reference .ドキュメントが現状と不一致の部分多数(2015/10/25時点)。

OpenCV v3.0.0では、SVMライブラリ(OSS) LIBSVMが ベースになっている(旧バージョン2.6を利用)。

(参考)LIBSVM本家サイトhttps://www.csie.ntu.edu.tw/~cjlin/libsvm/ .

In [1]:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
#Ipythonで表示用の設定
import matplotlib.pyplot as plt
%matplotlib inline

#学習用データの作成(インスタンス数300個、各インスタンスのもつ特徴量2個)
np.random.seed(0)
trainData = np.random.randn(300,2).astype(np.float32)
#各インスタンスのクラス
responses = np.logical_xor(trainData[:, 0] > 0, trainData[:, 1] > 0).astype(np.int)

#SVM学習器の生成
svm = cv2.ml.SVM_create()
#パラメータ設定(ドキュメント未整備? V2.4.11とは設定方法異なる)
svm.setGamma(5.383) #RBFでのγ
svm.setC(2.67)      #コスト
svm.setKernel(cv2.ml.SVM_RBF) #カーネルタイプ
svm.setType(cv2.ml.SVM_C_SVC) 

#学習フェーズ
svm.train(trainData, cv2.ml.ROW_SAMPLE, responses)

#生成したモデル(識別面情報)を保存
svm.save('svm_model.dat')

# 各グリッド点での推定結果をプロットしてみる。
#プロット点の生成
xx, yy = np.meshgrid(np.linspace(-3, 3, 500), np.linspace(-3, 3, 500))
#推定フェーズ
ret, Z =svm.predict(np.c_[xx.ravel(), yy.ravel()].astype(np.float32))

Z = Z.reshape(xx.shape)
plt.imshow(Z, interpolation='nearest',
           extent=(xx.min(), xx.max(), yy.min(), yy.max()), aspect='auto',
           origin='lower', cmap=plt.cm.PuOr_r)

contours = plt.contour(xx, yy, Z, levels=[0], linewidths=2, linetypes='--')

plt.scatter(trainData[:, 0], trainData[:, 1], s=30, c=responses, cmap=plt.cm.Paired)
plt.xticks(())
plt.yticks(())
plt.axis([-3, 3, -3, 3])
plt.show()

#おまけ 生成したモデル(識別器)
print "\n------ svm_model.dat-----\n"
f = open("svm_model.dat","r")
for row in f:
    print row 
f.close() 

------ svm_model.dat-----

%YAML:1.0

opencv_ml_svm:

   format: 3

   svmType: C_SVC

   kernel:

      type: RBF

      gamma: 5.3830000000000000e+000

   C: 2.6699999999999999e+000

   term_criteria: { epsilon:1.1920928955078125e-007, iterations:1000 }

   var_count: 2

   class_count: 2

   class_labels: !!opencv-matrix

      rows: 2

      cols: 1

      dt: i

      data: [ 0, 1 ]

   sv_total: 112

   support_vectors:

      - [ 9.78738010e-001, 2.24089313e+000 ]

      - [ 1.86755800e+000, -9.77277875e-001 ]

      - [ 9.50088441e-001, -1.51357204e-001 ]

      - [ -1.03218853e-001, 4.10598516e-001 ]

      - [ 1.44043565e-001, 1.45427346e+000 ]

      - [ 1.49407911e+000, -2.05158263e-001 ]

      - [ 2.26975465e+000, -1.45436573e+000 ]

      - [ 4.57585156e-002, -1.87183857e-001 ]

      - [ 1.53277922e+000, 1.46935880e+000 ]

      - [ -8.87785733e-001, -1.98079646e+000 ]

      - [ 1.23029065e+000, 1.20237982e+000 ]

      - [ -1.70627022e+000, 1.95077538e+000 ]

      - [ -1.61389780e+000, -2.12740287e-001 ]

      - [ -2.81822290e-002, 4.28331882e-001 ]

      - [ 6.65172189e-002, 3.02471906e-001 ]

      - [ -9.07298386e-001, 5.19453958e-002 ]

      - [ 1.13940072e+000, -1.23482585e+000 ]

      - [ -3.11552525e-001, 5.61653413e-002 ]

      - [ 1.48825216e+000, 1.89588916e+000 ]

      - [ 2.08274975e-001, 9.76639032e-001 ]

      - [ 1.05000203e-002, 1.78587055e+000 ]

      - [ 1.88315070e+000, -1.34775901e+000 ]

      - [ -1.17312336e+000, 1.94362116e+000 ]

      - [ 1.92294204e+000, 1.48051476e+000 ]

      - [ -8.61225665e-001, 1.91006494e+000 ]

      - [ -6.74332678e-001, 3.18305567e-002 ]

      - [ 2.38314486e+000, 9.44479465e-001 ]

      - [ -9.12822247e-001, 1.11701632e+000 ]

      - [ -6.82416037e-002, 1.71334267e+000 ]

      - [ -7.44754851e-001, -8.26438546e-001 ]

      - [ -4.55532491e-001, 1.74791589e-002 ]

      - [ -6.43618405e-001, -2.22340322e+000 ]

      - [ -1.10438335e+000, 5.21650799e-002 ]

      - [ -7.39562988e-001, 1.54301465e+000 ]

      - [ -3.92828174e-002, -1.16809344e+000 ]

      - [ 7.71790564e-001, 8.23504150e-001 ]

      - [ 2.16323590e+000, 1.33652794e+000 ]

      - [ 1.09965956e+000, 6.55263722e-001 ]

      - [ 6.40131533e-001, -1.61695600e+000 ]

      - [ -2.43261252e-002, -7.38030910e-001 ]

      - [ -1.70204137e-002, 3.79151732e-001 ]

      - [ -1.54079700e+000, 6.32619932e-002 ]

      - [ 1.56506538e-001, 2.32181042e-001 ]

      - [ 1.49448454e+000, -2.06998491e+000 ]

      - [ -3.09012979e-001, -1.67600381e+000 ]

      - [ 1.15233159e+000, 1.07961857e+000 ]

      - [ 1.41953170e-001, -3.19328427e-001 ]

      - [ -5.96314013e-001, -5.25672957e-002 ]

      - [ 3.99046332e-001, -2.77259278e+000 ]

      - [ 1.95591235e+000, 3.90093327e-001 ]

      - [ -2.03068447e+000, 2.06449294e+000 ]

      - [ -1.10540658e-001, 1.02017272e+000 ]

      - [ 2.30391669e+000, -1.06001580e+000 ]

      - [ -1.30652690e+000, 1.65813065e+000 ]

      - [ -1.33425844e+000, -1.34671748e+000 ]

      - [ 6.93773150e-001, -1.59573436e-001 ]

      - [ -4.21714522e-002, -2.86887199e-001 ]

      - [ -6.16264008e-002, -1.07305273e-001 ]

      - [ -1.57667011e-001, 2.25672340e+000 ]

      - [ -7.04700291e-001, 9.43260729e-001 ]

      - [ -2.65917230e+000, 6.06319547e-001 ]

      - [ 6.98457122e-001, 3.77088902e-003 ]

      - [ -1.56821124e-002, 1.60928175e-001 ]

      - [ 4.94949818e-002, 4.93836790e-001 ]

      - [ -2.06903681e-001, 8.80178928e-001 ]

      - [ -2.25556421e+000, -1.02250683e+000 ]

      - [ 3.86305526e-002, -1.65671515e+000 ]

      - [ -9.85510767e-001, -1.47183502e+000 ]

      - [ 1.64813495e+000, 1.64227754e-001 ]

      - [ 1.46657872e+000, 8.52551937e-001 ]

      - [ -1.44653475e+000, 8.00297976e-001 ]

      - [ 3.70824993e-001, 1.42061800e-001 ]

      - [ -2.09460306e+000, 1.23721913e-001 ]

      - [ -1.30106956e-001, 9.39532295e-002 ]

      - [ 9.43046093e-001, -2.73967719e+000 ]

      - [ 8.21585715e-001, 5.29264612e-003 ]

      - [ 8.75832736e-001, -1.15107469e-001 ]

      - [ -7.82629132e-001, -1.10389300e-001 ]

      - [ -1.05462849e+000, 8.20247829e-001 ]

      - [ 3.38904113e-001, 2.02104354e+000 ]

      - [ -4.68864202e-001, -2.20144129e+000 ]

      - [ 1.99300200e-001, -5.06035425e-002 ]

      - [ -5.02816677e-001, 2.41245365e+000 ]

      - [ -9.60504353e-001, -7.93117344e-001 ]

      - [ -2.01640654e+000, -5.39454639e-001 ]

      - [ 1.73887265e+000, 9.94394362e-001 ]

      - [ 1.31913686e+000, -8.82418811e-001 ]

      - [ 7.71405935e-001, 1.02943885e+000 ]

      - [ -4.57039624e-002, 2.20507652e-001 ]

      - [ 2.69622397e+000, -7.39246681e-002 ]

      - [ -1.01804185e+000, -7.78547525e-002 ]

      - [ 3.82732421e-001, -3.42422798e-002 ]

      - [ -1.63263452e+000, -1.56776774e+000 ]

      - [ -1.17915797e+000, 1.30142808e+000 ]

      - [ -1.33221161e+000, -1.96862471e+000 ]

      - [ -1.68121827e+000, -8.88971329e-001 ]

      - [ 2.42117956e-001, -8.88720274e-001 ]

      - [ 9.36742485e-001, 1.41232765e+000 ]

      - [ -2.36958694e+000, 8.64052296e-001 ]

      - [ 1.22487056e+000, 6.48561046e-002 ]

      - [ -2.02896833e-001, -1.09882779e-001 ]

      - [ 2.13480055e-001, -1.20857370e+000 ]

      - [ -2.42019832e-001, 1.51826119e+000 ]

      - [ 1.07819736e+000, -2.55918455e+000 ]

      - [ 1.63928568e-001, 9.63213593e-002 ]

      - [ -2.36417389e+000, 2.03341823e-002 ]

      - [ -1.34792542e+000, -7.61573374e-001 ]

      - [ 2.01125669e+000, -4.45954278e-002 ]

      - [ 8.62789899e-003, 5.27004182e-001 ]

      - [ 3.70057225e-002, 7.67902434e-001 ]

      - [ -8.05626512e-001, -1.11831188e+000 ]

      - [ -3.92388999e-001, -3.04614305e+000 ]

   decision_functions:

      -

         sv_count: 112

         rho: 6.8902088263962588e-002

         alpha: [ 9.0733551069733631e-001, 1.6928810789879634e+000,

             2.6699999999999999e+000, 2.7874323654763716e-001,

             2.5159289165869297e-001, 1.5392889977581606e-003,

             8.9846007432761943e-001, 3.5880878533530824e-001,

             2.3341044826097650e+000, 1.0874396668395927e+000,

             2.6699999999999999e+000, 4.1564399547363617e-001,

             7.3616049188639721e-001, 7.2314694936199542e-001,

             4.5390492362465373e-001, 2.6699999999999999e+000,

             4.2820352043358195e-001, 2.6699999999999999e+000,

             2.6699999999999999e+000, 5.0491795344053003e-001,

             4.7492217725827757e-001, 3.2437823703704610e-001,

             8.0284208007217539e-001, 3.9145762300943371e-001,

             2.9463939166613062e-001, 2.0212537264564106e-002,

             2.1229404736790086e-001, 3.2533149995923155e-001,

             2.6699999999999999e+000, 6.4961606971257124e-001,

             2.6699999999999999e+000, 2.4639722227582758e-001,

             4.0123156526547465e-001, 4.8776022648888299e-002,

             6.9974039340986294e-001, 1.2632216099673796e+000,

             4.1328664283325517e-001, 6.2555229235651988e-001,

             2.2205101118769779e+000, 2.6699999999999999e+000,

             2.6699999999999999e+000, 1.5347152959329928e+000,

             2.7395193438398630e-001, 2.6699999999999999e+000,

             1.8322441517963250e-001, 2.6699999999999999e+000,

             2.6699999999999999e+000, 1.5176743116811569e+000,

             9.4707578505835144e-001, 4.4453749475380294e-001,

             1.0720753319571443e+000, 1.2483224974204170e+000,

             2.7522572816165708e-001, 2.6699999999999999e+000,

             2.6699999999999999e+000, -4.1909771676152874e-001,

             -2.4688046597631659e+000, -6.0913115880060160e-002,

             -1.5579552310916494e+000, -5.4169668749960054e-001,

             -2.6699999999999999e+000, -3.8324315690043703e-001,

             -2.6699999999999999e+000, -2.6699999999999999e+000,

             -6.5723349507174311e-001, -3.0636727110574224e-001,

             -3.1313063404959857e-001, -3.6335532386796393e-001,

             -3.8283376338448166e-001, -2.6699999999999999e+000,

             -2.9962143160160487e-001, -2.6699999999999999e+000,

             -2.6699999999999999e+000, -1.4369920875022029e+000,

             -1.6218624419370881e-001, -3.7090789333670615e-001,

             -2.6699999999999999e+000, -2.1224925957008800e+000,

             -8.4667964248269600e-001, -1.7365117360912927e+000,

             -8.5128764036506432e-001, -7.1399538090679249e-001,

             -2.4762680332957854e+000, -4.6768500681891823e-001,

             -2.1198072059680459e-001, -3.5394342672813034e-001,

             -2.6699999999999999e+000, -1.0038516213472419e+000,

             -8.4024281079374330e-001, -5.8979042294109074e-001,

             -2.6699999999999999e+000, -9.6493200461161360e-002,

             -3.4160686002600749e-001, -2.6699999999999999e+000,

             -4.7118211392313009e-001, -1.7597184081066822e-002,

             -3.5221429963404216e-001, -1.6145902165996182e-001,

             -5.5703271417901645e-001, -6.4514070197612361e-001,

             -2.7751727383898406e-001, -1.6344229577743383e+000,

             -4.6156629238481273e-001, -5.1429162274397267e-001,

             -6.3174674722688007e-001, -2.6699999999999999e+000,

             -1.3690502599177139e+000, -2.3586274766298060e-001,

             -1.9133428797194751e+000, -2.3192692435415934e+000,

             -4.1552058734259822e-001, -1.6397107105606332e+000 ]


inserted by FC2 system