lime
Local Interpretable Model-agnostic Explanations (LIME)
説明
LIMEは、重要な予測子を見つけて解釈可能な単純モデルを当てはめることにより、クエリ点に対する機械学習モデル (分類または回帰) の予測を説明します。
クエリ点 (queryPoint) と重要な予測子の数 (numImportantPredictors) を指定して、機械学習モデル用の lime オブジェクトを作成できます。ソフトウェアは合成データ セットを生成し、クエリ点周辺の合成データに対する予測を効果的に説明する重要な予測子の解釈可能な単純モデルを当てはめます。単純モデルにできるのは、線形モデル (既定) または決定木モデルです。
当てはめられた単純モデルを使用して、指定したクエリ点での機械学習モデルの予測をローカルに説明します。関数 plot を使用して、LIME の結果を可視化します。ローカルな説明に基づいて、機械学習モデルを信頼するかどうかを判断できます。
別のクエリ点には、関数 fit を使用して、新しい単純モデルを当てはめます。
作成
構文
説明
は、事前生成されたカスタム合成予測子データ セット results = lime(blackbox,'CustomSyntheticData',customSyntheticData)customSyntheticData を使用して lime オブジェクトを作成します。関数 lime は、customSyntheticData の標本についての予測を計算します。
も、指定された数の重要な予測子を検索し、クエリ点 results = lime(___,'QueryPoint',queryPoint,'NumImportantPredictors',numImportantPredictors)queryPoint に対して線形単純モデルを当てはめます。前の構文におけるいずれかの入力引数の組み合わせに加えて、queryPoint および numImportantPredictors を指定できます。
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、results = lime(___,Name,Value)'SimpleModelType','tree' は、単純モデルのタイプを決定木モデルとして指定します。
入力引数
解釈される機械学習モデル。完全またはコンパクトな回帰または分類モデル オブジェクトとして指定するか、関数ハンドルとして指定します。
完全またはコンパクトなモデル オブジェクト — オブジェクト関数
predictをもつ、完全またはコンパクトな、回帰または分類モデル オブジェクトを指定できます。ソフトウェアは、関数predictを使用して、クエリ点についての予測と合成予測子データ セットを計算します。予測子データを含まないモデル オブジェクト (コンパクトなモデルなど) を指定する場合、
XまたはcustomSyntheticDataを使用して予測子データを提供しなければなりません。limeは、スパース行列で学習させたモデル オブジェクトをサポートしません。モデルに学習させる場合は、行が各観測値に対応する完全な数値行列または table を予測子データに使用してください。limeは、複数の応答変数で学習させたモデル オブジェクトをサポートしません。
回帰モデル オブジェクト
サポートされているモデル 完全またはコンパクトな回帰モデル オブジェクト 回帰モデルのアンサンブル RegressionEnsemble,RegressionBaggedEnsemble,CompactRegressionEnsembleランダムな特徴量拡張を使用したガウス カーネル回帰モデル RegressionKernelガウス過程回帰 RegressionGP,CompactRegressionGP一般化加法モデル RegressionGAM,CompactRegressionGAM高次元データの線形回帰 RegressionLinearニューラル ネットワーク回帰モデル RegressionNeuralNetwork,CompactRegressionNeuralNetwork回帰木 RegressionTree,CompactRegressionTreeサポート ベクター マシン回帰 RegressionSVM,CompactRegressionSVM分類モデル オブジェクト
サポートされているモデル 完全またはコンパクトな分類モデル オブジェクト マルチクラス分類用の二分決定木 ClassificationTree,CompactClassificationTree判別分析分類器 ClassificationDiscriminant,CompactClassificationDiscriminant分類用のアンサンブル学習器 ClassificationEnsemble,CompactClassificationEnsemble,ClassificationBaggedEnsembleランダムな特徴量拡張を使用したガウス カーネル分類モデル ClassificationKernel一般化加法モデル ClassificationGAM,CompactClassificationGAMk 最近傍モデル ClassificationKNN線形分類モデル ClassificationLinearサポート ベクター マシンまたはその他の分類器用のマルチクラス モデル ClassificationECOC,CompactClassificationECOC単純ベイズ モデル ClassificationNaiveBayes,CompactClassificationNaiveBayesニューラル ネットワーク分類器 ClassificationNeuralNetwork,CompactClassificationNeuralNetworkバイナリ分類用のサポート ベクター マシン ClassificationSVM,CompactClassificationSVM関数ハンドル — 予測子データを受け入れ、予測子データの各観測値についての予測が格納された列ベクトルを返す関数ハンドルを指定できます。予測は、回帰の場合は予測された応答、分類の場合は分類されたラベルになります。
XまたはcustomSyntheticDataを使用して予測子データを提供し、名前と値の引数'Type'を指定しなければなりません。
予測子データ。数値行列または table として指定します。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 が完全な機械学習モデル オブジェクトである場合にこの引数を指定すると、lime で blackbox の予測子データは使用されません。指定した予測子データのみが使用されます。
データ型: single | double | table
事前生成されたカスタム合成予測子データ セット。数値行列またはテーブルとして指定します。
事前生成されたデータ セットを提供する場合、lime は新しい合成予測子データ セットを生成する代わりに、提供されたデータ セットを使用します。
customSyntheticData は、blackbox.X に格納されている、blackbox の学習に使用した予測子データと一致しなければなりません。指定する値に応答変数を含めてはなりません。
customSyntheticDataは、blackboxの学習に使用した予測子変数 (たとえば、trainX) と同じデータ型でなければなりません。customSyntheticDataの列を構成する変数の個数と順序は、trainXと同じでなければなりません。数値行列を使用して
blackboxに学習をさせる場合、customSyntheticDataは数値行列でなければなりません。テーブルを使用して
blackboxに学習をさせる場合、customSyntheticDataはテーブルでなければなりません。customSyntheticData内のすべての予測子変数は、変数名およびデータ型がtrainXと同じでなければなりません。
limeはスパース行列をサポートしません。
blackbox が予測子データを含まないモデル オブジェクトまたは関数ハンドルである場合、X または customSyntheticData を指定しなければなりません。blackbox が完全な機械学習モデル オブジェクトであり、この引数を指定する場合、lime は blackbox の予測子データを使用しません。指定した予測子データのみを使用します。
データ型: single | double | table
lime が予測を説明するクエリ点。数値の行ベクトルまたは単一行テーブルとして指定します。queryPoint のデータ型および列の数は、X、customSyntheticData、または blackbox の予測子データと同じでなければなりません。
numImportantPredictors と queryPoint を指定すると、関数 lime は lime オブジェクトを作成するときに単純モデルを当てはめます。
queryPoint に欠損値が含まれていてはなりません。
例: blackbox.X(1,:) は、完全な機械学習モデル blackbox の予測子データの最初の観測値としてクエリ点を指定します。
データ型: single | double | table
単純モデルで使用する重要な予測子の数。正の整数スカラー値として指定します。
'SimpleModelType'が'linear'(既定) である場合、ソフトウェアは、指定された数の重要な予測子を選択し、選択した予測子の線形モデルを当てはめます。線形モデルを当てはめる際に、重要ではない予測子は使用されないことに注意してください。'SimpleModelType'が'tree'である場合、ソフトウェアは、重要な予測子の数として決定分岐 (枝ノード) の最大数を指定し、当てはめられた決定木が、指定された数を上限に予測子を使用するようにします。
numImportantPredictors と queryPoint を指定すると、関数 lime は lime オブジェクトを作成するときに単純モデルを当てはめます。
データ型: 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' である場合のみ有効です。
指定された値が予測子データ セット (blackbox の X または予測子データ) 内の観測値の数より大きい場合、lime はすべての観測値を使用します。
例: 'NumNeighbors',2000
データ型: single | double
合成データ セットのために生成する標本の数。'NumSyntheticData' と正の整数スカラー値で構成されるコンマ区切りのペアとして指定します。
例: 'NumSyntheticData',2500
データ型: single | double
単純モデルのオプション
R2023b 以降
線形単純モデルの線形係数とバイアス項 (切片) の相対許容誤差。非負のスカラーとして指定します。
この引数は、SimpleModelType の値が "linear" の場合のみ有効です。
であるとします。これは、当てはめのステップ t における係数とバイアス項のベクトルです。 で線形単純モデルの当てはめプロセスが終了します。
例: "BetaTolerance",1e-8
データ型: 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 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は、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は、単一の観測値が含まれている1行t列のベクトルです。ZJは、複数の観測値が含まれているs行t列の行列です。distfunは、任意の個数の観測値が含まれている行列ZJを受け入れなければなりません。D2はs行1列の距離のベクトルであり、D2(k)は観測値ZIとZJ(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
データ型: 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) で使用する重要な予測子の数。正の整数スカラー値として指定します。この値は単純モデルの学習に実際に使用した予測子の数より大きくなることがあります。詳細については、LIMEを参照してください。
lime の numImportantPredictors 引数、または fit の numImportantPredictors 引数によってこのプロパティが設定されます。
データ型: single | double
この プロパティ は読み取り専用です。
合成データ セットの標本数。正の整数スカラー値として指定します。
customSyntheticDataを指定した場合、カスタム合成データ セットの標本数によってこのプロパティが設定されます。そうでない場合、
limeの名前と値の引数'NumSyntheticData'、またはfitの名前と値の引数'NumSyntheticData'によってこのプロパティが設定されます。
データ型: single | double
この プロパティ は読み取り専用です。
lime が単純モデル (SimpleModel) を使用して予測子を説明するクエリ点。数値の行ベクトルまたは単一行テーブルとして指定します。
lime の queryPoint 引数、または fit の queryPoint 引数によってこのプロパティが設定されます。
データ型: single | double | table
この プロパティ は読み取り専用です。
機械学習モデル (BlackboxModel) のタイプ。'regression または 'classification' として指定します。
この プロパティ は読み取り専用です。
予測子データ。数値行列または table として指定します。
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
この プロパティ は読み取り専用です。
単純モデル。RegressionLinear、RegressionTree、ClassificationLinear、または ClassificationTree モデル オブジェクトとして指定します。lime は機械学習モデルのタイプ (Type) および単純モデルのタイプ ('SimpleModelType') に応じて単純モデル オブジェクトのタイプを決定します。
この プロパティ は読み取り専用です。
単純モデル (SimpleModel) によって計算されたクエリ点の予測。スカラーとして指定します。
SimpleModel が ClassificationLinear の場合、SimpleModelFitted の値は 1 または –1 になります。
SimpleModelFittedの値が 1 になるのは、単純モデルからの予測がBlackboxFitted(機械学習モデルからの予測) と同じである場合です。SimpleModelFittedの値が –1 になるのは、単純モデルからの予測がBlackboxFittedと異なる場合です。BlackboxFittedの値がAであった場合、関数plotはSimpleModelFittedの値をNot Aとして表示します。
データ型: single | double | categorical | logical | char | string | cell
この プロパティ は読み取り専用です。
合成予測子データ。数値行列または table として指定します。
customSyntheticData入力引数を指定した場合にこのプロパティが設定されます。そうでない場合、
limeは、予測子データXから分布パラメーターを推定して合成予測子データ セットを生成します。
データ型: single | double | table
オブジェクト関数
例
分類モデルの学習を行い、単純な決定木モデルを使用する lime オブジェクトを作成します。lime オブジェクトを作成するときに、クエリ点と重要な予測子の数を指定して、ソフトウェアが合成データ セットの標本を生成し、重要な予測子を使って単純モデルをクエリ点に当てはめるようにします。次に、オブジェクト関数 plot を使用して、予測子の推定重要度を単純モデルに表示します。
CreditRating_Historical データ セットを読み込みます。データ セットには、顧客 ID、顧客の財務比率、業種ラベル、および信用格付けが格納されています。
tbl = readtable('CreditRating_Historical.dat');table の最初の 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: [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×1 double]
BlackboxFitted: {'AA'}
SimpleModelFitted: {'AA'}
オブジェクト関数 plot を使用して、lime オブジェクト results をプロットします。
f = plot(results);

