ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ClassificationSVM クラス

スーパークラス: CompactClassificationSVM

バイナリ分類のサポート ベクター マシン

説明

ClassificationSVM は 1 または 2 クラス学習のサポート ベクター マシン分類器です。ClassificationSVM 分類器に学習をさせるには、fitcsvm を使用します。

学習させた ClassificationSVM 分類器は、学習データ、パラメーター値、事前確率、サポート ベクトルおよびアルゴリズムの実装情報を保存します。これらの分類器は以下に使用できます。

  • 再代入予測の推定。詳細は、「resubPredict」を参照してください。

  • 新しいデータのラベルまたは事後確率の予測。詳細は、「predict」を参照してください。

構築

SVMModel = fitcsvm(TBL,ResponseVarName) は、テーブル TBL に含まれている標本データを使用して学習させた SVM 分類器 (SVMModel) を返します。ResponseVarName は、1 クラスまたは 2 クラス分類のためのクラス ラベルが含まれている TBL 内の変数の名前です。詳細は、fitcsvm を参照してください。

SVMModel = fitcsvm(TBL,formula) は、テーブル (TBL) に含まれている標本データを使用して学習させた SVM 分類器を返します。formula は、学習に使用する TBL 内の応答変数と予測子変数を特定する式の文字列です。詳細は、fitcsvm を参照してください。

SVMModel = fitcsvm(TBL,Y) は、テーブル TBL の予測子変数とベクトル Y のクラス ラベルを使用して学習させた SVM 分類器を返します。詳細は、fitcsvm を参照してください。

SVMModel = fitcsvm(X,Y) は、1 クラス分類または 2 クラス分類の場合に、行列 X の予測子とベクトル Y のクラス ラベルを使用して学習を行った SVM 分類器を返します。詳細は、fitcsvm を参照してください。

SVMModel = fitcsvm(___,Name,Value) は、前の構文のいずれかを使用し、1 つ以上の Name,Value ペア引数で指定されたオプションを追加して、学習済み SVM 分類器を返します。たとえば、交差検定の種類、誤分類のコスト、スコア変換関数の種類を指定できます。名前と値のペアの引数についての詳細は、fitcsvm を参照してください。

次の 5 つのオプション、'CrossVal''CVPartition''Holdout''KFold' または 'Leaveout' のいずれかが設定されている場合、SVMModelClassificationPartitionedModel モデルです。それ以外の場合、SVMModelClassificationSVM 分類器です。

入力引数

すべて展開する

モデルを学習させるために使用する標本データ。テーブルとして指定します。TBL の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、TBL に応答変数用の列を 1 つ追加できます。複数列の変数と、文字列のセル配列ではないセル配列は使用できません。

TBL に応答変数が含まれている場合に TBL 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

TBL に応答変数が含まれている場合に TBL 内の他の変数の一部のみを予測子として使用するには、formula を使用して式の文字列を指定します。

TBL に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと TBL の行数は、同じでなければなりません。

データ型: table

応答変数の名前。TBL に含まれている変数の名前として指定します。

ResponseVarName は、文字列として指定しなければなりません。たとえば、応答変数 YTBL.Y として格納されている場合、'Y' として指定します。そうでない場合、モデルを学習させるときに、TBL の列は Y を含めてすべて予測子として扱われます。

応答変数は、カテゴリカル配列、文字配列、論理ベクトル、数値ベクトル、または文字列のセル配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

ClassNames 名前と値のペアの引数を使用してクラスの順序を指定することをお勧めします。

モデルの学習で使用する応答変数と予測子変数。'Y~X1+X2+X3' という形式の文字列として指定します。この形式では、Y は応答変数を、X1X2 および X3 は予測子変数を表します。

モデルを学習させるための予測子として、TBL に含まれている変数の一部を指定するには、式の文字列を使用します。式の文字列を指定した場合、formula に現れない TBL の変数はモデルの学習に使用されません。

SVM 分類器に学習させる予測子データ。数値の行列として指定します。

