Main Content

plot

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

    説明

    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)
    ans=3×8 tableID 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 tableWC_TA RE_TA EBIT_TA MVE_BVTD S_TA行业_____ _____ _______ ________ ____ ________ 0.239 0.463 0.065 2.924 0.34 2
    rng('default')% For reproducibilityresults = lime(blackbox,'QueryPoint',queryPoint,'NumImportantPredictors',6,...'SimpleModelType','tree')
    结果=石灰与属性:BlackboxModel: [1 x1 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 contains an object of type bar.

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

    横棒グラフは、予測子の重要度の並べ替えられた値を示しています。limeはクエリ点の重要な予測子として財務比率変数EBIT_TAおよびWC_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 contains 3 objects of type bar, text.

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

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

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

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

    loadcarbig

    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 reproducibilitymdl = fitrkernel(tblX,tbl.MPG,'CategoricalPredictors',[2 5]);

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

    results = lime(mdl,tblX)
    结果=石灰与属性:BlackboxModel: [1 x1 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 tableAcceleration 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 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',{'Exteded Predictor Name','Coefficient'})
    ans=17×2 tableExteded 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 で導入