Main Content

margin

一般化加法モデル (GAM) の分類マージン

R2021a 以降

    説明

    m = margin(Mdl,Tbl,ResponseVarName) は、Tbl 内の予測子データと Tbl.ResponseVarName 内の真のクラス ラベルを使用して、一般化加法モデル Mdl分類マージン (m) を返します。

    m は、n 行 1 列の数値列ベクトルとして返されます。n は予測子データ内の観測値の個数です。

    m = margin(Mdl,Tbl,Y) は、table Tbl 内の予測子データと Y 内の真のクラス ラベルを使用します。

    m = margin(Mdl,X,Y) は、行列 X 内の予測子データと Y 内の真のクラス ラベルを使用します。

    m = margin(___,'IncludeInteractions',includeInteractions) は、計算に交互作用項を含めるかどうかを指定します。前の構文におけるいずれかの入力引数の組み合わせに加えて、includeInteractions を指定できます。

    すべて折りたたむ

    一般化加法モデルのテスト標本分類マージンおよびエッジを推定します。テスト標本マージンは観測された真のクラスのスコアから偽のクラスのスコアを差し引いたもので、テスト標本エッジはマージンの平均です。

    fisheriris データ セットを読み込みます。versicolor と virginica のアヤメについての 2 つのがく片と 2 つの花弁の測定値が含まれる数値行列 X を作成します。対応するアヤメの種類が含まれる文字ベクトルの cell 配列 Y を作成します。

    load fisheriris
    inds = strcmp(species,'versicolor') | strcmp(species,'virginica');
    X = meas(inds,:);
    Y = species(inds,:);

    Y のクラス情報を使用して、観測値を階層的に学習セットとテスト セットに無作為に分割します。テスト用の 30% のホールドアウト標本を指定します。

    rng('default') % For reproducibility
    cv = cvpartition(Y,'HoldOut',0.30);

    学習インデックスとテスト インデックスを抽出します。

    trainInds = training(cv);
    testInds = test(cv);

    学習データ セットとテスト データ セットを指定します。

    XTrain = X(trainInds,:);
    YTrain = Y(trainInds);
    XTest = X(testInds,:);
    YTest = Y(testInds);

    予測子 XTrain とクラス ラベル YTrain を使用して、GAM に学習させます。クラス名を指定することが推奨されます。

    Mdl = fitcgam(XTrain,YTrain,'ClassNames',{'versicolor','virginica'});

    MdlClassificationGAM モデル オブジェクトです。

    テスト標本分類マージンおよびエッジを推定します。

    m = margin(Mdl,XTest,YTest);
    e = edge(Mdl,XTest,YTest)
    e = 
    0.8000
    

    テスト標本分類マージンのヒストグラムを表示します。

    histogram(m,length(unique(m)),'Normalization','probability')
    xlabel('Test Sample Margins')
    ylabel('Probability')
    title('Probability Distribution of the Test Sample Margins')

    Figure contains an axes object. The axes object with title Probability Distribution of the Test Sample Margins, xlabel Test Sample Margins, ylabel Probability contains an object of type histogram.

    テスト標本マージンおよびエッジを調べて、線形項が含まれる GAM を線形項と交互作用項の両方が含まれる GAM と比較します。この比較のみに基づくと、マージンおよびエッジが最大である分類器が最良のモデルです。

    ionosphere データ セットを読み込みます。このデータ セットには、レーダー反射についての 34 個の予測子と、不良 ('b') または良好 ('g') という 351 個の二項反応が含まれています。

    load ionosphere

    Y のクラス情報を使用して、観測値を階層的に学習セットとテスト セットに無作為に分割します。テスト用の 30% のホールドアウト標本を指定します。

    rng('default') % For reproducibility
    cv = cvpartition(Y,'Holdout',0.30);

    学習インデックスとテスト インデックスを抽出します。

    trainInds = training(cv);
    testInds = test(cv);

    学習データ セットとテスト データ セットを指定します。

    XTrain = X(trainInds,:);
    YTrain = Y(trainInds);
    XTest = X(testInds,:);
    YTest = Y(testInds);

    予測子の線形項と交互作用項の両方が格納されている GAM に学習させます。p 値が 0.05 以下である利用可能な交互作用項をすべて含めるように指定します。

    Mdl = fitcgam(XTrain,YTrain,'Interactions','all','MaxPValue',0.05)
    Mdl = 
      ClassificationGAM
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: {'b'  'g'}
               ScoreTransform: 'logit'
                    Intercept: 3.0398
                 Interactions: [561x2 double]
              NumObservations: 246
    
    
    

    MdlClassificationGAM モデル オブジェクトです。Mdl には利用可能なすべての交互作用項が含まれています。

    Mdl のテスト標本マージンおよびエッジを推定します。

    M = margin(Mdl,XTest,YTest);
    E = edge(Mdl,XTest,YTest)
    E = 
    0.7848
    

    交互作用項を含めずに Mdl のテスト標本マージンおよびエッジを推定します。

    M_nointeractions = margin(Mdl,XTest,YTest,'IncludeInteractions',false);
    E_nointeractions = edge(Mdl,XTest,YTest,'IncludeInteractions',false)
    E_nointeractions = 
    0.7871
    

    箱ひげ図を使用してマージンの分布を表示します。

    boxplot([M M_nointeractions],'Labels',{'Linear and Interaction Terms','Linear Terms Only'})
    title('Box Plots of Test Sample Margins')

    Figure contains an axes object. The axes object with title Box Plots of Test Sample Margins contains 14 objects of type line. One or more of the lines displays its values using only markers

    マージン MM_nointeractions は同様の分布を示しますが、線形項のみを含む分類器のテスト標本エッジの方が大きくなります。分類器のマージンは比較的大きいことが推奨されます。

    入力引数

    すべて折りたたむ

    一般化加法モデル。ClassificationGAM または CompactClassificationGAM モデル オブジェクトとして指定します。

    • table に格納されている標本データを使用して Mdl に学習させた場合、margin の入力データも table (Tbl) でなければなりません。

    • 行列に格納されている標本データを使用して Mdl に学習させた場合、margin の入力データも行列 (X) でなければなりません。

    標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    Tbl には、Mdl に学習させるために使用したすべての予測子が含まれていなければなりません。必要に応じて、Tbl に応答変数用の列と観測値の重み用の列を含めることができます。

    • 応答変数のデータ型は Mdl.Y と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。Tbl に含まれる応答変数が Mdl の学習に使用した応答変数と同じ名前である場合、ResponseVarName を指定する必要はありません。

    • 重みの値は数値ベクトルでなければなりません。Tbl 内の観測値の重みは 'Weights' を使用して指定しなければなりません。

    table に格納されている標本データを使用して Mdl に学習をさせた場合、margin の入力データも table に含まれていなければなりません。

    データ型: table

    応答変数名。Tbl 内の応答変数の名前を含む文字ベクトルまたは string スカラーとして指定します。たとえば、応答変数 YTbl.Y に格納されている場合、'Y' として指定します。

    データ型: char | string

    クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y の各行は、X または Tbl の対応する行の分類を表します。

    Y のデータ型は Mdl.Y と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

    データ型: single | double | categorical | logical | char | string | cell

    予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。

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

    データ型: single | double

    モデルの交互作用項を含むというフラグ。true または false として指定します。

    モデルに交互作用項が含まれる場合、includeInteractions の既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

    例: includeInteractions=false

    データ型: logical

    詳細

    すべて折りたたむ

    分類マージン

    バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。

    各マージンのスケールが同じである場合 (つまり、スコア値が同じスコア変換に基づく場合)、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。

    バージョン履歴

    R2021a で導入