Main Content

edge

一般化加法モデル (GAM) の分類エッジ

R2021a 以降

    説明

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

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

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

    e = edge(___,Name,Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、観測値の重みや、計算に交互作用項を含めるかどうかを指定できます。

    すべて折りたたむ

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

    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.

    一般化加法モデルのテスト標本加重エッジ (マージンの加重平均) を推定します。

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

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

    一部の測定値の品質は、旧式のテクノロジーが測定に使用されたために低いと仮定します。この効果をシミュレートするために、20 個の測定値で構成されるランダムなサブセットにノイズを追加します。

    rng('default') % For reproducibility
    idx2 = randperm(size(X,1),20);
    X(idx2,:) = X(idx2,:) + 2*randn(20,size(X,2));

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

    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 モデル オブジェクトです。

    テスト標本エッジを推定します。

    e = edge(Mdl,XTest,YTest)
    e = 0.8000
    

    平均マージンは約 0.80 です。

    ノイズを含む測定値の影響を減らす方法の 1 つは、他の観測値よりも低く重み付けすることです。品質が高い観測値には、他の観測値の 2 倍の重みを与える重みベクトルを定義します。

    n = size(X,1);
    weights = ones(size(X,1),1);
    weights(idx2) = 0.5;
    weightsTrain = weights(trainInds);
    weightsTest = weights(testInds);

    予測子 XTrain、クラス ラベル YTrain、および重み weightsTrain を使用して、GAM に学習させます。

    Mdl_W = fitcgam(XTrain,YTrain,'Weights',weightsTrain,...
        'ClassNames',{'versicolor','virginica'});

    加重スキームを使用して、テスト標本の加重エッジを推定します。

    e_W = edge(Mdl_W,XTest,YTest,'Weights',weightsTest)
    e_W = 0.8770
    

    加重平均マージンは約 0.88 です。この結果は、平均すると、加重分類器ラベルのラベルの方が信頼度が高いことを示します。

    テスト標本マージンおよびエッジを調べて、線形項が含まれる 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 に学習させた場合、edge の入力データも table (Tbl) でなければなりません。

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

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

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

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

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

    table に格納されている標本データを使用して Mdl に学習をさせた場合、edge の入力データも 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 に学習させた場合、edge の入力データも行列でなければなりません。

    データ型: single | double

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: 'IncludeInteractions',false,'Weights',w は、モデルから交互作用項を除外し、観測値の重み w を使用するように指定します。

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

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

    例: 'IncludeInteractions',false

    データ型: logical

    観測値の重み。スカラー値のベクトルまたは Tbl 内の変数の名前として指定します。X または Tbl の各行に含まれている観測値には、Weights の対応する値で重みが付けられます。Weights のサイズは、X または Tbl の行数と同じでなければなりません。

    入力データをテーブル Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル WTbl.W に格納されている場合、'W' として指定します。

    edge は、合計がクラスの事前確率の値になるように各クラスの重みを正規化します。

    データ型: single | double | char | string

    詳細

    すべて折りたたむ

    分類エッジ

    "分類エッジ" は、分類マージンの加重平均です。

    特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。

    分類マージン

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

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

    バージョン履歴

    R2021a で導入