Main Content

lime

Local Interpretable Model-agnostic Explanations (LIME)

    説明

    LIMEは、重要な予測子を見つけて解釈可能な単純モデルをあてはめることにより、クエリ点に対する機械学習モデル (分類または回帰) の予測を説明します。

    クエリ点 (queryPoint) と重要な予測子の数 (numImportantPredictors) を指定して、機械学習モデル用の lime オブジェクトを作成できます。ソフトウェアは合成データ セットを生成し、クエリ点周辺の合成データに対する予測を効果的に説明する重要な予測子の解釈可能な単純モデルをあてはめます。単純モデルにできるのは、線形モデル (既定) または決定木モデルです。

    あてはめられた単純モデルを使用して、指定したクエリ点での機械学習モデルの予測を局所的に説明します。関数 plot を使用して、LIME の結果を可視化します。局所的な説明に基づいて、機械学習モデルを信頼するかどうかを判断できます。

    別のクエリ点には、関数 fit を使用して、新しい単純モデルをあてはめます。

    作成

    説明

    results = lime(blackbox) は、予測子データを含む機械学習モデル オブジェクト blackbox を使用して、lime オブジェクトを作成します。関数 lime は、合成予測子データ セットの標本を生成し、その標本の予測を計算します。単純モデルをあてはめるには、関数 fitresults と共に使用します。

    results = lime(blackbox,X) は、X 内の予測子データを使用して lime オブジェクトを作成します。

    results = lime(blackbox,'CustomSyntheticData',customSyntheticData) は、事前生成されたカスタム合成予測子データ セット customSyntheticData を使用して lime オブジェクトを作成します。関数 lime は、customSyntheticData の標本についての予測を計算します。

    results = lime(___,'QueryPoint',queryPoint,'NumImportantPredictors',numImportantPredictors) も、指定された数の重要な予測子を検索し、クエリ点 queryPoint に対して線形単純モデルをあてはめます。前の構文におけるいずれかの入力引数の組み合わせに加えて、queryPoint および numImportantPredictors を指定できます。

    results = lime(___,Name,Value) では、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、'SimpleModelType','tree' は、単純モデルのタイプを決定木モデルとして指定します。

    入力引数

    すべて展開する

    解釈される機械学習モデル。関数ハンドルとして指定するか、完全またはコンパクトな、回帰または分類モデル オブジェクトとして指定します。

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

    X は、blackbox.X または blackbox.Variables に格納されている、blackbox の学習に使用した予測子データと一致しなければなりません。指定する値に応答変数を含めてはなりません。

    • X は、blackbox の学習に使用した予測子変数 (たとえば、trainX) と同じデータ型でなければなりません。X の列を構成する変数の個数と順序は、trainX と同じでなければなりません。

      • 数値行列を使用して blackbox に学習をさせる場合、X は数値行列でなければなりません。

      • table を使用して blackbox に学習をさせる場合、X は table でなければなりません。X 内のすべての予測子変数は、変数名およびデータ型が trainX と同じでなければなりません。

    • lime はスパース行列をサポートしません。

    blackbox がコンパクトな機械学習モデル オブジェクトまたは関数ハンドルである場合、X または customSyntheticData を指定しなければなりません。blackbox が完全な機械学習モデル オブジェクトであり、この引数を指定する場合、limeblackbox の予測子データを使用しません。指定した予測子データのみを使用します。

    データ型: single | double

    事前生成されたカスタム合成予測子データ セット。数値行列またはテーブルとして指定します。

    事前生成されたデータ セットを提供する場合、lime は新しい合成予測子データ セットを生成する代わりに、提供されたデータ セットを使用します。

    customSyntheticData は、blackbox.X または blackbox.Variables に格納されている、blackbox の学習に使用した予測子データと一致しなければなりません。指定する値に応答変数を含めてはなりません。

    • customSyntheticData は、blackbox の学習に使用した予測子変数 (たとえば、trainX) と同じデータ型でなければなりません。customSyntheticData の列を構成する変数の個数と順序は、trainX と同じでなければなりません。

      • 数値行列を使用して blackbox に学習をさせる場合、customSyntheticData は数値行列でなければなりません。

      • テーブルを使用して blackbox に学習をさせる場合、customSyntheticData はテーブルでなければなりません。customSyntheticData 内のすべての予測子変数は、変数名およびデータ型が trainX と同じでなければなりません。

    • lime はスパース行列をサポートしません。

    blackbox がコンパクトな機械学習モデル オブジェクトまたは関数ハンドルである場合、X または customSyntheticData を指定しなければなりません。blackbox が完全な機械学習モデル オブジェクトであり、この引数を指定する場合、limeblackbox の予測子データを使用しません。指定した予測子データのみを使用します。

    データ型: single | double | table

    lime が予測を説明するクエリ点。数値の行ベクトルまたは単一行テーブルとして指定します。queryPoint のデータ型および列の数は、XcustomSyntheticData、または blackbox の予測子データと同じでなければなりません。

    numImportantPredictorsqueryPoint を指定すると、関数 limelime オブジェクトを作成するときに単純モデルをあてはめます。

    例: blackbox.X(1,:) は、完全な機械学習モデル blackbox の予測子データの最初の観測値としてクエリ点を指定します。

    データ型: single | double | table

    単純モデルで使用する重要な予測子の数。正の整数スカラー値として指定します。

    • 'SimpleModelType''linear' である場合、ソフトウェアは、指定された数の重要な予測子を選択し、選択した予測子の線形モデルをあてはめます。

    • 'SimpleModelType''tree' である場合、ソフトウェアは、重要な予測子の数として決定分岐 (枝ノード) の最大数を指定し、あてはめられた決定木が、指定された数を上限に予測子を使用するようにします。

    numImportantPredictorsqueryPoint を指定すると、関数 limelime オブジェクトを作成するときに単純モデルをあてはめます。

    データ型: single | double

    名前と値のペアの引数

    オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

    例: lime(blackbox,'QueryPoint',q,'NumImportantPredictors',n,'SimpleModelType','tree') は、クエリ点を q、単純モデルに使用するための重要な予測子の数を n、単純モデルのタイプを決定木モデルとして指定します。lime は、合成予測子データ セットの標本を生成し、標本の予測を計算し、指定数が最大の予測子を使用してクエリ点に決定木モデルをあてはめます。
    合成予測子データのオプション

    すべて展開する

    データ生成する合成データの局所性。'DataLocality''global' または 'local' で構成されるコンマ区切りのペアとして指定します。

    • 'global' — ソフトウェアが、予測子データ セット全体 (X または blackbox の予測子データ) を使用して分布パラメーターを推定します。ソフトウェアは、推定されたパラメーターを使用して合成予測子データ セットを生成し、任意のクエリ点への単純モデルのあてはめにそのデータ セットを使用します。

    • 'local' —ソフトウェアが、クエリ点の k 最近傍を使用して分布パラメーターを推定します。ここで、k は 'NumNeighbors' 個の値です。ソフトウェアは、指定されたクエリ点に単純モデルをあてはめるたびに、新しい合成予測子データ セットを生成します。

    詳細は、LIMEを参照してください。

    例: 'DataLocality','local'

    データ型: char | string

    クエリ点の近傍の数。'NumNeighbors' と正の整数スカラー値で構成されるコンマ区切りのペアとして指定します。この引数は、'DataLocality''local' である場合のみ有効です。

    指定された値が予測子データ セット (blackboxX または予測子データ) 内の観測値の数より大きい場合、lime はすべての観測値を使用します。

    例: 'NumNeighbors',2000

    データ型: single | double

    合成データ セットのために生成する標本の数。'NumSyntheticData' と正の整数スカラー値で構成されるコンマ区切りのペアとして指定します。この引数は、'DataLocality''local' である場合のみ有効です。

    例: 'NumSyntheticData',2500

    データ型: single | double

    単純モデルのオプション

    すべて展開する

    二乗指数 (またはガウス) カーネル関数のカーネルの幅。'KernelWidth' と数値スカラー値で構成されるコンマ区切りのペアとして指定します。

    関数 lime は、クエリ点と合成予測子データ セット内の標本の間の距離を計算し、その距離を二乗指数カーネル関数を使用して重みに変換します。'KernelWidth' 値を低くすると、lime が使用する重みは、クエリ点に近い標本に重点を置くものになります。詳細については、LIMEを参照してください。

    例: 'KernelWidth',0.5

    データ型: single | double

    単純モデルのタイプ。'SimpleModelType''linear' または 'tree' で構成されるコンマ区切りのペアとして指定します。

    • 'linear' — ソフトウェアは、回帰には fitrlinear を、分類には fitclinear を使用して、線形モデルをあてはめます。

    • 'tree' — ソフトウェアは、回帰には fitrtree を、分類には fitctree を使用して、決定木モデルをあてはめます。

    例: 'SimpleModelType','tree'

    データ型: char | string

    機械学習モデルのオプション

    すべて展開する

    カテゴリカル予測子のリスト。'CategoricalPredictors' と次の表のいずれかの値から構成されるコンマ区切りのペアとして指定します。

    説明
    正の整数のベクトルベクトルの各エントリは、カテゴリカル変数が含まれている予測子データの列に対応するインデックス値です。
    logical ベクトルtrue というエントリは、予測子データの対応する列がカテゴリカル変数であることを意味します。
    文字行列行列の各行は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
    文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。
    'all'すべての予測子がカテゴリカルです。

    • blackbox を関数ハンドルとして指定する場合、lime は予測子データ X または customSyntheticData からカテゴリカル予測子を識別します。予測子データがテーブル内にある場合、lime は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列である場合、lime はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値のペアの引数 'CategoricalPredictors' を使用してそれらを指定します。

    • blackbox を回帰または分類モデル オブジェクトとして指定する場合、lime はモデル オブジェクトの CategoricalPredictors プロパティを使用してカテゴリカル予測子を識別します。

    lime は順序付きのカテゴリカル予測子をサポートしていません。

    例: 'CategoricalPredictors','all'

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

    機械学習モデルのタイプ。'Type''regression または 'classification' で構成されるコンマ区切りのペアとして指定します。

    blackbox を関数ハンドルとして指定するときは、この引数を指定しなければなりません。blackbox を回帰または分類モデル オブジェクトとして指定した場合、lime はモデルのタイプに応じて 'Type' の値を決定します。

    例: 'Type','classification'

    データ型: char | string

    距離計算のオプション

    すべて展開する

    距離計量。'Distance' と文字ベクトル、string スカラー、または関数ハンドルで構成されるコンマ区切りのペアとして指定します。

    • 予測子データに連続変数のみが含まれる場合、lime はこれらの距離計量をサポートします。

      説明
      'euclidean'

      ユークリッド距離。

      'seuclidean'

      標準化されたユークリッド距離。観測値間の各座標差は、標準偏差 S = std(PD,'omitnan') の対応する要素で除算することによりスケーリングされます。ここで、PD は予測子データ、または合成予測子データです。別のスケーリングを指定するには、名前と値のペアの引数 'Scale' を使用します。

      'mahalanobis'

      PD の標本共分散を使用したマハラノビス距離、C = cov(PD,'omitrows')。共分散行列の値を変更するには、名前と値のペアの引数 'Cov' を使用します。

      'cityblock'

      市街地距離。

      'minkowski'

      ミンコフスキー距離。既定の指数は 2 です。別の指数を指定するには、'P' 名前と値のペアの引数を使用します。

      'chebychev'

      チェビシェフ距離 (最大座標差)。

      'cosine'

      1 から、ベクトルとして扱われる点の間の夾角の余弦を引いた値。

      'correlation'

      1 から、値の系列として扱われる点の間の標本相関を引いた値。

      'spearman'

      1 から、観測値間の標本スピアマンの順位相関 (値の系列として扱われる) を引いた値。

      @distfun

      カスタム距離関数のハンドル。距離関数の形式は次のようになります。

      function D2 = distfun(ZI,ZJ)
      % calculation of distance
      ...
      ここで

      • ZI は、単一の観測値が含まれている 1t 列のベクトルです。

      • ZJ は、複数の観測値が含まれている st 列の行列です。distfun は、任意の個数の観測値が含まれている行列 ZJ を受け入れなければなりません。

      • D2s1 列の距離のベクトルであり、D2(k) は観測値 ZIZJ(k,:) の間の距離です。

      データがスパースでない場合、通常は関数ハンドルではなく組み込みの距離計量を使用する方が高速に距離を計算できます。

    • 予測子データに連続変数とカテゴリカル変数の両方が含まれる場合、lime はこれらの距離計量をサポートします。

      説明
      'goodall3'

      異形グドール距離

      'ofd'

      出現頻度距離

    定義については距離計量を参照してください。

    既定値は、予測子データに連続変数のみが含まれる場合は 'euclidean'、予測子データに連続変数とカテゴリカル変数の両方が含まれる場合は 'goodall3' です。

    例: 'Distance','ofd'

    データ型: char | string | function_handle

    マハラノビス距離計量の共分散行列。'Cov' と K 行 K 列の正定値行列で構成されるコンマ区切りのペアとして指定します。K は予測子の数です。

    この引数は、'Distance''mahalanobis' である場合のみ有効です。

    既定の 'Cov' 値は cov(PD,'omitrows') です。ここで、PD は予測子データ、または合成予測子データです。'Cov' 値を指定しなかった場合、ソフトウェアは、予測子データおよび合成予測子データの両方の距離を計算するときに、異なる共分散行列を使用します。

    例: 'Cov',eye(3)

    データ型: single | double

    ミンコフスキー距離計量の指数。'P' と正のスカラー値をコンマで区切って指定します。

    この引数は、'Distance''minkowski' である場合のみ有効です。

    例: 'P',3

    データ型: single | double

    標準化されたユークリッド距離計量のスケール パラメーター値。'Scale' と長さ K の非負の数値ベクトルで構成されるコンマ区切りのペアとして指定します。K は予測子の数です。

    この引数は、'Distance''seuclidean' である場合のみ有効です。

    既定の 'Scale' 値は std(PD,'omitnan') です。ここで、PD は予測子データ、または合成予測子データです。'Scale' 値を指定しなかった場合、ソフトウェアは、予測子データおよび合成予測子データの両方の距離を計算するときに、異なるスケール パラメーターを使用します。

    例: 'Scale',quantile(X,0.75) - quantile(X,0.25)

    データ型: single | double

    プロパティ

    すべて展開する

    指定されるプロパティ

    lime オブジェクトを作成するときに、以下のプロパティを指定できます。

    このプロパティは読み取り専用です。

    解釈される機械学習モデル。回帰または分類モデル オブジェクトとして指定するか、関数ハンドルとして指定します。

    blackbox 引数によってこのプロパティが設定されます。

    このプロパティは読み取り専用です。

    カテゴリカル予測子のインデックス。正の整数のベクトルを指定します。CategoricalPredictors には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    • 関数ハンドルを使用して blackbox を指定した場合、lime は予測子データ X または customSyntheticData からカテゴリカル予測子を識別します。名前と値のペアの引数 'CategoricalPredictors' を指定した場合にこのプロパティが設定されます。

    • blackbox を回帰または分類モデル オブジェクトとして指定した場合、lime はモデル オブジェクトの CategoricalPredictors プロパティを使用してこのプロパティを決定します。

    lime は順序付きのカテゴリカル予測子をサポートしていません。

    'SimpleModelType''linear' の場合 (既定)、lime は識別されたそれぞれのカテゴリカル予測子についてダミー変数を作成します。lime は、指定されたクエリ点のカテゴリを基準グループとして扱い、カテゴリの数より 1 つ少ないダミー変数を作成します。詳細は、基準グループを使用したダミー変数を参照してください。

    データ型: single | double

    このプロパティは読み取り専用です。

    データ生成する合成データの局所性。'global' または 'local' として指定します。

    名前と値のペアの引数 'DataLocality' によってこのプロパティが設定されます。

    このプロパティは読み取り専用です。

    単純モデル (SimpleModel) で使用する重要な予測子の数。正の整数スカラー値として指定します。

    limenumImportantPredictors 引数、または fitnumImportantPredictors 引数によってこのプロパティが設定されます。

    データ型: single | double

    このプロパティは読み取り専用です。

    合成データ セットの標本数。正の整数スカラー値として指定します。

    • customSyntheticData を指定した場合、カスタム合成データ セットの標本数によってこのプロパティが設定されます。

    • そうでない場合、lime の名前と値のペアの引数 'NumSyntheticData'、または fit の名前と値のペアの引数 'NumSyntheticData' によってこのプロパティが設定されます。

    データ型: single | double

    このプロパティは読み取り専用です。

    lime が単純モデル (SimpleModel) を使用して予測子を説明するクエリ点。数値の行ベクトルまたは単一行テーブルとして指定します。

    limequeryPoint 引数、または fitqueryPoint 引数によってこのプロパティが設定されます。

    データ型: single | double | table

    このプロパティは読み取り専用です。

    機械学習モデル (BlackboxModel) のタイプ。'regression または 'classification' として指定します。

    • blackbox を回帰または分類モデル オブジェクトとして指定した場合、lime はモデルのタイプに応じてこのプロパティを決定します。

    • 関数ハンドルを使用して blackbox を指定した場合、名前と値のペアの引数 'Type' によってこのプロパティが設定されます。

    このプロパティは読み取り専用です。

    予測子データ。数値行列またはテーブルとして指定します。

    X の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

    • X 引数を指定した場合にこのプロパティが設定されます。

    • customSyntheticData 引数を指定した場合、このプロパティは空になります。

    • blackbox を完全な機械学習モデル オブジェクトとして指定し、X または customSyntheticData を指定しなかった場合、このプロパティ値が blackbox の学習に使用される予測子データになります。

    データ型: single | double | table

    計算されるプロパティ

    以下のプロパティはソフトウェアによって計算されます。

    このプロパティは読み取り専用です。

    機械学習モデル (BlackboxModel) によって計算されたクエリ点の予測。スカラーとして指定します。

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

    このプロパティは読み取り専用です。

    機械学習モデル (BlackboxModel) によって計算された合成予測子データの予測。ベクトルとして指定します。

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

    このプロパティは読み取り専用です。

    重要な予測子のインデックス。正の整数のベクトルとして指定します。ImportantPredictors には単純モデル (SimpleModel) で使用される予測子の列に対応するインデックス値が格納されます。

    データ型: single | double

    このプロパティは読み取り専用です。

    単純モデル。RegressionLinearRegressionTreeClassificationLinear、または ClassificationTree モデル オブジェクトとして指定します。lime は機械学習モデルのタイプ (Type) および単純モデルのタイプ ('SimpleModelType') に応じて単純モデル オブジェクトのタイプを決定します。

    このプロパティは読み取り専用です。

    単純モデル (SimpleModel) によって計算されたクエリ点の予測。スカラーとして指定します。

    SimpleModelClassificationLinear の場合、SimpleModelFitted の値は 1 または –1 になります。

    • SimpleModelFitted の値が 1 になるのは、単純モデルからの予測が BlackboxFitted (機械学習モデルからの予測) と同じである場合です。

    • SimpleModelFitted の値が –1 になるのは、単純モデルからの予測が BlackboxFitted と異なる場合です。BlackboxFitted の値が A であった場合、関数 plotSimpleModelFitted の値を Not A として表示します。

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

    このプロパティは読み取り専用です。

    合成予測子データ。数値行列または table として指定します。

    • customSyntheticData 入力引数を指定した場合にこのプロパティが設定されます。

    • そうでない場合、lime は、予測子データ X から分布パラメーターを推定して合成予測子データ セットを生成します。

    データ型: single | double | table

    オブジェクト関数

    fitLocal Interpretable Model-agnostic Explanations (LIME) の単純モデルのあてはめ
    plotLocal Interpretable Model-agnostic Explanations (LIME) の結果のプロット

    すべて折りたたむ

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

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

    tbl = readtable('CreditRating_Historical.dat');

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

    head(tbl,3)
    ans=3×8 table
         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' の値を指定した場合、ソフトウェアは合成データ セットの標本を生成し、解釈可能な単純モデルを合成データ セットにあてはめます。lime はランダム性をもつため、実際の結果は以下の表示と異なる可能性があります。再現性を得るために、rng を使用して乱数シードを設定できます。

    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    
    
    
    results = lime(blackbox,'QueryPoint',queryPoint,'NumImportantPredictors',6, ...
        'CategoricalPredictors','Industry','SimpleModelType','tree')
    results = 
      lime with properties:
    
                 BlackboxModel: [1×1 ClassificationECOC]
                  DataLocality: 'global'
         CategoricalPredictors: 6
                          Type: 'classification'
                             X: [3932×6 table]
                    QueryPoint: [1×6 table]
        NumImportantPredictors: 6
              NumSyntheticData: 5000
                 SyntheticData: [5000×6 table]
                        Fitted: {5000×1 cell}
                   SimpleModel: [1×1 ClassificationTree]
           ImportantPredictors: [2 4]
                BlackboxFitted: {'AA'}
             SimpleModelFitted: {'AA'}
    
    

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

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

    プロットには、クエリ点についての 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))

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

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

    回帰モデルの学習を行い、線形単純モデルを使用する 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 モデルの学習を行い、lime オブジェクトを作成します。mdl には予測子データが含まれないため、予測子データ セットを指定します。fitrkernel および lime はランダム性をもつため、実際の結果は以下の表示と異なる可能性があります。再現性を得るために、rng を使用して乱数シードを設定できます。

    mdl = fitrkernel(tblX,tbl.MPG,'CategoricalPredictors',[2 5]);
    results = lime(mdl,tblX,'CategoricalPredictors',[2 5])
    results = 
      lime with properties:
    
                 BlackboxModel: [1×1 RegressionKernel]
                  DataLocality: 'global'
         CategoricalPredictors: [2 5]
                          Type: 'regression'
                             X: [392×6 table]
                    QueryPoint: []
        NumImportantPredictors: []
              NumSyntheticData: 5000
                 SyntheticData: [5000×6 table]
                        Fitted: [5000×1 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';

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

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

    分類モデルの学習を行い、単純な決定木モデルを使用する lime オブジェクトを作成します。複数のクエリ点に複数のモデルをあてはめます。

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

    tbl = readtable('CreditRating_Historical.dat');

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

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

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

    blackbox = fitcecoc(tblX,tbl.Rating,'CategoricalPredictors','Industry')
    blackbox = 
      ClassificationECOC
               PredictorNames: {'WC_TA'  'RE_TA'  'EBIT_TA'  'MVE_BVTD'  'S_TA'  'Industry'}
                 ResponseName: 'Y'
        CategoricalPredictors: 6
                   ClassNames: {'A'  'AA'  'AAA'  'B'  'BB'  'BBB'  'CCC'}
               ScoreTransform: 'none'
               BinaryLearners: {21×1 cell}
                   CodingName: 'onevsone'
    
    
      Properties, Methods
    
    

    blackbox モデルを使用して、lime オブジェクトを作成します。lime はランダム性をもつため、実際の結果は以下の表示と異なる可能性があります。再現性を得るために、rng を使用して乱数シードを設定できます。

    results = lime(blackbox,'CategoricalPredictors','Industry');

    真の信用格付け値がそれぞれ AAA および B となる 2 つのクエリ点を見つけます。

    queryPoint(1,:) = tblX(find(strcmp(tbl.Rating,'AAA'),1),:);
    queryPoint(2,:) = tblX(find(strcmp(tbl.Rating,'B'),1),:)
    queryPoint=2×6 table
        WC_TA    RE_TA    EBIT_TA    MVE_BVTD    S_TA     Industry
        _____    _____    _______    ________    _____    ________
    
        0.121    0.413     0.057      3.647      0.466       12   
        0.019    0.009     0.042      0.257      0.119        1   
    
    

    最初のクエリ点に線形単純モデルをあてはめます。重要な予測子の数を 4 に設定します。

    newresults1 = fit(results,queryPoint(1,:),4);

    最初のクエリ点についての LIME の結果 newresults1 をプロットします。予測子名に含まれるアンダースコアを表示するには、座標軸の TickLabelInterpreter 値を 'none' に変更します。

    f1 = plot(newresults1);
    f1.CurrentAxes.TickLabelInterpreter = 'none';

    最初のクエリ点に線形決定木モデルをあてはめます。

    newresults2 = fit(results,queryPoint(1,:),6,'SimpleModelType','tree');
    f2 = plot(newresults2);
    f2.CurrentAxes.TickLabelInterpreter = 'none';

    newresults1 および newresults2 の単純モデルはどちらも、重要な予測子として MVE_BVTD および RE_TA を見つけます。

    2 番目のクエリ点に線形単純モデルをあてはめ、2 番目のクエリ点についての LIME の結果をプロットします。

    newresults3 = fit(results,queryPoint(2,:),4);
    f3 = plot(newresults3);
    f3.CurrentAxes.TickLabelInterpreter = 'none';

    blackbox モデルからの予測値は B ですが、単純モデルからの予測値は B ではありません。2 つの予測値が同じでなければ、小さい方の 'KernelWidth' 値を指定することができます。ソフトウェアは、クエリ点に近い標本に比重を置く重みを使用して、単純モデルをあてはめます。クエリ点が外れ値であるか、判定境界の近くに位置する場合、小さい 'KernelWidth' 値を指定したとしても、2 つの予測値は異なる可能性があります。そのような場合、他の名前と値のペアの引数を変更することができます。たとえば、クエリ点についてのローカルな合成データ セットを生成 (lime'DataLocality''local' として指定) し、合成データ セット内の標本数 (lime または fit'NumSyntheticData') を増やすことができます。異なる距離計量 (lime または fit'Distance') を使用することもできます。

    小さな 'KernelWidth' 値で線形単純モデルをあてはめます。

    newresults4 = fit(results,queryPoint(2,:),4,'KernelWidth',0.01);
    f4 = plot(newresults4);
    f4.CurrentAxes.TickLabelInterpreter = 'none';

    最初のクエリ点と 2 番目のクエリ点の格付けは、それぞれ AAAB です。newresults1 および newresults4 の単純モデルはどちらも、重要な予測子として MVE_BVTDRE_TA、および WC_TA を見つけます。ただし、これらの係数値は異なります。プロットは、これらの予測子が信用格付けに応じて異なる動作をすることを示しています。

    詳細

    すべて展開する

    アルゴリズム

    すべて展開する

    参照

    [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 USA: ACM, 2016.

    [2] Świrszcz, Grzegorz, Naoki Abe, and Aurélie C. Lozano. "Grouped Orthogonal Matching Pursuit for Variable Selection and Prediction." Advances in Neural Information Processing Systems (2009): 1150–58.

    [3] Lozano, Aurélie C., Grzegorz Świrszcz, and Naoki Abe. "Group Orthogonal Matching Pursuit for Logistic Regression." Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics (2011): 452–60.

    R2020b で導入