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 の学習に使用した予測子データと一致しなければなりません。指定する値に応答変数を含めてはなりません。

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

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

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

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

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

    データ型: single | double | table

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

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

    customSyntheticData は、blackbox.X に格納されている、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 オブジェクトを作成するときに単純モデルを当てはめます。

    queryPoint に欠損値が含まれていてはなりません。

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

    データ型: single | double | table

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

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

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

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

    データ型: single | double

    名前と値の引数

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

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

    例: 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' と正の整数スカラー値で構成されるコンマ区切りのペアとして指定します。

    例: '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' と次の表のいずれかの値から構成されるコンマ区切りのペアとして指定します。

    説明
    正の整数のベクトル

    ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。

    blackbox が入力変数のサブセットを予測子として使用する場合、ソフトウェアはサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重み変数、および関数で使用されないその他の変数は、'CategoricalPredictors' 値でカウントされません。

    logical ベクトル

    true というエントリは、対応する予測子がカテゴリカルであることを意味します。ベクトルの長さは p です。

    文字行列行列の各行は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
    文字ベクトルの cell 配列または string 配列配列の各要素は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。
    'all'すべての予測子がカテゴリカルです。

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

    • 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 には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p です。p はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    • 関数ハンドルを使用して 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 の学習に使用される予測子データになります。

    lime は欠損値を含む行は使用せず、それらの行は X に格納されません。

    データ型: 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' の値を指定した場合、ソフトウェアは合成データ セットの標本を生成し、解釈可能な単純モデルを合成データ セットに当てはめます。

    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 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 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 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 table
          Exteded 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
          ⋮
    
    

    回帰モデルの学習を行い、モデルの関数 predict の関数ハンドルを使用する lime オブジェクトを作成します。オブジェクト関数 fit を使用して、指定したクエリ点に単純モデルを当てはめます。次に、オブジェクト関数 plot を使用して、当てはめた線形単純モデルの係数を表示します。

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

    load carbig

    予測子変数 AccelerationCylinders などを格納する table を作成します。

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

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

    rng('default') % For reproducibility
    Mdl = TreeBagger(100,tbl,MPG,'Method','regression','CategoricalPredictors',[2 5]);

    limeTreeBagger オブジェクトを直接はサポートしないため、lime の最初の入力引数 (blackbox モデル) を TreeBagger オブジェクトとして指定することはできません。代わりに、関数 predict の関数ハンドルを使用できます。関数 predict のオプションも関数の名前と値の引数を使用して指定できます。

    TreeBagger オブジェクト Mdl の関数 predict の関数ハンドルを作成します。使用する木のインデックスの配列を 1:50 と指定します。

    myPredict = @(tbl) predict(Mdl,tbl,'Trees',1:50);

    関数ハンドル myPredict を使用して lime オブジェクトを作成します。blackbox モデルを関数ハンドルとして指定する場合、予測子データを提供し、名前と値の引数 'Type' を指定しなければなりません。tbl には、double データ型のカテゴリカル予測子 (Cylinder および Model_Year) が含まれています。既定では、limedouble データ型の変数をカテゴリカル予測子として扱いません。2 番目 (Cylinder) と 5 番目 (Model_Year) の変数をカテゴリカル予測子として指定します。

    results = lime(myPredict,tbl,'Type','regression','CategoricalPredictors',[2 5]);

    tbl の最初の観測値に線形単純モデルを当てはめます。予測子名に含まれるアンダースコアを表示するには、座標軸の TickLabelInterpreter 値を 'none' に変更します。

    results = fit(results,tbl(1,:),4);
    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.

    lime は、重要な予測子として HorsepowerDisplacementCylinders、および Model_Year を見つけます。

    詳細

    すべて展開する

    アルゴリズム

    すべて展開する

    参照

    [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.

    [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 で導入