X の各行は 1 件の観測 (インスタンスや例とも呼ばれます) に対応し、各列は 1 個の予測子に対応します。

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

予測子の名前を X に表示される順序で指定するには、PredictorNames 名前と値のペアの引数を使用します。

データ型: double | single

SVM 分類器に学習させるクラス ラベル。カテゴリカル配列または文字配列、論理ベクトルまたは数値ベクトル、または文字列のセル配列として指定します。

Y が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

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

ClassNames 名前と値のペアの引数を使用してクラスの順序を指定することをお勧めします。

応答変数名を指定するには、ResponseName 名前と値のペアの引数を使用します。

    メモ:   NaN、空の文字列 ('') および <undefined> 要素は欠損値として扱われます。X の行または Y の要素に NaN が 1 つでもあれば、当該の行や要素が両方の引数から削除されます。この削除処理により、学習や交差検定の実際の標本サイズが小さくなります。

プロパティ

Alpha

双対問題 (推測されたラグランジュ乗数) からの学習させた分類器の係数数値ベクトル。Alpha の長さは、学習させた分類器のサポート ベクトルの数 (sum(SVMModel.IsSupportVector)) と等しくなります。

Beta

線形予測子の係数が含まれている数値ベクトル。Beta の長さは、モデルを学習させるために使用した予測子の数と等しくなります。

予測子データにカテゴリカル変数が含まれている場合、これらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて 1 つずつダミー変数が作成されます。Beta には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数である場合、Beta は 5 つの値が含まれている数値ベクトルになります。

KernelParameters.Function'linear' の場合、観測値 x の分類スコアは次の式を使用して推定されます。

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

SVMModel では、β、b および s がそれぞれ BetaBias および KernelParameters.Scale プロパティに格納されます。

KernelParameters.Function'linear' ではない場合、Beta は空 ([]) になります。

Bias

学習させた分類器のバイアス項に対応するスカラー。

BoxConstraints

ボックス制約の数値ベクトル。

BoxConstraints の長さは、観測の数 (size(SVMModel.X,1)) と等しくなります。

CacheInfo

次のものを含む構造体配列

  • SVM 分類器を学習させるために予約されているキャッシュのサイズ (SVMModel.CacheInfo.Size、MB 単位)。キャッシュのサイズを CacheSize MB に設定するには、fitcsvm 名前と値のペアの引数を 'CacheSize',CacheSize に設定します。

  • 最適化時に使用されるキャッシュ アルゴリズム (SVMModel.CacheInfo.Algorithm)。現在、使用可能なキャッシュ アルゴリズムは Queue のみです。キャッシュ アルゴリズムは設定できません。

CategoricalPredictors

カテゴリカル予測子のインデックス。数値ベクトルとして格納されます。CategoricalPredictors には、カテゴリカル予測子が含まれている X の列に対応するインデックス値が格納されます。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

ClassNames

重複が削除された Y の要素のリスト。ClassNames のデータ型は引数 Y と同じなので、カテゴリカル配列または文字配列、論理ベクトルまたは数値ベクトル、または文字列のセル配列を指定できます。

ConvergenceInfo

収束情報が含まれる構造体配列。

フィールド説明
Convergedアルゴリズムが収束しているかどうかを示す論理フラグ (1 は収束を示す)
ReasonForConvergence収束を検出するための条件を示す文字列
Gap双対関数および主目的関数の間のスカラー実行可能性の差異
GapToleranceスカラー実行可能性の差異の許容誤差。この許容誤差を、たとえば gt に設定するには、fitcsvm の名前と値のペアの引数 'GapTolerance',gt を使用します。
DeltaGradientスカラーで取得された、上位の違反値と下位の違反値の間の勾配差分
DeltaGradientTolerance上位の違反値と下位の違反値の間の勾配差分に対するスカラーの許容誤差。fitcsvm の 名前と値のペアの引数 'DeltaGradientTolerance',dgt を使用して、この許容誤差を (たとえば dgt に) 設定します。
LargestKKTViolationスカラーの KKT (カルーシュ・キューン・タッカー) 違反の最大値
KKTToleranceKKT 違反の最大値に対するスカラーの許容誤差。fitcsvm の 名前と値のペアの引数 'KKTTolerance',kktt を使用して、この許容誤差を (たとえば kktt に) 設定します。
History設定された最適化反復での収束情報を含む構造体配列。フィールドは次のとおりです。
  • NumIterations: 収束情報の記録の対象となる反復インデックスの数値ベクトル

  • Gap: 反復時の Gap 値の数値ベクトル

  • DeltaGradient: 反復時の DeltaGradient 値の数値ベクトル

  • LargestKKTViolation: 反復時の LargestKKTViolation 値の数値ベクトル

  • NumSupportVectors: 反復時のサポート ベクトルの数を示す数値ベクトル

  • Objective: 反復時の Objective 値の数値ベクトル

