(LIME) Local Interpretable Model-agnostic Explanations
Objective of LIME
$$\xi(x)=\underset{g\in G}{\operatorname{argmin}} L(f,g,\pi_{x})+\Omega(g)$$
Train $f$
이번 포스트에서는 예제 데이터로 fetch_20newsgroups를 사용했습니다. fetch_20newsgroups 데이터에는 총 20개의 Class가 존재합니다. 하지만 문제를 단순하게 하기 위해서 이번 포스트에서는 20개 Class 모두를 사용하기 보다는 “atheism”, “christian” 2개의 카테고리만 이용하겠습니다. 이렇게 되면 이제 두 클래스를 분류하는 Binary Text Classification 문제가 되고 모델로는 Random Forest를 사용해 보겠습니다.
그리고 학습된 Random forest를 $f$ 라고 정의하겠습니다.
|
|
다음으로 test data에서 $x$를 선택합니다. 선택된 $x$에 대해서 Random Forest 모델 $f$를 이용해 예측된 $f(x)$를 해석하고자 합니다. 하지만 Random Forest $f$ 는 블랙박스 모델이기 때문에 이를 직접적으로 해석할 수는 없습니다. 그래서 $f(x)$를 바로 해석하는 대신 해석할 수 있는 모델 $g$를 이용해 $f(x)$의 결과를 해석해 보겠습니다.
newsgroups_test에서 첫 번째 데이터를 이용해서 LIME의 동작 방법에 대해서 알아보겠습니다.
|
|
데이터를 한번 확인 해보겠습니다.
|
|
이 데이터의 레이블은 1, “christian” 입니다.
|
|
위에서 우리가 학습한 모델 $f$을 이용해 예측해 보면 모델이 정답인 1로 예측합니다.
|
|
위에서 학습한 모델이 잘 예측을 하는 것을 확인했습니다. 이제 이 모델은 어떻게 1이라고 예측을 하게 됐을까요? 이제부터 그 과정에 대해서 알아보려고 합니다.
Interpretable Data Representation
우선 데이터 $x$ 를 interpretable representation이 가능한 $x’$ 으로 변환합니다. Text의 경우 interpretable represenstion은 단어가 존재한다/존재하지 않는다 입니다.
아래 코드는 단어를 숫자로 mapping 시켜주는 역할을 합니다.
|
|
$x’$ 는 모든 단어가 존재하기 때문에 아래와 같이 모든 값이 존재한다를 뜻하는 1로 채워져 있습니다.
|
|
Sampling for Local Exploration
이제 위에서 변환된 $x’$ 주변에서 $z’$을 샘플링 합니다. 샘플링 방법은 random 하게 값을 고른 후 1을 0으로 바꿔주면 됩니다.
|
|
샘플링된 $z’$ 를 확인하면 다음과 같습니다. data의 첫번째는 $x’$ 이며, 나머지는 $z’$ 입니다.
|
|
$z’$ 를 원래의 표현(텍스트) 로 복원시키면 이 값이 $z$ 가 됩니다.
|
|
inverse_data를 확인하면 다음과 같습니다.
|
|
샘플링된 $z$ 값을 해석하려는 모델 $f$ 에 넣어서 $g$를 학습할 때 사용할 $label$ 을 만듭니다.
$$label = f(z)$$
|
|
예측된 label 값은 다음과 같습니다.
|
|
Sparse Linear Explanations
다음으로는 $g$를 학습시킬 때 필요한 $weight$를 계산해야 합니다.
위에서 random 하게 뽑힌 $z’$들이 원본 데이터와 거리가 얼마나 먼 곳에서 있는지에 따라서 학습할 때 가중치로 사용합니다.
$$\pi_{x}=exp(-D(x,z)^{2}/\sigma^{2}): \text{sample weight}$$
$D$는 거리를 계산하는 함수이며 각 데이터 특성별로 사용하는 Distance function은 다음과 같습니다.
- text: cosine distance
- image: $L2$ distance
Distance
우선 $x$ 와 $z$ 사이의 거리를 계산합니다. 이 예시는 text 이기 때문에 cosine distance 를 구했습니다.
|
|
계산된 거리는 다음과 같습니다.
|
|
Kerenl function
$pi_{x}$는 exponential kernel 입니다. 앞서 계산한 distance를 kernel에 넣어서 값을 변환시켜줍니다. 이 때 식의 sigma는 kernel width 로 해석됩니다.
|
|
계산된 weight는 다음과 같습니다.
|
|
Feature selection
다음으로 계산해야 할 것은 $\Omega(g)$입니다. 논문에서는 이 부분을 K-LASSO로 대신했지만 실제 코드에서는 Ridge 또는 이용자가 준 값 k를 사용합니다. 설명할 변수들을 Ridge모델로 학습 후 선택합니다.
|
|
선택된 feature은 다음과 같습니다.
|
|
Train $g$
선택된 변수들을 이용하여서 $g$를 학습합니다.
|
|
예측된 점수값은 다음과 같습니다.
|
|
학습된 모델을 이용해 설명하려는 instance의 예측합니다.
|
|
예측된 값은 다음과 같습니다.
|
|
설명 변수들을 coefficient 크기를 기준으로 정렬합니다.
|
|
정렬된 변수들의 순서는 다음과 같습니다.
|
|
feature를 원래 값(text)으로 복원합니다.
|
|
LIME의 해석에 관한 부분은 공식 github repo를 참조해주세요.