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

resubPredict

サポート ベクター マシン (SVM) 分類器内の観測値を分類

説明

label = resubPredict(SVMModel) は、予測子データ SVMModel.X を使用して、学習させた SVM (サポート ベクター マシン) 分類器 SVMModel の予測されたクラス ラベルのベクトル (label) を返します。

[label,Score] = resubPredict(SVMModel) は、クラスの尤度の尺度 (スコアまたは事後確率) をさらに返します。

すべて折りたたむ

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

load ionosphere

SVM 分類器を学習させます。データを標準化し、'g' が陽性クラスであることを指定します。

SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

SVMModelClassificationSVM 分類器です。

学習標本のラベルとスコアを予測します。最初の 10 件の観測の結果を表示します。

[label,score] = resubPredict(SVMModel);
table(Y(1:10),label(1:10),score(1:10,2),'VariableNames',...
    {'TrueLabel','PredictedLabel','Score'})
ans=10×3 table
    TrueLabel    PredictedLabel     Score 
    _________    ______________    _______

       'g'            'g'           1.4861
       'b'            'b'          -1.0004
       'g'            'g'           1.8685
       'b'            'b'          -2.6458
       'g'            'g'           1.2805
       'b'            'b'          -1.4617
       'g'            'g'           2.1672
       'b'            'b'          -5.7085
       'g'            'g'           2.4797
       'b'            'b'          -2.7811

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

load ionosphere

SVM 分類器を学習させます。データを標準化し、'g' が陽性クラスであることを指定します。

SVMModel = fitcsvm(X,Y,'ClassNames',{'b','g'},'Standardize',true);

SVMModelClassificationSVM 分類器です。

スコアから事後確率への最適な変換関数パラメーターを近似します。