Objective双対目的関数のスカラー値

Cost

正方行列。Cost(i,j) は真のクラスが i である場合に 1 つのポイントをクラス j に分類するためのコスト。

学習時に、コスト行列で表されているペナルティが組み込まれて、事前確率が更新されます。したがって、

  • 2 クラス学習での Cost の形式が、常に i ~= j の場合 Cost(i,j) = 1i = j の場合は Cost(i,j) = 0 になります (行は真のクラス、列は予測したクラスに対応します)。Cost の行と列の順序は、ClassNames のクラスの順序に対応します。

  • 1 クラス学習では、Cost = 0 です。

このプロパティは読み取り専用です。詳細は、「アルゴリズム」を参照してください。

ExpandedPredictorNames

展開された予測子の名前。文字列のセル配列として格納されます。

モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。そうでない場合、ExpandedPredictorNamesPredictorNames と同じです。

Gradient

学習データの勾配値の数値ベクトル。Gradient の長さは、観測値の数 (size(SVMModel.X,1)) と等しくなります。

IsSupportVector

予測子データ行列の対応する行がサポート ベクトルであるかどうかを示す論理ベクトル。IsSupportVector の長さは、観測値の数 (size(SVMModel.X,1)) と等しくなります。

KernelParameters

カーネルの名前とパラメーター値が格納された構造体配列。

KernelParameters の値を表示するには、ドット表記を使用します。たとえば、SVMModel.KernelParameters.Scale はスケール パラメーター値を表示します。

KernelParameters が入力として使用され、値は変更されません。KernelParameters を変更するには、fitcsvm を使用して SVM 分類器に学習させる際に、適切な名前と値のペアの引数を設定します。

ModelParameters

SVM 分類器の学習に使用するパラメーター値に含まれるオブジェクト (名前と値のペアの引数など)。ModelParameters には推定されたパラメーターは格納されません。

ModelParameters のフィールドにはドット表記でアクセスします。たとえば、Alpha を推定するための初期値にアクセスするには、SVMModel.ModelParameters.Alpha を使用します。

Mu

予測子平均の数値ベクトル。

fitcsvm を使用して SVM 分類器を学習させるときに 'Standardize',1 または 'Standardize',true を指定した場合、Mu の長さは予測子の数と等しくなります。

予測子データにカテゴリカル変数が含まれている場合、これらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて 1 つずつダミー変数が作成されます。Mu には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。ただし、カテゴリカル変数が含まれている列は標準化されません。

'Standardize'false または 0 の場合、Mu は空のベクトル ([]) になります。

NumIterations

収束を実現するための最適化ルーチンで必要となる反復の回数を示す正の整数。

反復の回数を (たとえば k に) 制限する場合、fitcsvm の名前と値のペアの引数 'IterationLimit',k を指定します。

Nu

1 クラス学習の ν パラメーターを表す正のスカラー。

NumObservations

学習データにある観測値の数を表す数値スカラー。入力引数 X または Y に欠損値が格納されている場合、NumObservationsY より長さが小さくなります。

OutlierFraction

学習データ内で想定されている外れ値の割合を示すスカラー。

PredictorNames

予測子名が含まれる文字列のセル配列。X と同じ順序で配列されます。

