Main Content

plot

Local Interpretable Model-agnostic Explanations (LIME) の結果のプロット

R2020b 以降

    説明

    f = plot(results) は、lime オブジェクト results の LIME の結果を可視化します。関数は Figure オブジェクト f を返します。f を使用して、作成後の Figure の Figure のプロパティ をクエリまたは変更します。

    • Figure には、単純な線形モデルの係数値または単純な決定木モデルの予測子の重要度の値を示す横棒グラフが含まれています。results (resultsSimpleModel プロパティ) の単純なモデルに応じて決まります。

    • Figure は、機械学習モデルと単純なモデルをそれぞれ使用して計算されたクエリ点の 2 つの予測を表示します。これらの値は、resultsBlackboxFitted プロパティと SimpleModelFitted プロパティに対応します。

    すべて折りたたむ

    分類モデルの学習を行い、単純な決定木モデルを使用する lime オブジェクトを作成します。lime オブジェクトを作成するときに、クエリ点と重要な予測子の数を指定して、ソフトウェアが合成データ セットの標本を生成し、重要な予測子を使って単純モデルをクエリ点に当てはめるようにします。次に、オブジェクト関数 plot を使用して、予測子の推定重要度を単純モデルに表示します。

    CreditRating_Historical データセットを読み込みます。データ セットには、顧客 ID、顧客の財務比率、業種ラベル、および信用格付けが格納されています。

    tbl = readtable('CreditRating_Historical.dat');

    テーブルの最初の 3 行を表示します。

    head(tbl,3)
         ID      WC_TA    RE_TA    EBIT_TA    MVE_BVTD    S_TA     Industry    Rating
        _____    _____    _____    _______    ________    _____    ________    ______
    
        62394    0.013    0.104     0.036      0.447      0.142       3        {'BB'}
        48608    0.232    0.335     0.062      1.969      0.281       8        {'A' }
        42444    0.311    0.367     0.074      1.935      0.366       1        {'A' }
    

    tbl から顧客 ID と信用格付けの列を削除して、予測子変数の table を作成します。

    tblX = removevars(tbl,["ID","Rating"]);

    関数fitcecocを使用して、信用格付けの blackbox モデルに学習させます。

    blackbox = fitcecoc(tblX,tbl.Rating,'CategoricalPredictors','Industry');

    単純な決定木モデルを使用して最後の観測値の予測を説明する lime オブジェクトを作成します。最大 6 つの重要な予測子を見つけるため、'NumImportantPredictors' を 6 に指定します。lime オブジェクトを作成するときに 'QueryPoint''NumImportantPredictors' の値を指定した場合、ソフトウェアは合成データ セットの標本を生成し、解釈可能な単純モデルを合成データ セットに当てはめます。

    queryPoint = tblX(end,:)
    queryPoint=1×6 table
        WC_TA    RE_TA    EBIT_TA    MVE_BVTD    S_TA    Industry
        _____    _____    _______    ________    ____    ________
    
        0.239    0.463     0.065      2.924      0.34       2    
    
    
    rng('default') % For reproducibility
    results = lime(blackbox,'QueryPoint',queryPoint,'NumImportantPredictors',6, ...
        'SimpleModelType','tree')
    results = 
      lime with properties:
    
                 BlackboxModel: [1x1 ClassificationECOC]
                  DataLocality: 'global'
         CategoricalPredictors: 6
                          Type: 'classification'
                             X: [3932x6 table]
                    QueryPoint: [1x6 table]
        NumImportantPredictors: 6
              NumSyntheticData: 5000
                 SyntheticData: [5000x6 table]
                        Fitted: {5000x1 cell}
                   SimpleModel: [1x1 ClassificationTree]
           ImportantPredictors: [2x1 double]
                BlackboxFitted: {'AA'}
             SimpleModelFitted: {'AA'}
    
    

    オブジェクト関数 plot を使用して、lime オブジェクト results をプロットします。予測子名に含まれるアンダースコアを表示するには、座標軸の TickLabelInterpreter 値を 'none' に変更します。

    f = plot(results);
    f.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes object. The axes object with title LIME with Decision Tree Model, xlabel Predictor Importance, ylabel Predictor contains an object of type bar.

    プロットには、クエリ点についての 2 つの予測値が示されています。この予測値は、resultsBlackboxFittedプロパティとSimpleModelFittedプロパティに対応します。

    横棒グラフは、予測子の重要度の並べ替えられた値を示しています。lime はクエリ点の重要な予測子として財務比率変数 MVE_BVTD および RE_TA を求めます。

    バーの長さは、データ ヒントまたはBar のプロパティを使用して読み取ることができます。たとえば、関数 findobj を使用して Bar オブジェクトを検索し、関数 text を使用して、バーの端にラベルを追加できます。

    b = findobj(f,'Type','bar');
    text(b.YEndPoints+0.001,b.XEndPoints,string(b.YData))

    Figure contains an axes object. The axes object with title LIME with Decision Tree Model, xlabel Predictor Importance, ylabel Predictor contains 3 objects of type bar, text.

    あるいは、予測子変数名をもつ table に係数値を表示することもできます。

    imp = b.YData;
    flipud(array2table(imp', ...
        'RowNames',f.CurrentAxes.YTickLabel,'VariableNames',{'Predictor Importance'}))
    ans=2×1 table
                    Predictor Importance
                    ____________________
    
        MVE_BVTD          0.088412      
        RE_TA            0.0018061      
    
    

    回帰モデルの学習を行い、線形単純モデルを使用する lime オブジェクトを作成します。lime オブジェクトを作成するときに、クエリ点と重要な予測子の数を指定しなかった場合、ソフトウェアは合成データ セットの標本を生成しますが、単純モデルの当てはめは行いません。オブジェクト関数 fit を使用して、クエリ点に単純モデルを当てはめます。次に、オブジェクト関数 plot を使用して、当てはめた線形単純モデルの係数を表示します。

    carbig データセットを読み込みます。このデータセットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。

    load carbig

    AccelerationCylinders などの予測子変数と応答変数 MPG が格納された table を作成します。

    tbl = table(Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,MPG);

    学習セットの欠損値を削除すると、メモリ消費量を減らして関数 fitrkernel の学習速度を向上させることができます。tbl の欠損値を削除します。

    tbl = rmmissing(tbl);

    tbl から応答変数を削除して、予測子変数のテーブルを作成します。

    tblX = removevars(tbl,'MPG');

    関数fitrkernelを使用して MPG の blackbox モデルの学習を行います。

    rng('default') % For reproducibility
    mdl = fitrkernel(tblX,tbl.MPG,'CategoricalPredictors',[2 5]);

    lime オブジェクトを作成します。mdl には予測子データが含まれないため、予測子データ セットを指定します。

    results = lime(mdl,tblX)
    results = 
      lime with properties:
    
                 BlackboxModel: [1x1 RegressionKernel]
                  DataLocality: 'global'
         CategoricalPredictors: [2 5]
                          Type: 'regression'
                             X: [392x6 table]
                    QueryPoint: []
        NumImportantPredictors: []
              NumSyntheticData: 5000
                 SyntheticData: [5000x6 table]
                        Fitted: [5000x1 double]
                   SimpleModel: []
           ImportantPredictors: []
                BlackboxFitted: []
             SimpleModelFitted: []
    
    

    results には、生成された合成データ セットが含まれます。SimpleModel プロパティは空 ([]) です。

    tblX の最初の観測値に線形単純モデルを当てはめます。検出する重要な予測子の数を 3 に指定します。

    queryPoint = tblX(1,:)
    queryPoint=1×6 table
        Acceleration    Cylinders    Displacement    Horsepower    Model_Year    Weight
        ____________    _________    ____________    __________    __________    ______
    
             12             8            307            130            70         3504 
    
    
    results = fit(results,queryPoint,3);

    オブジェクト関数 plot を使用して、lime オブジェクト results をプロットします。予測子名に含まれるアンダースコアを表示するには、座標軸の TickLabelInterpreter 値を 'none' に変更します。

    f = plot(results);
    f.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes object. The axes object with title LIME with Linear Model, xlabel Coefficient, ylabel Predictor contains an object of type bar.

    プロットには、クエリ点についての 2 つの予測値が示されています。この予測値は、resultsBlackboxFittedプロパティとSimpleModelFittedプロパティに対応します。

    横棒グラフは、絶対値で並べ替えられた、単純モデルの係数値を示します。LIME は、クエリ点の重要な予測子として、HorsepowerModel_Year、および Cylinders を見つけます。

    Model_Year および Cylinders は複数のカテゴリをもつカテゴリカル予測子です。線形単純モデルの場合、各カテゴリカル予測子について、カテゴリの数よりも 1 つ少ないダミー変数が作成されます。棒グラフには最も重要なダミー変数のみが表示されます。他のダミー変数の係数は resultsSimpleModel プロパティを使用して確認できます。すべてのカテゴリカル ダミー変数を含む並べ替えられた係数の値を表示します。

    [~,I] = sort(abs(results.SimpleModel.Beta),'descend');
    table(results.SimpleModel.ExpandedPredictorNames(I)',results.SimpleModel.Beta(I), ...
        'VariableNames',{'Expanded Predictor Name','Coefficient'})
    ans=17×2 table
         Expanded Predictor Name      Coefficient
        __________________________    ___________
    
        {'Horsepower'            }    -3.4485e-05
        {'Model_Year (74 vs. 70)'}    -6.1279e-07
        {'Model_Year (80 vs. 70)'}     -4.015e-07
        {'Model_Year (81 vs. 70)'}     3.4176e-07
        {'Model_Year (82 vs. 70)'}    -2.2483e-07
        {'Cylinders (6 vs. 8)'   }    -1.9024e-07
        {'Model_Year (76 vs. 70)'}     1.8136e-07
        {'Cylinders (5 vs. 8)'   }     1.7461e-07
        {'Model_Year (71 vs. 70)'}      1.558e-07
        {'Model_Year (75 vs. 70)'}     1.5456e-07
        {'Model_Year (77 vs. 70)'}      1.521e-07
        {'Model_Year (78 vs. 70)'}     1.4272e-07
        {'Model_Year (72 vs. 70)'}     6.7001e-08
        {'Model_Year (73 vs. 70)'}     4.7214e-08
        {'Cylinders (4 vs. 8)'   }     4.5118e-08
        {'Model_Year (79 vs. 70)'}    -2.2598e-08
          ⋮
    
    

    入力引数

    すべて折りたたむ

    LIME の結果。lime オブジェクトとして指定します。resultsSimpleModel プロパティは、当てはめ済みの単純なモデルを含んでいなければなりません。

    参照

    [1] Ribeiro, Marco Tulio, S. Singh, and C. Guestrin. "'Why Should I Trust You?': Explaining the Predictions of Any Classifier." In Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 1135–44. San Francisco, California: ACM, 2016.

    バージョン履歴

    R2020b で導入