目的
分析コンペの効率化のための、可視化ツールのいろいろまとめ。
少しずつ、増やしていく!
目次
1.相関マップ
2.混同行列(Confusion Matrix)
3.LightGBMの特徴量重要度
1.相関マップ
pandasデータフレームの各列の相関をヒートマップ表示。
各特徴量の相関、モデルのアンサンブル用の予測結果の相関に使用する。
参考
-
コード
fig ,ax = plt.subplots(1,1,figsize=(12,12))
sns.heatmap(df.corr(), annot=True, fmt='.7f', ax=ax)
df.corr()
2.混同行列(Confusion Matrix)
参考
-
コード
import numpy as np
import pandas as pd
from scipy import signal
from sklearn.metrics import confusion_matrix, f1_score, plot_confusion_matrix
# Thanks to https://www.kaggle.com/marcovasquez/basic-nlp-with-tensorflow-and-wordcloud
def plot_cm(y_true, y_pred, title="", figsize=(14,14):
y_pred = y_pred.astype(int)
cm = confusion_matrix(y_true, y_pred, labels=np.unique(y_true))
cm_sum = np.sum(cm, axis=1, keepdims=True)
cm_perc = cm / cm_sum.astype(float) * 100
annot = np.empty_like(cm).astype(str)
nrows, ncols = cm.shape
for i in range(nrows):
for j in range(ncols):
c = cm[i, j]
p = cm_perc[i, j]
if i == j:
s = cm_sum[i]
annot[i, j] = '%.1f%%\n%d/%d' % (p, c, s)
elif c == 0:
annot[i, j] = ''
else:
annot[i, j] = '%.1f%%\n%d' % (p, c)
cm = pd.DataFrame(cm, index=np.unique(y_true), columns=np.unique(y_true))
cm.index.name = 'Actual'
cm.columns.name = 'Predicted'
fig, ax = plt.subplots(figsize=figsize)
plt.title(title)
sns.heatmap(cm, cmap='viridis', annot=annot, fmt='', ax=ax)
3.LightGBMの特徴量重要度
LightGBMの学習結果の特徴量重要度の可視化
入力はLightgbmのリスト
コード
def display_feature_importance(models):
fi = pd.DataFrame(columns=['importance','feature'])
for i, m in enumerate(models):
df_t = pd.DataFrame(columns=['importance','feature'])
df_t['importance'] = m.feature_importance(importance_type='gain')
df_t['feature'] = m.feature_name()
fi = pd.concat([fi, df_t], axis=0)
fi = fi.groupby('feature').sum()
best_features = fi.sort_values(by='importance', ascending=False).reset_index()
plt.figure(figsize=(16, 16));
sns.barplot(x="importance", y="feature", data=best_features);
plt.title('LGB Features (avg over folds)');
print('worst:\n',best_features['feature'][-20:].values)
Sampleコード(疑似)
### 学習
m_lgb = lgb.train(params, train_data, valid_sets = [valid_data],
verbose_eval=100,early_stopping_rounds=200)
### 特徴量の重要度の表示
display_feature_importance([m_lgb])
表示例
表示は、kaggleの「M5 Forecasting - Accuracy」コンペの特徴量の重要度。
ちなみに結果は、395/5,558の銅メダル