Prior

各クラスの事前確率の数値ベクトル。Prior の要素の順序は SVMModel.ClassNames の要素に対応します。

2 クラス学習の場合、コスト行列を指定すると、そのコスト行列で指定されているペナルティが組み込まれ、事前確率が更新されます。

このプロパティは読み取り専用です。詳細は、「アルゴリズム」を参照してください。

ResponseName

応答変数 Y を記述する文字列。

ScoreTransform

組み込みの変換関数を表す文字列、または予測された分類スコアを変換するための関数ハンドル。

スコア変換関数を変換する (function など) には、ドット表記を使用します。

  • 組み込み関数の場合は、文字列を入力します。

    SVMModel.ScoreTransform = 'function';

    次の表は、使用可能な組み込み関数の一覧です。

    文字列
    'doublelogit'1/(1 + e–2x)
    'invlogit'log(x / (1–x))
    'ismax'最大のスコアをもつクラスのスコアを 1 に設定し、それ以外のクラスのスコアを 0 に設定します。
    'logit'1/(1 + e–x)
    'none' または 'identity'x (変換なし)
    'sign'x < 0 のとき –1
    x = 0 のとき 0
    x > 0 のとき 1
    'symmetric'2x – 1
    'symmetriclogit'2/(1 + e–x) – 1
    'symmetricismax'最大のスコアをもつクラスのスコアを 1 に設定し、それ以外のクラスのスコアを -1 に設定します。

  • MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。

    SVMModel.ScoreTransform = @function;

    function は行列 (元のスコア) を受け入れ、同じサイズの行列 (変換されたスコア) を返さなければなりません。

ShrinkagePeriod

縮小期間 (アクティブ セットの削減間での反復回数) を示す非負の整数。

縮小期間を (たとえば sp に) 設定するには、fitcsvm の 名前と値のペアの引数 'ShrinkagePeriod',sp を指定します。

Sigma

予測子の標準偏差の数値ベクトル。

SVM 分類器を学習させるときに 'Standardize',1 または 'Standardize',true を指定した場合、Sigma の長さは予測子の数と等しくなります。

予測子データにカテゴリカル変数が含まれている場合、これらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて 1 つずつダミー変数が作成されます。Sigma には、ダミー変数を含む各予測子変数について 1 つずつ値が格納されます。ただし、カテゴリカル変数が含まれている列は標準化されません。

'Standardize'false または 0 の場合、Sigma は空のベクトル ([]) になります。

Solver

SVM 分類器の学習に使用された解法ルーチンを示す文字列。

ソルバーを (たとえば solver に) 設定するには、fitcsvm の 名前と値のペアの引数 'Solver',solver を指定します。

SupportVectors

サポート ベクトルとして認識される X の行を含む行列。

'Standardize',1 または 'Standardize',true が指定されている場合、SupportVectorsX の標準化された行となります。

SupportVectorLabels

サポート ベクトルのクラス ラベルの数値ベクトル。SupportVectorLabels の長さは、サポート ベクトルの数 (sum(SVMModel.IsSupportVector)) と等しくなります。

+1 は、対応するサポート ベクトルが陽性のクラス (SVMModel.ClassNames{2}) にあることを表します。-1 は、対応するサポート ベクトルが陰性のクラス (SVMModel.ClassNames{1}) にあることを表します。

W

SVM 分類器の学習に使用された観測値の重みの数値ベクトル。

W の長さは SVMModel.NumObservations です。

fitcsvm により Weights が正規化され、特定のクラス内にある W の要素の合計がそのクラスの事前確率と等しくなります。

X

SVM 分類器の学習に使用された、標準化されていない予測子の値の数値ベクトル。

X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

NaN が原因で削除された予測子データ行は X から除外されます。

Y

カテゴリカル配列、文字配列、論理ベクトル、数値ベクトル、または文字列のセル配列。SVM 分類器を学習させるために使用した観測済みのクラス ラベルを表します。Y のデータ型は、fitcsvm の入力引数 Y と同じになります。

