Main Content

margin

サポート ベクター マシン (SVM) 分類器の分類マージンを計算

説明

m = margin(SVMModel,Tbl,ResponseVarName) は、table Tbl 内の標本データと Tbl.ResponseVarName 内のクラス ラベルを使用して、学習済みサポート ベクター マシン (SVM) 分類器 SVMModel分類マージン (m) を返します。

m は、Y と同じ長さの数値ベクトルとして返されます。m の各エントリの推定は、学習させた SVM 分類器 SVMModelX の対応する行、真のクラス ラベル Y を使用して実行されます。

m = margin(SVMModel,Tbl,Y) は、table Tbl 内の標本データと Y 内のクラス ラベルを使用して、学習済み SVM 分類器 SVMModel の分類マージン (m) を返します。

m = margin(SVMModel,X,Y) は、行列 X 内の予測子データと Y 内のクラス ラベルを使用して、SVMModel の分類マージンを返します。

すべて折りたたむ

ionosphere データ セットを読み込みます。

load ionosphere
rng(1); % For reproducibility

SVM 分類器を学習させます。テスト用に 15% のホールドアウト標本を指定し、データを標準化して、'g' が陽性クラスであることを指定します。

CVSVMModel = fitcsvm(X,Y,'Holdout',0.15,'ClassNames',{'b','g'},...
    'Standardize',true);
CompactSVMModel = CVSVMModel.Trained{1}; ...
    % Extract the trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

CVSVMModelClassificationPartitionedModel 分類器です。この分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationSVM 分類器が格納されています。

テスト標本分類マージンを推定します。

m = margin(CompactSVMModel,XTest,YTest);
m(10:20)
ans = 11×1

    3.5459
    5.5940
    4.9946
    4.5610
   -4.7964
    5.5123
   -2.8773
    1.8671
    9.4992
    9.5024
      ⋮

観測マージンは、観測された真のクラスのスコアから、該当するクラスのすべてのスコアの中で最大の偽のクラスのスコアを差し引いたものです。分類器のマージンは比較的大きいことが推奨されます。

複数のモデルによるテスト標本マージンを比較することにより、特徴選択を実行します。この比較のみに基づくと、マージンが最大である分類器が最良の分類器です。

ionosphere データ セットを読み込みます。

load ionosphere
rng(1); % For reproducibility

データ セットを学習セットとテスト セットに分割します。テスト用の 15% のホールドアウト標本を指定します。

Partition = cvpartition(Y,'Holdout',0.15);
testInds = test(Partition); % Indices for the test set
XTest = X(testInds,:);
YTest = Y(testInds,:);

Partition によりデータ セットの分割が定義されます。

次の 2 つのデータ セットを定義します。

  • fullX。すべての予測子が格納されます (削除された 0 の列を除く)。

  • partX。最後の 20 個の予測子が格納されます。

fullX = X;
partX = X(:,end-20:end);

予測子セットごとに SVM 分類器を学習させます。分割の定義を指定します。

FullCVSVMModel = fitcsvm(fullX,Y,'CVPartition',Partition);
PartCVSVMModel = fitcsvm(partX,Y,'CVPartition',Partition);
FCSVMModel = FullCVSVMModel.Trained{1};
PCSVMModel = PartCVSVMModel.Trained{1};

FullCVSVMModelPartCVSVMModelClassificationPartitionedModel 分類器です。これらの分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationSVM 分類器が格納されています。

分類器ごとにテスト標本マージンを推定します。

fullM = margin(FCSVMModel,XTest,YTest);
partM = margin(PCSVMModel,XTest(:,end-20:end),YTest);
n = size(XTest,1);
p = sum(fullM < partM)/n
p = 0.2500

完全なモデルからのマージンでは、その約 25% が予測子が少ないモデルからのものより小さくなっています。この結果は、すべての予測子によって学習をさせたモデルの方が優れていることを示しています。

入力引数

すべて折りたたむ

SVM 分類モデル。fitcsvm が返す ClassificationSVM モデル オブジェクトまたは compact が返す CompactClassificationSVM モデル オブジェクトを指定します。

モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl に含めることができます。Tbl には、SVMModel を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

SVMModel を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName または Y を指定する必要はありません。

テーブルに格納されている標本データを使用して SVMModel に学習をさせた場合、margin の入力データもテーブルに含まれていなければなりません。

SVMModel に学習をさせるときに fitcsvm'Standardize',true を設定した場合、対応する SVMModel.Mu 内の平均および SVMModel.Sigma 内の標準偏差を使用して、予測子データの列が標準化されます。

データ型: table

予測子データ。数値行列として指定します。

X の各行は 1 件の観測 (インスタンスや例とも呼ばれます) に対応し、各列は 1 個の変数 (特徴とも呼ばれます) に対応します。X の列内の変数は、分類器 SVMModel に学習させた変数と同じでなければなりません。

Y の長さと X の行数は等しくなければなりません。

fitcsvm'Standardize',true を設定して SVMModel に学習をさせた場合、対応する SVMModel.Mu 内の平均および SVMModel.Sigma 内の標準偏差を使用して、X の列が標準化されます。

データ型: double | single

応答変数の名前。Tbl 内の変数の名前で指定します。SVMModel を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName を指定する必要はありません。

ResponseVarName を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Response として格納されている場合、ResponseVarName として 'Response' を指定します。それ以外の場合、Tbl の列は Tbl.Response を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

データ型: char | string

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y のデータ型は SVMModel.ClassNames と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

Y の長さは Tbl または X の行数と等しくなければなりません。

詳細

すべて折りたたむ

分類エッジ

"エッジ" は、"分類マージン" の加重平均値です。

重みはクラスの事前確率です。重みを渡すと、この重みは正規化され、各クラス内の事前確率の合計になります。この再正規化された重みを使用して、加重平均が計算されます。

特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。

分類マージン

バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。

このソフトウェアでは、バイナリ分類の分類マージンは次のように定義されます。

m=2yf(x).

x は観測値です。x の真のラベルが陽性クラスである場合、y は 1、それ以外の場合は –1 です。f(x) は観測値 x についての陽性クラスの分類スコアです。一般的には、分類マージンは m = yf(x) と定義されています。

各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。

分類スコア

観測値 x を分類するための SVM の "分類スコア" は、x から判定境界 (範囲は -∞ ~ +∞) までの符号付き距離です。クラスの正のスコアは、x がそのクラスにあると予測されることを示します。負のスコアはそうではないことを示します。

陽性クラス分類スコア f(x) は、学習済み SVM 分類関数です。f(x) は x に対する数値的な予測応答でもあり、x を陽性クラスとして予測するスコアでもあります。

f(x)=j=1nαjyjG(xj,x)+b,

ここで、(α1,...,αn,b) は推定された SVM パラメーター、G(xj,x) は予測子空間における x とサポート ベクターの間のドット積です。合計には学習セットの観測値が含まれます。x に対する負のクラス分類スコア、つまり x を陰性クラスとして予測するスコアは、–f(x) です。

G(xj,x) = xj′x (線形カーネル) の場合、スコア関数は次のように縮小されます。

f(x)=(x/s)β+b.

s はカーネル スケール、β は近似線形係数のベクトルです。

詳細は、サポート ベクター マシンについてを参照してください。

アルゴリズム

バイナリ分類の場合、観測値 j のマージン mj は次のように定義されます。

mj=2yjf(xj),

ここで、yj ∊ {-1,1} であり、f(xj) は陽性クラスにおける観測値 j の予測スコアです。ただし一般的には、マージンの定義として mj = yjf(xj) が使用されます。

参照

[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.

拡張機能

バージョン履歴

R2014a で導入