LoginSignup
35
20

More than 5 years have passed since last update.

Seabornで相関係数行列を書こう

Last updated at Posted at 2018-09-13

初投稿です。お手柔らかにお願いします!

今日は、kaggleのタイタニックでとあるkernelsを読んでいたところ、
Seabornというライブラリを使った、相関係数行列の作成があったので詳しく見ていきたいと思います。

参考:
https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python

環境:kaggleのkernel(仮想環境)

相関係数行列、書けると何が嬉しいの?

機械学習において余計なパラメータは計算リソースが増える・過学習の可能性が増えるので、
減らしたいものです。

相関が強い二つパラメータは、片方のパラメータで説明できてしまうので、
必要が薄いのです。

相関係数行列を表示すると、パラメータ毎の相関が一発でわかるので、
パラメータ選定の助けになります。

seabornとは?

seabornとは、pythonのライブラリの一つで、
matplotlibのラッパー的なやつです。

matplotlibより、簡単に綺麗にグラフの描画が出来ます!
細かい設定はmatplotlibのが出来るけどざっくり書くには見やすく、簡単にかけてお勧めです。

参考:
https://myenigma.hatenablog.com/entry/2015/10/09/223629

コードとグラフの出力結果

入力(train)↓
trainはpd.Dataframe型に格納されており、全て数値になるように前処理しています。
入力.PNG

code.py
import seaborn as sns
import matplotlib.pyplot as plt

colormap = plt.cm.RdBu
plt.figure(figsize=(14,12))
plt.title('Pearson Correlation of Features', y=1.05, size=15)
sns.heatmap(train.astype(float).corr(),linewidths=0.1,vmax=1.0, 
            square=True, cmap=colormap, linecolor='white', annot=True)

出力↓

__results___10_1.png

詳しい説明

細かく見ていきましょう。

first.py
colormap = plt.cm.RdBu

plt.cmでカラーマップを呼び出しています。
RdBuとはどんな色を使うかの指定です。
今回はRed⇔Blueのカラーマップなのでこのように指定しています。
他の指定をしたい場合は下記のサイトにまとまっています。
参考:
https://matplotlib.org/examples/color/colormaps_reference.html


second.py
plt.figure(figsize=(14,12))
plt.title('Pearson Correlation of Features', y=1.05, size=15)

描画するサイズとタイトルを設定しています。
これはmatplotlibの設定ですね!


third.py
sns.heatmap(train.astype(float).corr(),linewidths=0.1,vmax=1.0, 
            square=True, cmap=colormap, linecolor='white', annot=True)

この一文でheatmapが書けてしまいます!
各引数を見ていきましょう。

train.astype(float).corr()
これによって、各列の相関係数が計算されています。
DataFrame型のメソッドの一つです。

参考:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.corr.html

linewidths=0.1
格子線の太さを指定しています

vmax=1.0
相関係数の最大値を指定してます。右側のバーの一番上の値と思ってOKです。

square=True
正方形で出力されます

cmap=colormap
色の指定です。matplotlbのカラーマップを使用します。

linecolor='white'
格子線の色指定です。

annot=True
各要素に値を表示するかどうかを指定できます。

終わり

こんなに簡単に書けるなんて驚きですね!

kaggleのkernelsは英語でちょっと抵抗があるかと思いますが、
強いデータサイエンティストの華麗なPython捌きを無料で見ることが出来るため、
非常にお勧めです!

初投稿ゆえ、見づらい部分などありましたらご指摘いただけたら幸いです!

35
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
20