Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

edge

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

説明

e = edge(SVMModel,TBL,ResponseVarName) は、テーブル TBL に含まれている予測子データと TBL.ResponseVarName に含まれているクラス ラベルを使用して、サポート ベクター マシン (SVM) 分類器 SVMModel分類エッジ (e) を返します。

分類エッジ (e) は、分類マージンの加重平均を表すスカラー値です。

e = edge(SVMModel,TBL,Y) は、テーブル TBL に含まれている予測子データと Y に含まれているクラス ラベルを使用して、SVM 分類器 SVMModel分類エッジ (e) を返します。

e = edge(SVMModel,X,Y) は、行列 X に含まれている予測子データと Y に含まれているクラス ラベルを使用して、SVMModel の分類エッジを返します。

e = edge(___,'Weights',weights) は、前の構文の入力引数のいずれかを使用して、weights で指定された観測値の重みについて分類エッジを計算します。

すべて折りたたむ

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 trained, compact classifier
testInds = test(CVSVMModel.Partition);   % Extract the test indices
XTest = X(testInds,:);
YTest = Y(testInds,:);

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

検定標本エッジを推定します。

e = edge(CompactSVMModel,XTest,YTest)
e = 5.0765

検定標本のマージンの平均はおよそ 5 です。

データセット内の観測値は順番に測定されており、技術の向上によって最新の 150 件の観測値の品質が高くなっているとします。品質が高い観測値に他の観測値より大きい重みを設定することにより、この改善を反映させます。

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

load ionosphere
rng(1); % For reproducibility

品質が高い観測値には、他の観測値の 2 倍の重みを設定する重みベクトルを定義します。

n = size(X,1);
weights = [ones(n-150,1);2*ones(150,1)];

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

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

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

加重スキームを使用して、テスト標本の加重エッジを推定します。

e = edge(CompactSVMModel,XTest,YTest,'Weights',wTest)
e = 4.8341

検定標本の加重平均マージンはおよそ 5 です。

複数のモデルによる検定標本エッジを比較することにより、特徴選択を実行します。この比較のみに基づくと、エッジが最大である分類器が最良の分類器となります。

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 分類器が格納されています。

分類器ごとに検定標本エッジを推定します。

fullEdge = edge(FCSVMModel,XTest,YTest)
fullEdge = 2.8321
partEdge = edge(PCSVMModel,XTest(:,end-20:end),YTest)
partEdge = 1.5541

データセット全体に対して学習をさせた分類器の方がエッジが大きくなっています。これは、すべての予測子を使用して学習をさせた分類器の方が優れていることを示します。

入力引数

すべて折りたたむ

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

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

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

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

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 の行数と等しくなければなりません。

観測値の重み。数値ベクトルまたは TBL 内の変数の名前を指定します。

数値ベクトルで weights を指定する場合、weights のサイズは X または TBL の行数と等しくなければなりません。

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

重みを指定すると、edge は重み付きの分類エッジを計算します。X または TBL の各行に含まれている観測値には、weights の対応する重みが適用されます。

例: 'Weights','W'

データ型: single | double | char | string

詳細

すべて折りたたむ

分類エッジ

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

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

特徴選択を実行する場合などに複数の分類器から選択する方法の 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 で導入