読者です 読者をやめる 読者になる 読者になる

人工知能してみる

人工知能の中の人が機械学習とかデータドリブン的なことを勉強します

Scikit-learnでirisを主成分分析してみる

主成分分析(Principal Component Analysis)とはデータの各ベクトルを独立にし次元を下げる手法です。
データを独立にするとは入力ベクトルを直行にさせると考えればOKです。
複数のベクトルの要素を見て独立なベクトルを再構築させます。
次元の低減はベクトルへの寄与度に応じてベクトルを削除していく、というものです。
(厳密なことは分かってないので要勉強)

主成分分析の目的としては、いわゆる次元の呪いを回避するにあります。
次元の呪いとは、多次元化による計算コストの爆発と機械学習時の精度低下です。
前者は容易に想像がつくかと思いますが、面白いのは後者です。
機械学習をするときはデータがたくさんあったほうが良いと一般に考えられます。
しかし、次元の低下という情報を減らすことによって精度が向上します。
ノイズや過学習が減るのでしょうか?
詳しいことはより勉強してみたいと思います。

主成分分析はここが非常に分かりやすいので参考になります。
http://dev.classmethod.jp/statistics/pythonscikit-learn-pca1/

さて、今回も早速コードを書いてみようと思います。
今回はirisを使用します。
もとのデータは4次元150行のデータです。
これを主成分分析して2次元に圧縮します。

import sklearn
import pylab
from sklearn.decomposition import PCA
from sklearn import datasets

iris = datasets.load_iris()
x = iris.data
y = iris.target

pca = PCA(n_components = 2)
pca.fit(x)
x_pca=pca.transform(x)

pylab.scatter(x_pca[:,0],x_pca[:,1])

結果はこんな感じのグラフになります。
3種類のアヤメのデータを含んでいるはずなので、次元圧縮してしまうと少し分解能が悪いように見えますね。

f:id:Grahamian:20160823200515p:plain

次回はこのデータを使って分類してみようと思います。