次元削減(Dimensionality Reduction) #
機械学習の際,データの次元が大きいと,計算量が膨大になることがあります. そこで,教師なし学習で,計算に利用する変数を\(m\)個に減らす次元削減(Dimensionality Reduction)が行われます. 次元削減では,主成分分析(PCA; Principal Component Analysis)がよく用いられます.
また,3次元より大きな次元のデータだと,可視化も難しくなります. 次元を削減することで,データを3次元以下に縮退させて,可視化できるようになります.
#
Scikit-learn には,次元削減のための PCA クラスが用意されています. これを用いて,アヤメ(IRIS)のデータを可視化してみましょう. アヤメのデータは,scikit-learn に含まれており,ガクの長さ(sepal length),ガクの幅(sepal width),花弁の長さ(peral length),花弁の幅(petal width)の4つのデータから,アヤメの種類(ヒオウギアヤメ(setosa), ブルーフラッグ(versicolor), バージニカ(virginica))を予測できます.
ただし,元のデータは4次元ですので,グラフ表示できません.
全体の雰囲気を見るために,2次元までに次元を削減して可視化してみましょう.
以下のコードを pca_example.py
として保存し,実行してください.
from sklearn import datasets
from sklearn import decomposition
iris = datasets.load_iris() # アヤメのデータを読み込む.
x = iris.data # 説明変数(特徴量)を取得する.
pca = decomposition.PCA(n_components=2) # 主成分分析を行うオブジェクトを生成する.
pca.fit(x) # 主成分分析を行う.
x_pca = pca.transform(x) # 主成分分析を行った結果を取得する.
import matplotlib.pyplot as plt
plt.scatter(x_pca[:, 0], x_pca[:, 1], c=iris.target)
plt.show()



上記画像は,Wikipediaからダウンロードしてきた各アヤメの画像です.左から順にヒオウギアヤメ,ブルーフラッグ,バージニカです.
実行結果 #
これで,多次元のデータを2次元の散布図として可視化できるようになりました. ただし,x軸,y軸がどのような意味を持つのかまでは与えられず,自分で考察する必要があります.