Y の各行は、X の対応する行の観測された分類を表します。

NaN が原因で削除された要素は Y から除外されます。

メソッド

compactコンパクトなサポート ベクター マシン分類器
crossval交差検定を使用したサポート ベクター マシン分類器
fitPosterior事後確率の近似
resubEdge再代入によるサポート ベクター マシン分類器の分類エッジ
resubLoss再代入によるサポート ベクター マシン分類器の分類損失
resubMargin再代入によるサポート ベクター マシン分類器の分類マージン
resubPredictサポート ベクター マシン再代入応答を予測します。
resumeサポート ベクター マシンの分類器の学習の再開

継承メソッド

compareHoldout新しいデータを使用して 2 つの分類モデルの精度を比較
discardSupportVectors線形サポート ベクター マシン モデルのサポート ベクトルを破棄
edgeサポート ベクター マシン分類器の分類エッジ
fitPosterior事後確率の近似
lossサポート ベクター マシンの分類誤差
marginサポート ベクター マシン分類器の分類マージン
predictサポート ベクター マシン分類器のラベルを予測します。

定義

ボックス制約

マージンに違反している観測に課せられる最大ペナルティを制御し、過適合防止 (正則化) を促進するためのパラメーター。

ボックス制約の値を大きくすると、SVM 分類器が割り当てるサポート ベクトルは少なくなります。ただし、ボックス制約の値を大きくすると、学習時間が長くなる場合があります。

グラム行列

n 個のベクトルの組 {x1,..,xn; xj ∊ Rp} のグラム行列とは、n 行 n 列の行列で、要素 (j,k) は G(xj,xk) = <ϕ(xj),ϕ(xk)> (カーネル関数 ϕ を使用して変換された予測子の内積) として定義されます。

非線形 SVM の場合、アルゴリズムにより予測子行列の列を使用してグラム行列が形成されます。双対形式化により、予測子の内積が、形成されるグラム行列の対応する要素に置き換えられます (「カーネル トリック」と呼ばれます)。その後、非線形 SVM は変換された予測子空間で分離超平面を検出します。

カルーシュ・キューン・タッカー相補性条件

KKT 相補性条件は、最適な非線形計画法の解決に必要な最適化制約です。

SVM では、すべての j = 1,...,n についてKKT 相補性条件は次のようになります。

