margin
サポート ベクター マシン (SVM) 分類器の分類マージンを計算
説明
例
SVM 分類器のテスト標本分類マージンの推定
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,:);
CVSVMModel
は ClassificationPartitionedModel
分類器です。この分類器には Trained
プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた CompactClassificationSVM
分類器が格納されています。
テスト標本分類マージンを推定します。
m = margin(CompactSVMModel,XTest,YTest); m(10:20)
ans = 11×1
3.5461
5.5941
4.9944
4.5609
-4.7963
5.5125
-2.8772
1.8669
9.4997
9.5030
⋮
観測マージンは、観測された真のクラスのスコアから、該当するクラスのすべてのスコアの中で最大の偽のクラスのスコアを差し引いたものです。分類器のマージンは比較的大きいことが推奨されます。
テスト標本マージンの検査による SVM 分類器の特徴量の選択
複数のモデルによるテスト標本マージンを比較することにより、特徴選択を実行します。この比較のみに基づくと、マージンが最大である分類器が最良の分類器です。
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
分類器が格納されています。
分類器ごとにテスト標本マージンを推定します。
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% が予測子が少ないモデルからのものより小さくなっています。この結果は、すべての予測子によって学習をさせたモデルの方が優れていることを示しています。
入力引数
SVMModel
— SVM 分類モデル
ClassificationSVM
モデル オブジェクト | CompactClassificationSVM
モデル オブジェクト
SVM 分類モデル。fitcsvm
が返す ClassificationSVM
モデル オブジェクトまたは compact
が返す CompactClassificationSVM
モデル オブジェクトを指定します。
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl
に含めることができます。Tbl
には、SVMModel
を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
SVMModel
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
または Y
を指定する必要はありません。
テーブルに格納されている標本データを使用して SVMModel
に学習をさせた場合、margin
の入力データもテーブルに含まれていなければなりません。
SVMModel
に学習をさせるときに fitcsvm
で 'Standardize',true
を設定した場合、対応する SVMModel.Mu
内の平均および SVMModel.Sigma
内の標準偏差を使用して、予測子データの列が標準化されます。
データ型: table
X
— 予測子データ
数値行列
予測子データ。数値行列として指定します。
X
の各行は 1 件の観測 (インスタンスや例とも呼ばれます) に対応し、各列は 1 個の変数 (特徴とも呼ばれます) に対応します。X
の列内の変数は、分類器 SVMModel
に学習させた変数と同じでなければなりません。
Y
の長さと X
の行数は等しくなければなりません。
fitcsvm
で 'Standardize',true
を設定して SVMModel
に学習をさせた場合、対応する SVMModel.Mu
内の平均および SVMModel.Sigma
内の標準偏差を使用して、X
の列が標準化されます。
データ型: double
| single
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。SVMModel
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
を指定する必要はありません。
ResponseVarName
を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Response
として格納されている場合、ResponseVarName
として 'Response'
を指定します。それ以外の場合、Tbl
の列は Tbl.Response
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: 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.
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
この関数は、tall 配列を完全にサポートします。詳細は、tall 配列を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
関数
margin
では 1 クラス分類モデルはサポートしていません。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014a で導入
参考
ClassificationSVM
| CompactClassificationSVM
| loss
| predict
| edge
| fitcsvm
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)