edge
サポート ベクター マシン (SVM) 分類器の分類エッジを計算
構文
説明
は、table e = edge(SVMModel,Tbl,ResponseVarName)Tbl に含まれている予測子データと Tbl.ResponseVarName に含まれているクラス ラベルを使用して、サポート ベクター マシン (SVM) 分類器 SVMModel の分類エッジ (e) を返します。
分類エッジ (e) は、分類マージンの加重平均を表すスカラー値です。
は、前の構文の入力引数のいずれかを使用して、e = edge(___,'Weights',weights)weights で指定された観測値の重みについて分類エッジを計算します。
メモ
予測子データ X または Tbl 内の予測子変数に欠損値がある場合、関数 edge で NaN が返されることがあります。詳細については、欠損値がある予測子データに対して edge で NaN が返されることがあるを参照してください。
例
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,:);
CVSVMModel は ClassificationPartitionedModel 分類器です。この分類器には 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.8340
テスト標本の加重平均マージンはおよそ 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};
FullCVSVMModel と PartCVSVMModel は ClassificationPartitionedModel 分類器です。これらの分類器には Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationSVM 分類器が格納されています。
分類器ごとにテスト標本エッジを推定します。
fullEdge = edge(FCSVMModel,XTest,YTest)
fullEdge = 2.8319
partEdge = edge(PCSVMModel,XTest(:,end-20:end),YTest)
partEdge = 1.5539
データ セット全体に対して学習をさせた分類器の方がエッジが大きくなっています。これは、すべての予測子を使用して学習をさせた分類器の方が優れていることを示します。
入力引数
SVM 分類モデル。fitcsvm が返す ClassificationSVM モデル オブジェクトまたは compact が返す CompactClassificationSVM モデル オブジェクトを指定します。
モデルを学習させるために使用する標本データ。table として指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl に含めることができます。Tbl には、SVMModel を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
SVMModel を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName または Y を指定する必要はありません。
テーブルに格納されている標本データを使用して SVMModel に学習をさせた場合、edge の入力データもテーブルに含まれていなければなりません。
SVMModel に学習をさせるときに fitcsvm で 'Standardize',true を設定した場合、対応する SVMModel.Mu 内の平均および SVMModel.Sigma 内の標準偏差を使用して、予測子データの列が標準化されます。
データ型: table
応答変数の名前。Tbl 内の変数の名前で指定します。SVMModel を学習させるために使用した応答変数が Tbl に含まれている場合、ResponseVarName を指定する必要はありません。
ResponseVarName を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Response として格納されている場合、ResponseVarName として 'Response' を指定します。それ以外の場合、Tbl の列は Tbl.Response を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char | string
観測値の重み。数値ベクトルまたは 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 つは、エッジが最大になる分類器を選択することです。
バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。
このソフトウェアでは、バイナリ分類の分類マージンは次のように定義されます。
x は観測値です。x の真のラベルが陽性クラスである場合、y は 1、それ以外の場合は –1 です。f(x) は観測値 x についての陽性クラスの分類スコアです。一般的には、分類マージンは m = yf(x) と定義されています。
各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
観測値 x を分類するための SVM の "分類スコア" は、x から判定境界 (範囲は -∞ ~ +∞) までの符号付き距離です。クラスの正のスコアは、x がそのクラスにあると予測されることを示します。負のスコアはそうではないことを示します。
陽性クラス分類スコア は、学習済み SVM 分類関数です。 は x に対する数値的な予測応答でもあり、x を陽性クラスとして予測するスコアでもあります。
ここで、 は推定された SVM パラメーター、 は予測子空間における x とサポート ベクターの間のドット積です。合計には学習セットの観測値が含まれます。x に対する負のクラス分類スコア、つまり x を陰性クラスとして予測するスコアは、–f(x) です。
G(xj,x) = xj′x (線形カーネル) の場合、スコア関数は次のように縮小されます。
s はカーネル スケール、β は近似線形係数のベクトルです。
詳細は、サポート ベクター マシンについてを参照してください。
アルゴリズム
バイナリ分類の場合、観測値 j のマージン mj は次のように定義されます。
ここで、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.
拡張機能
edge 関数は、tall 配列を完全にサポートします。詳細は、tall 配列を参照してください。
使用上の注意および制限:
関数
edgeでは 1 クラス分類モデルはサポートしていません。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014a で導入入力モデル オブジェクトに学習させるときに既定以外のコスト行列を指定すると、関数 edge で以前のリリースとは異なる値が返されます。
関数 edge は、Prior プロパティに格納された事前確率を使用して入力データの観測値の重みを正規化します。Prior プロパティの値を関数で使用する方法については変更されていません。ただし、既定以外のコスト行列をもつモデルについて入力モデル オブジェクトに格納されるプロパティの値が変更されたため、関数から異なる値が返されることがあります。
プロパティの値の変更に関する詳細については、Cost プロパティにユーザー指定のコスト行列を格納を参照してください。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior と Weights を使用して指定し、既定のコスト行列を使用します。
関数 edge で分類マージンの加重平均を計算する際に、スコアが NaN の観測値が省略されなくなりました。そのため、予測子データ X または Tbl 内の予測子変数に欠損値がある場合に edge で NaN が返されることがあります。ほとんどの場合、テスト セットの観測値に予測子の欠損がなければ、関数 edge で NaN が返されることはありません。
この変更により、fitcauto を使用する場合の分類モデルの自動選択が改善されます。この変更の前は、NaN 以外の予測子が少ないモデルが選択される (新しいデータの分類に最適であると予測される) ことがありました。
コードの edge で NaN が返される場合、このような結果にならないようにコードを更新できます。rmmissing または fillmissing を使用して、欠損値を削除するか置き換えます。
次の表に、オブジェクト関数 edge で NaN が返される可能性がある分類モデルを示します。詳細については、それぞれの関数 edge の「互換性の考慮事項」を参照してください。
| モデル タイプ | 完全またはコンパクトなモデル オブジェクト | オブジェクト関数 edge |
|---|---|---|
| 判別分析分類モデル | ClassificationDiscriminant, CompactClassificationDiscriminant | edge |
| 分類用のアンサンブル学習器 | ClassificationEnsemble, CompactClassificationEnsemble | edge |
| ガウス カーネル分類モデル | ClassificationKernel | edge |
| k 最近傍分類モデル | ClassificationKNN | edge |
| 線形分類モデル | ClassificationLinear | edge |
| ニューラル ネットワーク分類モデル | ClassificationNeuralNetwork, CompactClassificationNeuralNetwork | edge |
| サポート ベクター マシン (SVM) 分類モデル | edge |
参考
ClassificationSVM | CompactClassificationSVM | loss | predict | margin | resubEdge | kfoldEdge | fitcsvm
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)