プロットには、クエリ点についての 2 つの予測値が示されています。この予測値は、results のBlackboxFittedプロパティと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))

あるいは、予測子変数名をもつ 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 carbigAcceleration、Cylinders などの予測子変数と応答変数 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: [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 をプロットします。
plot(results)

プロットには、クエリ点についての 2 つの予測値が示されています。この予測値は、results のBlackboxFittedプロパティとSimpleModelFittedプロパティに対応します。
横棒グラフは、絶対値で並べ替えられた、単純モデルの係数値を示します。LIME は、クエリ点の重要な予測子として、Horsepower、Model_Year、および Cylinders を見つけます。
Model_Year および Cylinders は複数のカテゴリをもつカテゴリカル予測子です。線形単純モデルの場合、各カテゴリカル予測子について、カテゴリの数よりも 1 つ少ないダミー変数が作成されます。棒グラフには最も重要なダミー変数のみが表示されます。他のダミー変数の係数は results の SimpleModel プロパティを使用して確認できます。すべてのカテゴリカル ダミー変数を含む並べ替えられた係数の値を表示します。
[~,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.5035e-05
{'Model_Year (74 vs. 70)'} -6.1591e-07
{'Model_Year (80 vs. 70)'} -3.9803e-07
{'Model_Year (81 vs. 70)'} 3.4186e-07
{'Model_Year (82 vs. 70)'} -2.2331e-07
{'Cylinders (6 vs. 8)' } -1.9807e-07
{'Model_Year (76 vs. 70)'} 1.816e-07
{'Cylinders (5 vs. 8)' } 1.7318e-07
{'Model_Year (71 vs. 70)'} 1.5694e-07
{'Model_Year (75 vs. 70)'} 1.5486e-07
{'Model_Year (77 vs. 70)'} 1.5151e-07
{'Model_Year (78 vs. 70)'} 1.3864e-07
{'Model_Year (72 vs. 70)'} 6.8949e-08
{'Cylinders (4 vs. 8)' } 6.3098e-08
{'Model_Year (73 vs. 70)'} 4.9696e-08
{'Model_Year (79 vs. 70)'} -2.4822e-08
⋮
回帰モデルの学習を行い、モデルの関数 predict の関数ハンドルを使用する lime オブジェクトを作成します。オブジェクト関数 fit を使用して、指定したクエリ点に単純モデルを当てはめます。次に、オブジェクト関数 plot を使用して、当てはめた線形単純モデルの係数を表示します。
carbig データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig予測子変数 Acceleration、Cylinders などを格納する 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]);
lime は TreeBagger オブジェクトを直接はサポートしないため、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) が含まれています。既定では、lime は double データ型の変数をカテゴリカル予測子として扱いません。2 番目 (Cylinder) と 5 番目 (Model_Year) の変数をカテゴリカル予測子として指定します。
results = lime(myPredict,tbl,'Type','regression','CategoricalPredictors',[2 5]);
tbl の最初の観測値に線形単純モデルを当てはめます。
results = fit(results,tbl(1,:),4); plot(results)