rng(1); % For reproducibility
ScoreSVMModel = fitPosterior(SVMModel)
ScoreSVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'b'  'g'}
           ScoreTransform: '@(S)sigmoid(S,-9.481802e-01,-1.218745e-01)'
          NumObservations: 351
                    Alpha: [90x1 double]
                     Bias: -0.1343
         KernelParameters: [1x1 struct]
                       Mu: [1x34 double]
                    Sigma: [1x34 double]
           BoxConstraints: [351x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [351x1 logical]
                   Solver: 'SMO'


  Properties, Methods

クラスは不可分であるため、スコア変換関数 (ScoreSVMModel.ScoreTransform) はシグモイド関数です。

学習データのスコアと陽性のクラスの事後確率を推定します。最初の 10 件の観測の結果を表示します。

[label,scores] = resubPredict(SVMModel);
[~,postProbs] = resubPredict(ScoreSVMModel);
table(Y(1:10),label(1:10),scores(1:10,2),postProbs(1:10,2),'VariableNames',...
    {'TrueLabel','PredictedLabel','Score','PosteriorProbability'})
ans=10×4 table
    TrueLabel    PredictedLabel     Score     PosteriorProbability
    _________    ______________    _______    ____________________

       'g'            'g'           1.4861           0.82215      
       'b'            'b'          -1.0004           0.30436      
       'g'            'g'           1.8685           0.86916      
       'b'            'b'          -2.6458          0.084183      
       'g'            'g'           1.2805           0.79184      
       'b'            'b'          -1.4617           0.22028      
       'g'            'g'           2.1672           0.89814      
       'b'            'b'          -5.7085         0.0050122      
       'g'            'g'           2.4797           0.92223      
       'b'            'b'          -2.7811          0.074805      

入力引数

すべて折りたたむ

完全な学習済み SVM 分類器。fitcsvm で学習をさせた ClassificationSVM モデルを指定します。

出力引数

すべて折りたたむ

予測クラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として返されます。

予測クラス ラベルは以下をもちます。

  • 観測されたクラス ラベル (SVMModel.Y) と同じデータ型

  • SVMModel.X の行数と同じ長さ

1 クラス学習の場合、SVMModel.Y で表される 1 つのクラスが label に格納されます。

予測クラススコアまたは事後確率。数値列ベクトルまたは数値行列として返されます。

  • 1 クラス学習の場合、ScoreSVMModel.X と同じ行数をもつ列ベクトルです。要素は対応する観測値の陽性クラスのスコアです。1 クラス学習の事後確率を得ることはできません。

  • 2 クラス学習の場合、ScoreSVMModel.X と同じ行数をもつ 2 列の行列になります。

    • fitPosterior または fitSVMPosterior を使用してスコアから事後確率への最適な変換関数をあてはめた場合、Score にはクラスの事後確率が格納されます。つまり、SVMModel.ScoreTransform の値が none ではない場合、Score の 1 列目と 2 列目にはそれぞれ、対応する観測値の陰性クラス (SVMModel.ClassNames{1}) の事後確率と陽性クラス (SVMModel.ClassNames{2}) の事後確率が格納されます。

    • それ以外の場合、1 列目には対応する観測値の陰性クラス スコアが、2 列目には陽性クラス スコアが格納されます。

SVMModel.KernelParameters.Function'linear' である場合、観測値 x の分類スコアは次のようになります。

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

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

分類スコアを手動で推定するには、はじめに、学習時に適用したすべての変換を予測子データに適用しなければなりません。具体的には、fitcsvm を使用するときに 'Standardize',true を指定した場合は、平均 SVMModel.Mu と標準偏差 SVMModel.Sigma を使用して予測子データを手動で標準化してから、結果を SVMModel.KernelParameters.Scale 内のカーネル スケールで除算しなければなりません。

resubPredictpredict など、すべての SVM 関数で、必要な変換の適用は推定の前に行われます。

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

詳細

すべて折りたたむ

分類スコア

観測値 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 はカーネル スケール、β は近似線形係数のベクトルです。

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

事後確率

"事後確率" はデータが与えられる場合に、観測値が特定のクラスに属している確率です。

SVM の場合、事後確率は、観測値 j がクラス k = {-1,1} に含まれるスコアの関数 P(s) です。

  • 可分クラスの場合、事後確率は次のステップ関数になります。

    P(sj)={0;s<maxyk=1skπ;maxyk=1sksjminyk=+1sk1;sj>minyk=+1sk,

    ここで

    • sj は観測値 j のスコアです。

    • +1 と –1 はそれぞれ陽性と陰性のクラスを表します。

    • π は観測値が陽性のクラスにある事前確率を表しています。

  • 不可分クラスの場合、事後確率は次のシグモイド関数になります。

    P(sj)=11+exp(Asj+B),

    ここで、パラメーター A は勾配パラメーター、B は切片パラメーターです。

事前確率

クラスの "事前確率" は、母集団内でそのクラスの観測値が発生すると考えられる相対頻度です。

ヒント

  • 分類に線形 SVM モデルを使用しており、多数のサポート ベクターがモデルに含まれている場合、予測方式に resubPredict を使用すると低速になる可能性があります。線形 SVM モデルに基づく観測値の分類を効率的に行うには、discardSupportVectors を使用してサポート ベクターをモデル オブジェクトから削除します。

アルゴリズム

  • 既定では、モデルのカーネル関数に関係なく、MATLAB® はスコア関数の双対表現を使用して学習済みの SVM モデルに基づく観測値の分類を行います。具体的には、次のようになります。

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

    この予測方式では、学習済みのサポート ベクターと α 係数が必要です (SVM モデルの SupportVectors および Alpha プロパティを参照)。

  • 既定では、Platt の方法 [1] を使用して最適な事後確率が計算されます。

    1. 10 分割交差検証を実行します。

    2. 交差検証で返されたスコアにシグモイド関数のパラメーターをあてはめます。

    3. あてはめたシグモイド関数に交差検証スコアを入力することにより、事後確率を推定します。

  • ソフトウェアは学習時に、事前確率を SVM 目的関数に組み込みます。

  • SVM の場合、predictresubPredict は、スコアが最大になる (事後確率が最大になる) クラスに観測値を分類します。分類器の学習の前に、平均コスト補正の適用により誤分類コストが考慮されます。つまり、クラスの事前確率のベクトル P、誤分類コスト行列 C、および観測値の重みのベクトル w に対して、次の条件を満たすように新しい観測値の重みのベクトル (W) が定義されます。

    Wj=wjPjk=1KCjk.

参照

[1] Platt, J. “Probabilistic outputs for support vector machines and comparisons to regularized likelihood methods.” Advances in Large Margin Classifiers. MIT Press, 1999, pp. 61–74.

R2014a で導入