スポンサードリンク
どうも、とがみんです。
以前の記事で主成分分析がどういうものなのかについて紹介しました。
この記事では、4つの特徴量を持つirisデータを用いて、scikit-learnを利用して主成分分析を行い、特徴量を3つ、2つと削減し、視覚化していきます。
今回すること
irisデータセットを用いて、主成分分析により、4次元のデータを3次元、2次元に次元削減し、データの雰囲気をより解釈しやすくしていきます。
irisデータを可視化した図
データの準備
データを準備していきます。以下のコード実行すると、「iris」のデータセットがダウンロードされ、各変数に、花の名前や特徴のデータが格納されます。
1 2 3 4 5 6 7 8 9 | #データの準備 from sklearn import datasets dataset = datasets.load_iris() #データの整理 target_names = dataset.target_names#ターゲット(花の種類)の名前リスト targets = dataset.target#ターゲットに与えられた番号 feature_names = dataset.feature_names#特徴名リスト features = dataset.data#各特徴のデータ |
準備したデータを以下のコードで、データを表形式で出力します。
1 2 3 4 5 | import pandas as pd from pandas import DataFrame df = DataFrame(features, columns = feature_names) df['target'] = target_names[targets] df.head() |
各特徴量のペアをまとめたグラフを以下のコードで表示します。
1 2 3 | #4次元を表すグラフ import seaborn as sns sns.pairplot(df, hue="target") |
次に、3次元、2次元と次元を削減し、視覚化していきます。
3次元へ次元削減
4次元のirisデータを3次元に次元削減します。
1 2 3 4 5 6 | #4次元のデータを3次元へ from sklearn.decomposition import PCA import numpy as np pca3 = PCA(n_components=3) pca3.fit(features) transformed = pca3.fit_transform(features)#featuresを3次元に変換 |
3次元に削減した結果のグラフを表示します。
1 2 3 4 5 6 7 8 9 10 11 12 | #3次元グラフの出力 from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize = (12, 10)) ax = Axes3D(fig) plt.title('3dimentions',fontsize = 21) for label in np.unique(targets): p = ax.scatter(transformed[targets == label, 0], transformed[targets == label, 1], transformed[targets == label, 2], marker = 'o', s = 200) |
3次元に次元削減した結果を視覚化したものです。
2次元へ次元削減
4次元のirisデータを2次元に次元削減します。
1 2 3 4 | #4次元のデータを2次元へ pca2 = PCA(n_components=2) pca2.fit(features) transformed = pca2.fit_transform(features)#featuresを2次元に変換 |
2次元に次元削減した結果をグラフ化します。
1 2 3 4 5 6 7 8 | #2次元グラフの出力 import numpy as np for label in np.unique(targets):#[0,1,1,1,1,2]が[0,1,2]になる。重複を避ける plt.scatter(transformed[targets == label, 0],transformed[targets == label, 1]) plt.savefig('2dimentions') plt.title('2dimentions',fontsize = 21) |
まとめ
irisデータを用いて、主成分分析により次元の削減を行い視覚化しました。
主成分分析は、元のデータの情報をできるだけ損なわないようにデータを圧縮するので、
データ量を圧縮したい時や、また、データの雰囲気をわかりやすく可視化したい時に利用してみたら良いかと思います。
参考文献
>[機械学習] iris データセットを用いて scikit-learn の様々な分類アルゴリズムを試してみた
スポンサードリンク
スポンサードリンク