templateSVM
サポート ベクター マシン テンプレート
説明
は、1 つ以上の名前と値の引数で指定された追加オプションを使用してテンプレートを返します。t = templateSVM(Name,Value)
たとえば、ボックス制約、カーネル関数または予測子を標準化するかを指定します。
名前と値の引数 Type を使用してモデルのタイプを指定する場合、コマンド ウィンドウに t を表示すると、すべてのオプションは、名前と値の引数を使用して指定する場合を除き、空 ([]) として示されます。モデルのタイプを指定しない場合、この表示では、空のオプションは非表示になります。学習中、空のオプションに既定値が使用されます。
例
fitcecocで使用する既定以外の SVM テンプレートを作成します。
フィッシャーのアヤメのデータ セットを読み込みます。
load fisheririsSVM 分類器のテンプレートを作成して、ガウス カーネル関数の使用を指定します。
t = templateSVM("KernelFunction","gaussian","Type","classification")
t =
Fit template for classification SVM.
Alpha: [0×1 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 バイナリ学習器が含まれている 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;
alphaalpha=3×1 cell array
{ 3×1 double}
{ 3×1 double}
{23×1 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 = 3×1 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 = 1×1 cell array
{'versicolor'}
trueLabel = species(idx)
trueLabel = 1×1 cell array
{'versicolor'}
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'BoxConstraint',0.1,'KernelFunction','gaussian','Standardize',1 はガウス (RBF) カーネルの使用と予測の標準化に 0.1 のボックス制約を指定します。
分類モデルと回帰モデル
ボックス制約。'BoxConstraint' と正のスカラーで構成されるコンマ区切りペアとして指定します。
1 クラス学習の場合、ボックス制約は必ず 1 に設定されます。
BoxConstraint、Cost、Prior、Standardize および Weights の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。
例: 'BoxConstraint',100
データ型: double | single
キャッシュ サイズ。'CacheSize' と'maximal' または正のスカラーで構成されるコンマ区切りのペアとして指定します。
CacheSize が 'maximal' の場合、n 行 n 列 のグラム行列を保持できる十分なメモリが確保されます。
CacheSize が正のスカラーの場合、モデルの学習用に CacheSize メガバイトのメモリが確保されます。
例: 'CacheSize','maximal'
データ型: double | single | char | string
アルファ係数をクリップするためのフラグ。'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
SMO (逐次最小最適化) または ISDA (反復単一データ アルゴリズム) により取得された上位の違反値と下位の違反値の間に存在する、勾配差分の許容誤差。'DeltaGradientTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
DeltaGradientTolerance が 0 の場合、最適化収束を確認するために、勾配差分の許容誤差を使用しません。
既定値は、以下のとおりです。
ソルバーが SMO の場合 (たとえば、
'Solver','SMO'を設定した場合など) は1e-3ソルバーが ISDA の場合 (たとえば、
'Solver','ISDA'を設定した場合など) は0
例: 'DeltaGradientTolerance',1e-2
データ型: double | single
SMO または ISDA により取得された実行可能性ギャップの許容誤差。'GapTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
GapTolerance が 0 の場合、最適化収束の確認には、実行可能性ギャップの許容誤差を使用しません。
例: 'GapTolerance',1e-2
データ型: double | single
数値最適化反復の最大回数。'IterationLimit' と正の整数値で構成されるコンマ区切りのペアとして指定します。
最適化ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo に収束情報が格納されます。
例: 'IterationLimit',1e8
データ型: double | single
グラム行列の要素の計算に使用するカーネル関数。'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 がグラム行列の各要素に追加されます。
既定値は以下のとおりです。
ソルバーが SMO の場合 (つまり、
'Solver','SMO'を設定した場合) は0ソルバーが ISDA の場合 (つまり、
'Solver','ISDA'を設定した場合) は0.1
例: 'KernelOffset',0
データ型: double | single
カーネル スケール パラメーター。'KernelScale' と、'auto' または正のスカラーで構成される、コンマ区切りのペアとして指定します。予測子行列 X のすべての要素が KernelScale の値で除算されます。その後、適切なカーネル ノルムが適用され、グラム行列が計算されます。
'auto'を指定した場合、ヒューリスティック手法を使用して適切なスケール係数が選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前にrngを使用して乱数シードを設定します。'KernelFunction','kernel'のようにKernelScaleと独自のカーネル関数を指定すると、エラーが発生します。kernelの内部でスケーリングを適用しなければなりません。
例: 'KernelScale','auto'
データ型: double | single | char | string
KKT (カルーシュ・キューン・タッカー) 相補性条件の違反許容誤差。'KKTTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。
KKTTolerance が 0 の場合、最適化収束の確認に実行可能性の KKT 相補性条件の違反許容誤差は使用されません。
既定値は、以下のとおりです。
ソルバーが SMO の場合 (たとえば、
'Solver','SMO'を設定した場合など) は0ソルバーが ISDA の場合 (たとえば、
'Solver','ISDA'を設定した場合など) は1e-3
例: 'KKTTolerance',1e-2
データ型: double | single
最適化診断メッセージ出力の反復回数。'NumPrint' と非負の整数で構成されるコンマ区切りのペアとして指定します。
'Verbose',1 と 'NumPrint',numprint を指定すると、numprint 回反復するたびに SMO と ISDA からのすべての最適化診断メッセージがコマンド ウィンドウに表示されます。
例: 'NumPrint',500
データ型: double | single
学習データで想定される外れ値の比率。'OutlierFraction' と区間 [0,1) の数値スカラーから構成されるコンマ区切りのペアとして指定します。
'OutlierFraction',outlierfraction を設定するとします。outlierfraction は 0 より大きい値です。
2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100*
outlierfraction% が削除されます。削除された観測値は、勾配の大きいものに対応します。1 クラス学習では、学習セットに負のスコアをもつ観測
outlierfractionなど、適切なバイアス項が検出されます。
例: 'OutlierFraction',0.01
データ型: double | single
多項式カーネル関数の次数。'PolynomialOrder' と正の整数から成るコンマ区切りのペアとして指定されます。
KernelFunction が 'polynomial' ではない場合に 'PolynomialOrder' を設定すると、エラーがスローされます。
例: 'PolynomialOrder',2
データ型: double | single
結果のモデルのプロパティとしてサポート ベクター、そのラベル、および推定した α の係数を格納するかどうか。'SaveSupportVectors' と true または false をコンマ区切りのペアとして指定します。
SaveSupportVectors が true の場合、結果のモデルの SupportVectors プロパティにはサポート ベクター、SupportVectorLabels プロパティにはそのラベル、コンパクトな SVM 学習器の Alpha プロパティには推定した α の係数が格納されます。
SaveSupportVectors が false で KernelFunction が 'linear' の場合、結果のモデルではサポート ベクターと関連推定値が格納されません。
コンパクトな SVM モデルのメモリ消費量を減らすには、SaveSupportVectors を指定します。
ECOC モデルに線形 SVM バイナリ学習器を使用した場合、既定値は false です。それ以外の場合、既定値は true です。
例: 'SaveSupportVectors',true
データ型: logical
アクティブ セットの縮小間の反復回数。'ShrinkagePeriod' と非負の整数から構成されるコンマ区切りのペアとして指定します。
'ShrinkagePeriod',0 を設定すると、アクティブ セットは縮小されません。
例: 'ShrinkagePeriod',1000
データ型: double | single
最適化ルーチン。'Solver' と次の表の値から構成されるコンマ区切りのペアとして指定します。
| 値 | 説明 |
|---|---|
'ISDA' | 反復単一データ アルゴリズム ([4]参照) |
'L1QP' | quadprog (Optimization Toolbox) を使用して二次計画法による L1 ソフト マージン最小化を実装します。このオプションには Optimization Toolbox™ ライセンスが必要です。詳細は、二次計画法の定義 (Optimization Toolbox)を参照してください。 |
'SMO' | 逐次最小最適化 ([2]参照) |
既定値は、2 クラス学習で 'OutlierFraction' を正の値に設定した場合は 'ISDA' で、それ以外の場合は 'SMO' です。
例: 'Solver','ISDA'
予測子データを標準化するためのフラグ。'Standardize' と true (1) または false (0) から構成されるコンマ区切りのペアとして指定します。
'Standardize',true を設定した場合、次のようになります。
列の加重平均と標準偏差によって予測子データ (
X) の各列がそれぞれセンタリングおよびスケーリングされます (重みを付けた標準化の詳細についてはアルゴリズムを参照してください)。MATLAB では、カテゴリカル予測子用に生成されたダミー変数の列に含まれているデータは標準化されません。分類器の学習には標準化された予測子行列が使用されますが、分類器の
Xプロパティには標準化されていないデータが格納されます。
例: 'Standardize',true
データ型: logical
R2023b 以降
SVM モデルのタイプ。"classification" または "regression" として指定します。
| 値 | 説明 |
|---|---|
"classification" | 分類 SVM 学習器テンプレートを作成します。Type を "classification" と指定しない場合、近似関数 fitcecoc、testckfold、および fitsemiself に t を渡すと、この値が設定されます。 |
"regression" | 回帰 SVM 学習器テンプレートを作成します。Type を "regression" と指定しない場合、近似関数 directforecaster に t を渡すと、この値が設定されます。 |
例: "Type","classification"
データ型: char | string
詳細レベル。'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 です。これは、応答変数 Y の四分位数間範囲を使用した標準偏差の 1/10 の推定値です。iqr(Y) がゼロに等しい場合、Epsilon の既定値は 0.1 になります。
例: "Epsilon",0.3
データ型: single | double
出力引数
分類モデルまたは回帰モデルの学習に適した 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 で導入SVM で回帰学習器テンプレートの作成がサポートされます。関数を呼び出すときに名前と値の引数 Type を "regression" として指定します。回帰学習器テンプレートを作成する場合、名前と値の引数 Epsilon を追加で指定できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)