{αj[yjf(xj)1+ξj]=0ξj(Cαj)=0

ここで、f(xj)=ϕ(xj)β+b, であり、ϕ はカーネル関数 (「グラム行列」を参照)、ξj はスラック変数です。クラスが完全に分離可能な場合、すべての j = 1,...,n に対して ξj = 0 となります。

1 クラス学習

1 クラス学習 (教師なし SVM) は、高次元の予測子空間 (元の予測子空間ではありません) からデータを分離するためのもので、外れ値の検出に使用するアルゴリズムです。

このアルゴリズムは「バイナリ分類の SVM」 のアルゴリズムと類似しています。目的は、α1,...,αn に関して次の双対式を最小化することです。

0.5jkαjαkG(xj,xk)

これには、すべての j = 1,...,n について 0αj1 と次の式を満たすという条件があります。

αj=nν

G(xj,xk) は、「グラム行列」の要素 (j,k) です。

ν の値が小さいとサポート ベクトルは少なくなり、そのため判定境界は起伏が少なく柔軟性が低いものとなります。ν の値が大きいとサポート ベクトルは多くなり、そのため判定境界は起伏が多く柔軟性が高いものとなります。ν の最適値は、データの複雑さを取得できるだけの大きさがあり、過学習が発生しない程度に小さい値です。また、0 < ν ≤ 1 です。

詳細は、「[5]」を参照してください。

サポート ベクトル

サポート ベクトルは、α1,...,αn の厳密に正の推定値に対応する観測値です。

特定の学習に対して生成されるサポート ベクトルが少ない SVM 分類器の方が推奨されます。

バイナリ分類のサポート ベクター マシン

SVM バイナリ分類アルゴリズムでは、データを 2 つのクラスに分離する最適超平面が検索されます。クラスが分離可能な場合、最適超平面は周囲の "マージン" (観測値がない領域) を最大化します。これにより、陽性のクラスと陰性のクラスの境界が作成されます。クラスが分離可能でない場合でも目的は同じですが、クラスの境界の誤った側にあるすべての観測のマージンの長さに対し、アルゴリズムによりペナルティが課されます。

線形 SVM スコア関数は次のようになります。

f(x)=xβ+b,

ここで

  • x は観測値です (X の行に対応します)。

  • ベクトル β には超平面に直交するベクトルを定義する係数 (SVMModel.Beta に対応) が含まれています。分離可能なデータの場合、最適なマージンの長さは 2/β. です。

  • b は (SVMModel.Bias に対応する) バイアス項です。

特定の係数に対する f(x) の根により超平面が定義されます。特定の超平面について、f(z) は点 z から超平面までの距離です。

このアルゴリズムでは、陽性 (y = 1) のクラスと陰性 (y = -1) のクラスを分離したままマージンの最大長を求めます。したがって、

  • 分離可能なクラスの場合、目的は β および b に関して β を最小化することです。これには、すべての j = 1,..,n について yjf(xj) ≥ 1 という条件があります。これが分離可能クラスの "主" 問題の定式化です。

  • 分離可能でないクラスの場合、このアルゴリズムではスラック変数 (ξj) を使用して、クラスのマージン境界を超える観測値の目的関数にペナルティを課します。観測値がクラスのマージン境界を超えない場合は ξj = 0、そうでない場合は ξj ≥ 0 です。

    目的は、β、b および ξj に関して 0.5β2+Cξj を最小化することです。これには、すべての j = 1,..,n および正のスカラー「ボックス制約」 C について yjf(xj)1ξj および ξj0 という条件があります。これは分離不可能クラスの主問題の定式化です。

このアルゴリズムでは、ラグランジュ乗数法を使用して目的関数を最適化します。これにより、n 個の係数 α1、...、αn (SVMModel.Alpha に対応) が導入されます。線形 SVM の双対形式化には、次のようなものがあります。

  • 分離可能なクラスの場合、すべての j = 1,...,n について αjyj=0, αj ≥ 0 という条件と「カルーシュ・キューン・タッカー相補性条件」で、α1,...,αn に関して次の式を最小化します。

    0.5j=1nk=1nαjαkyjykxjxkj=1nαj

  • 分離可能でないクラスの場合、目的は分離可能なクラスの場合と同じですが、すべての j = 1,..,n について 0αjC という条件が加わります。

生成されるスコア関数は次のようになります。

f^(x)=j=1nα^jyjxxj+b^.

b^ はバイアスの推定値、α^j はベクトル α^ の j 番目の推定値です (j = 1,...,n)。このように記述すると、主問題を定式化した結果、スコア関数は β の推定値の影響を受けなくなります。

SVM アルゴリズムでは、sign(f^(z)). を使用して新しい観測値 z を分類します。

場合によっては、クラスを分離する非線形境界が存在します。"非線形 SVM" は変換済み予測子空間で、最適な分離超平面を検索します。

非線形 SVM の双対問題は、α1,...,αn に関して次のように定式化されます。

0.5j=1nk=1nαjαkyjykG(xj,xk)j=1nαj

これには、すべての j = 1,..,n について αjyj=0, 0αjC という条件と KKT 相補性条件が適用されます。G(xk,xj) は「グラム行列」の要素です。生成されるスコア関数は次のようになります。

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

詳細は、「サポート ベクター マシンについて」「[1]」および「[3]」を参照してください。

コピーのセマンティクス

値。コピー操作に対する値クラスの影響については、MATLAB のドキュメンテーションの「オブジェクトのコピー」を参照してください。

すべて展開する

フィッシャーのアヤメのデータセットを読み込みます。がく片の長さと幅および観測済みのすべての setosa を削除します。

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);

