Light GBM의 다중 클래스 분류/이진 분류를 시각화하는 Confusion Matrix Plot
Introduction
Summary
· scikit-learn 0.22 업데이트 인 confusion matrix의 plot을 시도했습니다.
・종래의 scikit-learn의 confusion matrix는 array로 출력하고 있었기 때문에 그래프 빛나지 않았다
· LightGBM을 사용하는 경우 함수의 인수 분류 모델
scikit-learn 인터페이스로 학습하지 않으면 할 수 없었다.
scikit-learn의 저주?
・plot하는 메리트로서는, 함수내에서 y_pred를 마음대로 계산해 주기 때문에
조금 편하다고 보기 쉽고 빛난다
Dataset
모두 사랑 iris. 목적 변수는 물론 species.
Body
준비
우선 업데이트를 잊지 마세요.
라이브러리 업데이트!pip install --upgrade scikit-learn
아래의 _plot_confusion_matrix가 이번 테마의 메인.
이번에 필요한 라이브러리 import#default
import numpy as np
import pandas as pd
import seaborn as sns
#for_modeling
import lightgbm as lgb
#for_plot
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, plot_confusion_matrix
from sklearn.model_selection import train_test_split
iris 데이터 세트는 seaborn 라이브러리에서 가져옵니다.
데이터 세트 정리df = sns.load_dataset('iris')
X=df.drop(["species"],axis=1)
y=df["species"]
SEED=5
X_train_tmp, X_test,y_train_tmp,y_test=train_test_split(X, y, test_size=0.2, random_state=SEED)
X_train, X_val, y_train, y_val=train_test_split(X_train_tmp, y_train_tmp, test_size=0.2, random_state=SEED)
오리지널 인터페이스로 학습한 패턴
Summary에서 쓴대로 실패하지만,
우선은 LightGBM 모델을 오리지날의 인터페이스로 기술한 케이스로 실행해 본다.
원래 인터페이스로 학습#失敗例
lgb_params = {
'objective':'multiclass',
'n_estimators':1000,
'seed': SEED,
'early_stopping_rounds':100
}
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_val, y_val)
model = lgb.train(
lgb_params,
lgb_train,
valid_sets=lgb_eval,
verbose_eval = 15
)
confusion matrix를 출력해 보자.
인수는 아래와 같이, estimator에게 학습시킨 모델, X에 검증 부분의 특징량(X_test), Y에 정답 데이터(Y_test)를 넣는 것으로 출력된다.
y_pred는 자동으로 계산되므로 선언이 필요하지 않습니다.
sklearn.metrics.plot_confusion_matrix(estimator, X, y_true, labels=None, sample_weight=None, normalize=None, display_labels=None, include_values=True, xticks_rotation='horizontal', values_format=None 없음)
인용 소스 : scikit-learn 공식 문서
플롯 출력plot_confusion_matrix(model,X_test,y_test)
그러면 다음 오류가 반환됩니다.
estimator에 지정된 모델이 분류 모델로 인식되지 않는 것 같습니다.
오류 문---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-125-5b518d7bfee9> in <module>()
----> 1 plot_confusion_matrix(model,X_test,y_test)
/usr/local/lib/python3.6/dist-packages/sklearn/metrics/_plot/confusion_matrix.py in plot_confusion_matrix(estimator, X, y_true, labels, sample_weight, normalize, display_labels, include_values, xticks_rotation, values_format, cmap, ax)
183
184 if not is_classifier(estimator):
--> 185 raise ValueError("plot_confusion_matrix only supports classifiers")
186
187 if normalize not in {'true', 'pred', 'all', None}:
ValueError: plot_confusion_matrix only supports classifiers
LightGBM을 scikit-learn 인터페이스로 작성하는 경우
LGBMClassifier라고 하는 그야말로 분류 모델인 것 같은 LightGBM의 기술 방법이 있었다는 것을 상기한다.
시험에 그 기술 방법으로 시험해 본다.
scikit-learn 인터페이스로 학습한 패턴
scikit-learn 인터페이스에서 학습model2 = lgb.LGBMClassifier(objective='multiclass',
n_estimators=1000,
seed=SEED,
early_stopping_rounds=100)
model2.fit(X_train, y_train,
eval_set=[(X_val, y_val)],
verbose=50)
model2에서 다시 시도해 봅니다.
플롯 재출력plot_confusion_matrix(model2,X_test,y_test)
나왔다.
seaborn에서의 plot과 같이 디폴트로 보기 쉬운 플롯이 출력되었다.
타이틀을 붙이는 경우는 아래와 같이 기재하면 출력된다.
제목 추가disp=plot_confusion_matrix(model2,X_test,y_test)
disp.ax_.set_title("Confusion Matrix")
plt.show()
덧붙여서 코드는 할애하지만 titanic의 2치 분류에서도 똑같이 해 출력할 수 있었다.
반대로 종래의 confusion_matrix.confusion_matrix의 경우는 2치 분류 밖에 할 수 없고, 다클래스 분류라고 할 수 없었다.
Conclusion
・scikit-learn의 새로운 기능의 confusion matrix plot를 이용하는 것으로 꽤 간단한 기재로 묘화할 수 있었다.
· LightGBM의 경우는 현재, scikit-learn 인터페이스에서 학습시키는 것이 좋다.
・종래의 confusion_matrix.confusion_matrix와는 달리, 2치 분류에서도 다클래스 분류에서도 대응하고 있다.
Reference
이 문제에 관하여(Light GBM의 다중 클래스 분류/이진 분류를 시각화하는 Confusion Matrix Plot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Chintalphy/items/1c62e444d0a77bb892cf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
준비
우선 업데이트를 잊지 마세요.
라이브러리 업데이트
!pip install --upgrade scikit-learn
아래의 _plot_confusion_matrix가 이번 테마의 메인.
이번에 필요한 라이브러리 import
#default
import numpy as np
import pandas as pd
import seaborn as sns
#for_modeling
import lightgbm as lgb
#for_plot
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, plot_confusion_matrix
from sklearn.model_selection import train_test_split
iris 데이터 세트는 seaborn 라이브러리에서 가져옵니다.
데이터 세트 정리
df = sns.load_dataset('iris')
X=df.drop(["species"],axis=1)
y=df["species"]
SEED=5
X_train_tmp, X_test,y_train_tmp,y_test=train_test_split(X, y, test_size=0.2, random_state=SEED)
X_train, X_val, y_train, y_val=train_test_split(X_train_tmp, y_train_tmp, test_size=0.2, random_state=SEED)
오리지널 인터페이스로 학습한 패턴
Summary에서 쓴대로 실패하지만,
우선은 LightGBM 모델을 오리지날의 인터페이스로 기술한 케이스로 실행해 본다.
원래 인터페이스로 학습
#失敗例
lgb_params = {
'objective':'multiclass',
'n_estimators':1000,
'seed': SEED,
'early_stopping_rounds':100
}
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_val, y_val)
model = lgb.train(
lgb_params,
lgb_train,
valid_sets=lgb_eval,
verbose_eval = 15
)
confusion matrix를 출력해 보자.
인수는 아래와 같이, estimator에게 학습시킨 모델, X에 검증 부분의 특징량(X_test), Y에 정답 데이터(Y_test)를 넣는 것으로 출력된다.
y_pred는 자동으로 계산되므로 선언이 필요하지 않습니다.
sklearn.metrics.plot_confusion_matrix(estimator, X, y_true, labels=None, sample_weight=None, normalize=None, display_labels=None, include_values=True, xticks_rotation='horizontal', values_format=None 없음)
인용 소스 : scikit-learn 공식 문서
플롯 출력
plot_confusion_matrix(model,X_test,y_test)
그러면 다음 오류가 반환됩니다.
estimator에 지정된 모델이 분류 모델로 인식되지 않는 것 같습니다.
오류 문
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-125-5b518d7bfee9> in <module>()
----> 1 plot_confusion_matrix(model,X_test,y_test)
/usr/local/lib/python3.6/dist-packages/sklearn/metrics/_plot/confusion_matrix.py in plot_confusion_matrix(estimator, X, y_true, labels, sample_weight, normalize, display_labels, include_values, xticks_rotation, values_format, cmap, ax)
183
184 if not is_classifier(estimator):
--> 185 raise ValueError("plot_confusion_matrix only supports classifiers")
186
187 if normalize not in {'true', 'pred', 'all', None}:
ValueError: plot_confusion_matrix only supports classifiers
LightGBM을 scikit-learn 인터페이스로 작성하는 경우
LGBMClassifier라고 하는 그야말로 분류 모델인 것 같은 LightGBM의 기술 방법이 있었다는 것을 상기한다.
시험에 그 기술 방법으로 시험해 본다.
scikit-learn 인터페이스로 학습한 패턴
scikit-learn 인터페이스에서 학습
model2 = lgb.LGBMClassifier(objective='multiclass',
n_estimators=1000,
seed=SEED,
early_stopping_rounds=100)
model2.fit(X_train, y_train,
eval_set=[(X_val, y_val)],
verbose=50)
model2에서 다시 시도해 봅니다.
플롯 재출력
plot_confusion_matrix(model2,X_test,y_test)
나왔다.
seaborn에서의 plot과 같이 디폴트로 보기 쉬운 플롯이 출력되었다.
타이틀을 붙이는 경우는 아래와 같이 기재하면 출력된다.
제목 추가
disp=plot_confusion_matrix(model2,X_test,y_test)
disp.ax_.set_title("Confusion Matrix")
plt.show()
덧붙여서 코드는 할애하지만 titanic의 2치 분류에서도 똑같이 해 출력할 수 있었다.
반대로 종래의 confusion_matrix.confusion_matrix의 경우는 2치 분류 밖에 할 수 없고, 다클래스 분류라고 할 수 없었다.
Conclusion
・scikit-learn의 새로운 기능의 confusion matrix plot를 이용하는 것으로 꽤 간단한 기재로 묘화할 수 있었다.
· LightGBM의 경우는 현재, scikit-learn 인터페이스에서 학습시키는 것이 좋다.
・종래의 confusion_matrix.confusion_matrix와는 달리, 2치 분류에서도 다클래스 분류에서도 대응하고 있다.
Reference
이 문제에 관하여(Light GBM의 다중 클래스 분류/이진 분류를 시각화하는 Confusion Matrix Plot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Chintalphy/items/1c62e444d0a77bb892cf
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Light GBM의 다중 클래스 분류/이진 분류를 시각화하는 Confusion Matrix Plot), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Chintalphy/items/1c62e444d0a77bb892cf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)