lime は、重要な予測子として Horsepower、Displacement、Cylinders、および Model_Year を見つけます。
詳細
距離計量は、2 つの観測値の間の距離を定義する関数です。lime は、連続変数用のさまざまな距離計量や、連続変数とカテゴリカル変数の混在をサポートします。
連続変数の距離計量
mx 行 n 列のデータ行列 X (mx 個の 1 行 n 列の行ベクトル x1、x2、...、xmx として扱われる) と、my 行 n 列のデータ行列 Y (my 個の 1 行 n 列の行ベクトル y1、y2、...、ymy として扱われる) が与えられた場合、ベクトル xs と yt の間のさまざまな距離は次のように定義されます。
ユークリッド距離
ユークリッド距離はミンコフスキー距離の特殊なケース、p = 2 の場合です。
標準化されたユークリッド距離
ここで、V は j 番目の対角要素が (S(j))2 である n 行 n 列の対角行列です。S は各次元のスケーリング係数のベクトルです。
マハラノビス距離
ここで、C は共分散行列です。
市街地距離
市街地距離はミンコフスキー距離の特殊なケース、p = 1 の場合です。
ミンコフスキー距離
p = 1 という特殊なケースでは、ミンコフスキー距離は市街地距離を与えます。p = 2 という特殊なケースでは、ミンコフスキー距離はユークリッド距離を与えます。p = ∞ という特殊なケースでは、ミンコフスキー距離はチェビシェフ距離を与えます。
チェビシェフ距離
チェビシェフ距離はミンコフスキー距離の特殊なケース、p = ∞ の場合です。
コサイン距離
相関距離
ここで
および
スピアマン距離は、1 から一連の値として扱われる観測値間の標本スピアマン順位相関係数を引きます。
ここで
連続変数とカテゴリカル変数が混在する場合の距離計量
異形グドール距離
この距離は、グドール距離のバリアントであり、他の値の頻度に関係なく、一致する値が互いに離れた場所にある場合に小さな距離を割り当てます。不一致の場合、予測子の距離寄与は 1/(変数の数) です。
出現頻度距離
一致の場合、出現頻度距離はゼロ距離を割り当てます。不一致の場合、出現頻度距離は、頻度の低い値に高い距離を割り当て、頻度の高い値に低い距離を割り当てます。
アルゴリズム
手順 1 ~ 5 の記載のとおり、LIME [1]を使用して機械学習モデルの予測を説明するため、ソフトウェアは、合成データ セットを生成し、lime と fit を使用して解釈可能な単純モデルを合成データ セットに当てはめます。
limeのqueryPoint値とnumImportantPredictors値を指定した場合、関数limeはすべての手順を実行します。queryPointおよびnumImportantPredictorsを指定せずに'DataLocality'を'global'(既定の設定) として指定した場合、関数limeが合成データ セットを生成し (手順 1 ~ 2)、関数fitが単純モデルを当てはめます (手順 3 ~ 5)。queryPointおよびnumImportantPredictorsを指定せずに'DataLocality'を'local'として指定した場合、関数fitはすべての手順を実行します。
関数 lime および fit は、以下の手順を実行します。
連続変数には多変量正規分布を、各カテゴリカル変数には多変量分布を使用して、合成予測子データ セット Xs を生成します。名前と値の引数
'NumSyntheticData'を使用して、生成する標本の数を指定できます。'DataLocality'が'global'(既定の設定) である場合、ソフトウェアは、予測子データ セット全体 (Xまたはblackbox内の予測子データ) から分布パラメーターを推定します。'DataLocality'が'local'である場合、ソフトウェアは、クエリ点の k 個の最近傍を使用して分布パラメーターを推定します。ここで、k は'NumNeighbors'値です。名前と値の引数'Distance'を使用して、最近傍を見つけるための距離計量を指定できます。
ソフトウェアは、分布パラメーターを推定する際、予測子データ セット内の欠損値を無視します。
あるいは、
limeの入力引数customSyntheticDataを使用することで、事前生成されたカスタム合成予測子データ セットを提供できます。合成データ セット Xs についての予測値 Ys を計算します。この予測値は、回帰、または分類を行うための分類済みラベルについての予測応答です。ソフトウェアは、
blackboxモデルの関数predictを使用して予測値を計算します。blackboxを関数ハンドルとして指定した場合、ソフトウェアは、その関数ハンドルを使用して予測値を計算します。'Distance'によって指定された距離計量を使用して、クエリ点と合成予測子データ セット内の標本の距離 d を計算します。二乗指数 (またはガウス) カーネル関数を使用して、クエリ点 q に対する合成予測子データ セット内の標本の重み値 wq を計算します。
xs は、合成予測子データ セット Xs 内の標本です。
d(xs,q) は、標本 xs とクエリ点 q の距離です。
p は、Xs 内の予測子の数です。
σ はカーネルの幅です。名前と値の引数
'KernelWidth'を使用して指定できます。既定の'KernelWidth'値は 0.75 です。
クエリ点における重み値は 1 であり、距離の値が大きくなるにつれ、0 に収束していきます。
'KernelWidth'値は、重み値が 0 に収束する速度を制御します。'KernelWidth'値が小さければ、重み値はより速く 0 に収束します。その結果、アルゴリズムは、クエリ点に近い標本に、より大きな重みを付与します。このような重み値がアルゴリズムによって使用されることで、選択された重要な予測子、および当てはめられた単純モデルによる、クエリ点周辺の合成データについての予測子のローカルな説明が有効となります。単純モデルを当てはめます。
'SimpleModelType'が'linear'(既定の設定) である場合、ソフトウェアは、重要な予測子を選択し、選択した重要な予測子の線形モデルを当てはめます。グループ直交マッチング追跡 (OMP) アルゴリズム[2][3]を使用して、n 個の重要な予測子 () を選択します。ここで、n は
numImportantPredictors値です。このアルゴリズムは、合成予測子データ セット (Xs)、予測子 (Ys)、および重み値 (wq) を使用します。重要でない予測子 (推定される係数が 0 の予測子) は選択されないことに注意してください。したがって、選択される重要な予測子の数は n 未満になることがあります。
重み値 (wq) を使用して、選択した重要な予測子 () の線形モデルを予測子 (Ys) に当てはめます。ソフトウェアは、回帰には
fitrlinearを、分類にはfitclinearを使用します。マルチクラス モデルの場合、ソフトウェアは、1 対他 (OVA) 方式を使用してバイナリ分類問題を作成します。陽性クラスはblackboxモデルからのクエリ点についての予測クラスであり、陰性クラスはその他のクラスを指します。
'SimpleModelType'が'tree'である場合、ソフトウェアは、回帰にはfitrtreeを、分類にはfitctreeを使用して決定木モデルを当てはめます。ソフトウェアは、重要な予測子の数として決定分岐 (枝ノード) の最大数を指定し、当てはめられた決定木が、指定された数を上限に予測子を使用するようにします。
参照
[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 で導入線形単純モデル (SimpleModelType を参照) を当てはめて LIME の値を計算する場合に、名前と値の引数 BetaTolerance を使用して単純モデルの線形係数とバイアス項の相対許容誤差を指定できます。BetaTolerance の既定値は 1e-4 です。
R2023a では、線形単純モデルの線形係数の相対許容誤差は 1e-8 でした。以前のリリースでは、値は 1e-4 でした。
参考
plotPartialDependence | shapley
トピック
- LIME を使用した表形式データに関する深層ネットワークの予測の解釈 (Deep Learning Toolbox)
- 機械学習モデルの解釈
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)