処理済みのデータセットを使用して SVM 分類器に学習させます。

SVMModel = fitcsvm(X,y)
SVMModel = 

  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 100
                    Alpha: [24x1 double]
                     Bias: -14.4149
         KernelParameters: [1x1 struct]
           BoxConstraints: [100x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [100x1 logical]
                   Solver: 'SMO'


コマンド ウィンドウに、SVMModel は学習済みの ClassificationSVM 分類器およびプロパティ リストであることが示されます。SVMModel のプロパティを表示します。これにより、たとえばドット表記を使用してクラスの順序を確認できます。

classOrder = SVMModel.ClassNames
classOrder = 

    'versicolor'
    'virginica'

最初のクラス ('versicolor') は陰性のクラスで、2 番目のクラス ('virginica') は陽性のクラスです。'ClassNames' 名前と値のペアの引数を使用すると、学習中にクラスの順序を変更できます。

データの散布図をプロットし、サポート ベクトルを円で囲みます。

sv = SVMModel.SupportVectors;
figure
gscatter(X(:,1),X(:,2),y)
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('versicolor','virginica','Support Vector')
hold off

サポート ベクトルは、推定されたクラス境界の上または外側で発生する観測値です。

名前と値のペアの引数 'BoxConstraint' を使用して学習時のボックス制約を設定すると、境界 (および結果的にサポート ベクトルの数) を調整できます。

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

load ionosphere

SVM 分類器の学習と交差検定を実行します。予測子を標準化してクラスの順序を指定することをお勧めします。

rng(1);  % For reproducibility
CVSVMModel = fitcsvm(X,Y,'Standardize',true,...
    'ClassNames',{'b','g'},'CrossVal','on')
CVSVMModel = 

  classreg.learning.partition.ClassificationPartitionedModel
    CrossValidatedModel: 'SVM'
         PredictorNames: {1x34 cell}
           ResponseName: 'Y'
        NumObservations: 351
                  KFold: 10
              Partition: [1x1 cvpartition]
             ClassNames: {'b'  'g'}
         ScoreTransform: 'none'


CVSVMModelClassificationSVM 分類器ではなく、ClassificationPartitionedModel 交差検定された SVM 分類器です。既定では、10 分割交差検定が実行されます。

あるいは、学習させた ClassificationSVM 分類器を crossval に渡すことにより、この分類器を交差検定することができます。

ドット表記を使用して、学習させた分割のいずれかを検査します。

CVSVMModel.Trained{1}
ans = 

  classreg.learning.classif.CompactClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: 'none'
                    Alpha: [78x1 double]
                     Bias: -0.2209
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           SupportVectors: [78x34 double]
      SupportVectorLabels: [78x1 double]


各分割は、データの 90% で学習済みの CompactClassificationSVM 分類器です。

一般化誤差を推定します。

genError = kfoldLoss(CVSVMModel)
genError =

    0.1168

平均すると一般化誤差は約 12% です。

関連する例

アルゴリズム

  • NaN<undefined> および空の文字列 ('') は、欠損値を示します。fitcsvm は、欠損応答に対応するデータ行全体を削除します。重みの合計を計算するときに (以下の項目を参照)、fitcsvm は欠損している予測子の観測値を無視します。これにより、平衡なクラスの問題で不平衡な事前確率が発生する可能性があります。したがって、観測値のボックス制約が BoxConstraint に等しくならない可能性があります。

  • fitcsvm は、重みまたは事前確率がゼロの観測値を削除します。

  • 2 クラス学習でコスト行列 C (Cost を参照) を指定した場合、C で表されているペナルティを組み込むことにより、クラスの事前確率 p (Prior を参照) が pc に更新されます。

    具体的には、fitcsvm は以下を行います。

    1. 次の計算を行います。pc=pC.

    2. 更新された事前確率の合計が 1 になるように pc* を正規化します。

      pc=1j=1Kpc,jpc.

      K はクラスの数です。

    3. コスト行列を既定値にリセットします。

      C=[0110].

    4. 事前確率がゼロのクラスに対応する学習データから観測値を削除します。

  • 2 クラス学習の場合、fitcsvm は合計が 1 になるようにすべての観測値の重み (Weights を参照) を正規化します。その後、正規化された重みを再度正規化し、観測値が属しているクラスの更新後の事前確率に重みの合計が等しくなるようにします。つまり、クラス k の観測値 j について、重みの合計は次のようになります。

    wj=wjjClass kwjpc,k.

    ここで、wj は観測値 j の正規化された重み、pc,k はクラス k の更新された事前確率 (前の項目を参照) です。

  • 2 クラス学習の場合、fitcsvm は学習データの各観測値にボックス制約を割り当てます。観測値 j のボックス制約の式は、次のようになります。

    Cj=nC0wj.

    ここで、n は学習標本のサイズ、C0 は初期のボックス制約 (BoxConstraint を参照)、wj は観測値 j の重みの合計 (前の項目を参照) です。

  • 'Cost''Prior' または 'Weights' のいずれかと 'Standardize',true を設定した場合、fitcsvm は対応する重みの平均および重み付き標準偏差を使用して予測子を標準化します。つまり、fitcsvm は次の式を使用して予測子 j (xj) を標準化します。

    xj=xjμjσj.

    ここで

    • μj=1kwkkwkxjk.

    • xjk は、予測子 j (列) の観測値 k (行)。

    • (σj)2=v1v12v2kwk(xjkμj)2.

    • v1=jwj.

    • v2=j(wj)2.

  • op は学習データで想定される外れ値の割合です。fitcsvm を使用して SVM 分類器を学習させる際に 'OutlierFraction',op を使用すると、次のようになります。

    • 1 クラス学習では、バイアス項の学習により、学習データの観測値のうち 100op% が負のスコアをもつようになります。

    • 2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100op% の削除が試行されます。削除された観測値は、勾配の大きいものに対応します。

  • 予測子データにカテゴリカル変数が含まれている場合、一般にこれらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて、1 つずつダミー変数が作成されます。

    • PredictorNames プロパティには、元の予測子変数名のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、PredictorNames は元の予測子変数名が含まれている 1 行 3 列の文字列のセル配列になります。

    • ExpandedPredictorNames プロパティには、ダミー変数を含む予測子変数のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、ExpandedPredictorNames は予測子変数および新しいダミー変数の名前が含まれている 1 行 5 列の文字列のセル配列になります。

    • 同様に、Beta プロパティには、ダミー変数を含む各予測子について 1 つずつベータ係数が格納されます。

    • SupportVectors プロパティには、ダミー変数を含むサポート ベクトルの予測子の値が格納されます。たとえば、m 個のサポート ベクトルと 3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、SupportVectors は n 行 5 列の行列になります。

    • X プロパティには、はじめに入力した状態で学習データが格納されます。ダミー変数は含まれません。入力がテーブルの場合、X には予測子として使用した列のみが格納されます。

  • テーブルで予測子を指定した場合、いずれかの変数に順序付きのカテゴリが含まれていると、これらの変数について順序付きエンコードが使用されます。

    • k 個の順序付きレベルが変数に含まれている場合、k – 1 個のダミー変数が作成されます。j 番目のダミー変数は、j までのレベルについては -1、j + 1 から k までのレベルについては +1 になります。

    • ExpandedPredictorNames プロパティに格納されるダミー変数の名前は 1 番目のレベルを示し、値は +1 になります。レベル 2, 3, ..., k の名前を含む k – 1 個の追加予測子名がダミー変数について格納されます。

  • どのソルバーも L1 ソフト マージン最小化を実行します。

  • fitcsvmsvmtrain は最適化に SMO アルゴリズムを使用します。2 つの関数の間で SMO の実行方式は異なりますが、数値を調べると結果には明確な一致があることがわかります。

  • 1 クラス学習の場合、次の条件を満たすラグランジュ乗数 α1,...,αn が推定されます。

    j=1nαj=nν.

参照

[1] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

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

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

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

この情報は役に立ちましたか?