templateSVM
サポート ベクター マシン テンプレート
説明
は、1 つ以上の名前と値の引数で指定された追加オプションを使用してテンプレートを返します。t
= templateSVM(Name,Value
)
たとえば、ボックス制約、カーネル関数または予測子を標準化するかを指定します。
名前と値の引数 Type
を使用してモデルのタイプを指定する場合、コマンド ウィンドウに t
を表示すると、すべてのオプションは、名前と値の引数を使用して指定する場合を除き、空 ([]
) として示されます。モデルのタイプを指定しない場合、この表示では、空のオプションは非表示になります。学習中、空のオプションに既定値が使用されます。
例
既定の SVM テンプレートの作成
ECOC マルチクラス学習の SVM テンプレートの作成
fitcecoc
で使用する既定以外の SVM テンプレートを作成します。
フィッシャーのアヤメのデータ セットを読み込みます。
load fisheriris
SVM 分類器のテンプレートを作成して、ガウス カーネル関数の使用を指定します。
t = templateSVM("KernelFunction","gaussian","Type","classification")
t = Fit template for classification SVM. Alpha: [0x1 double] BoxConstraint: [] CacheSize: [] CachingMethod: '' ClipAlphas: [] DeltaGradientTolerance: [] Epsilon: [] GapTolerance: [] KKTTolerance: [] IterationLimit: [] KernelFunction: 'gaussian' KernelScale: [] KernelOffset: [] KernelPolynomialOrder: [] NumPrint: [] Nu: [] OutlierFraction: [] RemoveDuplicates: [] ShrinkagePeriod: [] Solver: '' StandardizeData: [] SaveSupportVectors: [] VerbosityLevel: [] Version: 2 Method: 'SVM' Type: 'classification'
KernelFunction
、Method
および Type
を除き、テンプレート オブジェクトのすべてのプロパティは空です。学習の際、空のプロパティはそれぞれの既定値で入力されます。
t
を ECOC マルチクラス モデルの学習器として指定します。
Mdl = fitcecoc(meas,species,"Learners",t);
Mdl
は ClassificationECOC
マルチクラス分類器です。既定の設定では、Mdl
は、1 対 1 の符号化設計を使用の学習が実行されます。
標本内 (再代入) 誤分類誤差を表示します。
L = resubLoss(Mdl,"LossFun","classiferror")
L = 0.0200
SVM バイナリ学習器のサポート ベクターの保存と破棄
線形 SVM バイナリ学習器が含まれている ECOC モデルに学習をさせるときに、既定では、fitcecoc
はバイナリ学習器の Alpha
、SupportVectorLabels
および SupportVectors
プロパティを空にします。代わりに、サポート ベクターおよび関連する値を保持し、後でモデルから破棄することもできます。
フィッシャーのアヤメのデータ セットを読み込みます。
load fisheriris rng(1); % For reproducibility
データ セット全体を使用して ECOC モデルを学習させます。適切な SVM テンプレートに渡すことにより、サポート ベクターを保存するように指定します。
t = templateSVM('SaveSupportVectors',true); MdlSV = fitcecoc(meas,species,'Learners',t);
MdlSV
は、線形 SVM バイナリ学習器が含まれている学習済みの ClassificationECOC
モデルです。既定では、fitcecoc
は 1 対 1 の符号化設計を実装するので、3 クラス学習の場合は 3 つのバイナリ学習器が必要になります。
ドット表記を使用して (アルファ) の推定値にアクセスします。
alpha = cell(3,1); alpha{1} = MdlSV.BinaryLearners{1}.Alpha; alpha{2} = MdlSV.BinaryLearners{2}.Alpha; alpha{3} = MdlSV.BinaryLearners{3}.Alpha; alpha
alpha=3×1 cell array
{ 3x1 double}
{ 3x1 double}
{23x1 double}
alpha
は、 の推定値が格納されている 3 行 1 列の cell 配列です。
サポート ベクターおよび関連する値を ECOC モデルから破棄します。
Mdl = discardSupportVectors(MdlSV);
Mdl
は MdlSV
に似ていますが、すべての線形 SVM バイナリ学習器の Alpha
、SupportVectorLabels
および SupportVectors
プロパティが空 ([]
) であるという点が異なります。
areAllEmpty = @(x)isempty([x.Alpha x.SupportVectors x.SupportVectorLabels]); cellfun(areAllEmpty,Mdl.BinaryLearners)
ans = 3x1 logical array
1
1
1
2 つの ECOC モデルのサイズを比較します。
vars = whos('Mdl','MdlSV'); 100*(1 - vars(1).bytes/vars(2).bytes)
ans = 4.9037
Mdl
は MdlSV
より約 5% 小さくなっています。
Mdl
を圧縮し Mdl
と MdlSV
をワークスペースからクリアして、メモリ使用量を減らします。
CompactMdl = compact(Mdl); clear Mdl MdlSV;
より効率的な SVM モデルを使用して、学習データのランダムな行についてラベルを予測します。
idx = randsample(size(meas,1),1)
idx = 63
predictedLabel = predict(CompactMdl,meas(idx,:))
predictedLabel = 1x1 cell array
{'versicolor'}
trueLabel = species(idx)
trueLabel = 1x1 cell array
{'versicolor'}
入力引数
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'BoxConstraint',0.1,'KernelFunction','gaussian','Standardize',1
はガウス (RBF) カーネルの使用と予測の標準化に 0.1
のボックス制約を指定します。
BoxConstraint
— ボックス制約
1 (既定値) | 正のスカラー
ボックス制約。'BoxConstraint'
と正のスカラーで構成されるコンマ区切りペアとして指定します。
1 クラス学習の場合、ボックス制約は必ず 1
に設定されます。
BoxConstraint
、Cost
、Prior
、Standardize
および Weights
の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。
例: 'BoxConstraint',100
データ型: double
| single
CacheSize
— キャッシュ サイズ
1000
(既定値) | 'maximal'
| 正のスカラー
キャッシュ サイズ。'CacheSize'
と'maximal'
または正のスカラーで構成されるコンマ区切りのペアとして指定します。
CacheSize
が 'maximal'
の場合、n 行 n 列 のグラム行列を保持できる十分なメモリが確保されます。
CacheSize
が正のスカラーの場合、モデルの学習用に CacheSize
メガバイトのメモリが確保されます。
例: 'CacheSize','maximal'
データ型: double
| single
| char
| string
ClipAlphas
— アルファ係数をクリップするためのフラグ
true
(既定値) | false
アルファ係数をクリップするためのフラグ。'ClipAlphas'
と true
または false
のいずれかから構成されるコンマ区切りのペアとして指定します。
観測値 j のアルファ係数が αj、観測値 j のボックス制約が Cj であるとします (j = 1,...,n)。n は学習標本のサイズです。
値 | 説明 |
---|---|
true | 各反復で αj が 0 または Cj に近い場合、MATLAB® で αj がそれぞれ 0 または Cj に設定されます。 |
false | 最適化時に MATLAB でアルファ係数は変更されません。 |
MATLAB では、学習済みの SVM モデル オブジェクトの Alpha
プロパティに最終的な α の値が格納されます。
ClipAlphas
は、SMO と ISDA の収束に影響を与える可能性があります。
例: 'ClipAlphas',false
データ型: logical
DeltaGradientTolerance
— 勾配差分の許容誤差
非負のスカラー
SMO (逐次最小最適化) または ISDA (反復単一データ アルゴリズム) により取得された上位の違反値と下位の違反値の間に存在する、勾配差分の許容誤差。'DeltaGradientTolerance'
と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
DeltaGradientTolerance
が 0
の場合、最適化収束を確認するために、勾配差分の許容誤差を使用しません。
既定値は、以下のとおりです。
ソルバーが SMO の場合 (たとえば、
'Solver','SMO'
を設定した場合など) は1e-3
ソルバーが ISDA の場合 (たとえば、
'Solver','ISDA'
を設定した場合など) は0
例: 'DeltaGradientTolerance',1e-2
データ型: double
| single
GapTolerance
— 実行可能性ギャップの許容誤差
0
(既定値) | 非負のスカラー
SMO または ISDA により取得された実行可能性ギャップの許容誤差。'GapTolerance'
と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
GapTolerance
が 0
の場合、最適化収束の確認には、実行可能性ギャップの許容誤差を使用しません。
例: 'GapTolerance',1e-2
データ型: double
| single
IterationLimit
— 数値最適化反復の最大回数
1e6
(既定値) | 正の整数
数値最適化反復の最大回数。'IterationLimit'
と正の整数値で構成されるコンマ区切りのペアとして指定します。
最適化ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo
に収束情報が格納されます。
例: 'IterationLimit',1e8
データ型: double
| single
KernelFunction
— カーネル関数
'linear'
| 'gaussian'
| 'rbf'
| 'polynomial'
| 関数名
グラム行列の要素の計算に使用するカーネル関数。'KernelFunction'
とカーネル関数名から構成されるコンマ区切りのペアとして指定します。G(xj,xk) がグラム行列の要素 (j,k) であるとします。ここで、xj および xk は X
内の観測値 j および k を表す p 次元ベクトルです。サポートされるカーネル関数の名前および関数形式を次の表で説明します。
カーネル関数名 | 説明 | 式 |
---|---|---|
'gaussian' または 'rbf' | ガウスまたは放射基底関数 (RBF) カーネル (1 クラス学習の場合の既定値) |
|
'linear' | 線形カーネル (2 クラス学習の場合の既定値) |
|
'polynomial' | 多項式カーネル。'PolynomialOrder', を使用して多項式カーネルの順序 (q ) を指定します。 |
|
独自のカーネル関数を設定することもできます。たとえば、'KernelFunction','kernel'
を使用すると kernel
が設定されます。値 kernel
は次の形式でなければなりません。
function G = kernel(U,V)
U
は、m 行 p 列の行列です。列は予測子変数に、行は観測値に対応します。V
は、n 行 p 列の行列です。列は予測子変数に、行は観測値に対応します。G
は、U
とV
の行による m 行 n 列のグラム行列です。
kernel.m
は、MATLAB パス上になければなりません。
カーネル関数には一般的な名前を使用しないようにしてください。たとえば、シグモイド カーネル関数には 'sigmoid'
ではなく 'mysigmoid'
などの名前を使用します。
例: 'KernelFunction','gaussian'
データ型: char
| string
KernelOffset
— カーネル オフセット パラメーター
非負のスカラー
カーネル オフセット パラメーター。'KernelOffset'
と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
KernelOffset
がグラム行列の各要素に追加されます。
既定値は以下のとおりです。
ソルバーが SMO の場合 (つまり、
'Solver','SMO'
を設定した場合) は0
ソルバーが ISDA の場合 (つまり、
'Solver','ISDA'
を設定した場合) は0.1
例: 'KernelOffset',0
データ型: double
| single
KernelScale
— カーネル スケール パラメーター
1
(既定値) | 'auto'
| 正のスカラー
カーネル スケール パラメーター。'KernelScale'
と、'auto'
または正のスカラーで構成される、コンマ区切りのペアとして指定します。予測子行列 X
のすべての要素が KernelScale
の値で除算されます。その後、適切なカーネル ノルムが適用され、グラム行列が計算されます。
'auto'
を指定した場合、ヒューリスティック手法を使用して適切なスケール係数が選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前にrng
を使用して乱数シードを設定します。'KernelFunction','kernel'
のようにKernelScale
と独自のカーネル関数を指定すると、エラーが発生します。kernel
の内部でスケーリングを適用しなければなりません。
例: 'KernelScale','auto'
データ型: double
| single
| char
| string
KKTTolerance
— カルーシュ・キューン・タッカー相補性条件の違反許容誤差
非負のスカラー
KKT (カルーシュ・キューン・タッカー) 相補性条件の違反許容誤差。'KKTTolerance'
と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
KKTTolerance
が 0
の場合、最適化収束の確認に実行可能性の KKT 相補性条件の違反許容誤差は使用されません。
既定値は、以下のとおりです。
ソルバーが SMO の場合 (たとえば、
'Solver','SMO'
を設定した場合など) は0
ソルバーが ISDA の場合 (たとえば、
'Solver','ISDA'
を設定した場合など) は1e-3
例: 'KKTTolerance',1e-2
データ型: double
| single
NumPrint
— 最適化診断メッセージ出力の反復回数
1000
(既定値) | 非負の整数
最適化診断メッセージ出力の反復回数。'NumPrint'
と非負の整数で構成されるコンマ区切りのペアとして指定します。
'Verbose',1
と 'NumPrint',numprint
を指定すると、numprint
回反復するたびに SMO と ISDA からのすべての最適化診断メッセージがコマンド ウィンドウに表示されます。
例: 'NumPrint',500
データ型: double
| single
OutlierFraction
— 学習データで想定される外れ値の比率
0
(既定値) | 区間 [0,1) の数値スカラー
学習データで想定される外れ値の比率。'OutlierFraction'
と区間 [0,1) の数値スカラーから構成されるコンマ区切りのペアとして指定します。
'OutlierFraction',outlierfraction
を設定するとします。outlierfraction
は 0 より大きい値です。
2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100*
outlierfraction
% が削除されます。削除された観測値は、勾配の大きいものに対応します。1 クラス学習では、学習セットに負のスコアをもつ観測
outlierfraction
など、適切なバイアス項が検出されます。
例: 'OutlierFraction',0.01
データ型: double
| single
PolynomialOrder
— 多項式カーネル関数の次数
3
(既定値) | 正の整数
多項式カーネル関数の次数。'PolynomialOrder'
と正の整数から成るコンマ区切りのペアとして指定されます。
KernelFunction
が 'polynomial'
ではない場合に 'PolynomialOrder'
を設定すると、エラーがスローされます。
例: 'PolynomialOrder',2
データ型: double
| single
SaveSupportVectors
— サポート ベクター、そのラベル、および推定した α の係数の格納
true
| false
結果のモデルのプロパティとしてサポート ベクター、そのラベル、および推定した α の係数を格納するかどうか。'SaveSupportVectors'
と true
または false
をコンマ区切りのペアとして指定します。
SaveSupportVectors
が true
の場合、結果のモデルの SupportVectors
プロパティにはサポート ベクター、SupportVectorLabels
プロパティにはそのラベル、コンパクトな SVM 学習器の Alpha
プロパティには推定した α の係数が格納されます。
SaveSupportVectors
が false
で KernelFunction
が 'linear'
の場合、結果のモデルではサポート ベクターと関連推定値が格納されません。
コンパクトな SVM モデルのメモリ消費量を減らすには、SaveSupportVectors
を指定します。
ECOC モデルに線形 SVM バイナリ学習器を使用した場合、既定値は false
です。それ以外の場合、既定値は true
です。
例: 'SaveSupportVectors',true
データ型: logical
ShrinkagePeriod
— アクティブ セットの縮小間の反復数
0
(既定値) | 非負の整数
アクティブ セットの縮小間の反復回数。'ShrinkagePeriod'
と非負の整数から構成されるコンマ区切りのペアとして指定します。
'ShrinkagePeriod',0
を設定すると、アクティブ セットは縮小されません。
例: 'ShrinkagePeriod',1000
データ型: double
| single
Solver
— 最適化ルーチン
'ISDA'
| 'L1QP'
| 'SMO'
最適化ルーチン。'Solver'
と次の表の値から構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
'ISDA' | 反復単一データ アルゴリズム ([4]参照) |
'L1QP' | quadprog (Optimization Toolbox) を使用して二次計画法による L1 ソフト マージン最小化を実装します。このオプションには Optimization Toolbox™ ライセンスが必要です。詳細は、二次計画法の定義 (Optimization Toolbox)を参照してください。 |
'SMO' | 逐次最小最適化 ([2]参照) |
既定値は、2 クラス学習で 'OutlierFraction'
を正の値に設定した場合は 'ISDA'
で、それ以外の場合は 'SMO'
です。
例: 'Solver','ISDA'
Standardize
— 予測子データを標準化するためのフラグ
false
(既定値) | true
予測子データを標準化するためのフラグ。'Standardize'
と true
(1
) または false
(0)
から構成されるコンマ区切りのペアとして指定します。
'Standardize',true
を設定した場合、次のようになります。
列の加重平均と標準偏差によって予測子データ (
X
) の各列がそれぞれセンタリングおよびスケーリングされます (重みを付けた標準化の詳細についてはアルゴリズムを参照してください)。MATLAB では、カテゴリカル予測子用に生成されたダミー変数の列に含まれているデータは標準化されません。分類器の学習には標準化された予測子行列が使用されますが、分類器の
X
プロパティには標準化されていないデータが格納されます。
例: 'Standardize',true
データ型: logical
Type
— SVM モデルのタイプ
"classification"
| "regression"
R2023b 以降
SVM モデルのタイプ。"classification"
または "regression"
として指定します。
値 | 説明 |
---|---|
"classification" | 分類 SVM 学習器テンプレートを作成します。Type を "classification" と指定しない場合、近似関数 fitcecoc 、testckfold 、および fitsemiself に t を渡すと、この値が設定されます。 |
"regression" | 回帰 SVM 学習器テンプレートを作成します。Type を "regression" と指定しない場合、近似関数 directforecaster に t を渡すと、この値が設定されます。 |
例: "Type","classification"
データ型: char
| string
RemoveDuplicates
— 重複する観測値を単一の観測値に置き換えるためのフラグ
false
(既定値) | true
Verbose
— 詳細レベル
0
(既定値) | 1
| 2
詳細レベル。'Verbose'
と 0
、1
または 2
から構成されるコンマ区切りのペアとして指定します。Verbose
の値は、コマンド ウィンドウに表示され構造体として Mdl.ConvergenceInfo.History
に保存される最適化情報の量を制御します。
次の表は、使用できる詳細レベル オプションの一覧です。
値 | 説明 |
---|---|
0 | 収束情報の表示や保存は行われません。 |
1 | 診断メッセージが表示され、numprint 回の反復ごとに収束基準が保存されます。ここで、numprint は名前と値のペアの引数 'NumPrint' の値です。 |
2 | 診断メッセージが表示され、1 回の反復ごとに収束基準が保存されます。 |
例: 'Verbose',1
データ型: double
| single
R2023b 以降
Epsilon
— イプシロン不感応区間の幅の半分
iqr(Y)/13.49
(既定値) | 非負のスカラー値
イプシロン不感応区間の幅の半分。非負のスカラー値を指定します。
Epsilon
の既定値は、iqr(Y)/13.49
です。これは、応答変数 Y
の四分位数間範囲を使用した標準偏差の 1/10 の推定値です。iqr(Y)
がゼロに等しい場合、Epsilon
の既定値は 0.1 になります。
例: "Epsilon",0.3
データ型: single
| double
出力引数
t
— SVM 学習器テンプレート
テンプレート オブジェクト
分類モデルまたは回帰モデルの学習に適した SVM 学習器テンプレート。テンプレート オブジェクトとして返されます。学習中、空のオプションに既定値が使用されます。
ヒント
既定では、効率を向上させるため、fitcecoc
はすべての線形 SVM バイナリ学習器の Alpha
、SupportVectorLabels
および SupportVectors
プロパティを空にします。fitcecoc
は、Alpha
ではなく Beta
をモデル表示で出力します。
Alpha
、SupportVectorLabels
および SupportVectors
を保存するには、サポート ベクターを fitcecoc
に保存するよう指定する線形 SVM テンプレートを渡します。たとえば、次のように入力します。
t = templateSVM('SaveSupportVectors',true) Mdl = fitcecoc(X,Y,'Learners',t);
サポート ベクターおよび関連する値は、生成された ClassificationECOC
モデルを discardSupportVectors
に渡すことにより削除できます。
参照
[1] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.
[2] Fan, R.-E., P.-H. Chen, and C.-J. Lin. “Working set selection using second order information for training support vector machines.” Journal of Machine Learning Research, Vol 6, 2005, pp. 1889–1918.
[3] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.
[4] Kecman V., T. -M. Huang, and M. Vogt. “Iterative Single Data Algorithm for Training Kernel Machines from Huge Data Sets: Theory and Performance.” In Support Vector Machines: Theory and Applications. Edited by Lipo Wang, 255–274. Berlin: Springer-Verlag, 2005.
[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. “Estimating the Support of a High-Dimensional Distribution.” Neural Comput., Vol. 13, Number 7, 2001, pp. 1443–1471.
[6] Scholkopf, B., and A. Smola. Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond, Adaptive Computation and Machine Learning. Cambridge, MA: The MIT Press, 2002.
バージョン履歴
R2014b で導入R2023b: 回帰学習器テンプレートのサポート
SVM で回帰学習器テンプレートの作成がサポートされます。関数を呼び出すときに名前と値の引数 Type
を "regression" として指定します。回帰学習器テンプレートを作成する場合、名前と値の引数 Epsilon
を追加で指定できます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)