Iris データセットの主成分分析を行い,第1主成分スコアと第2主成分スコアをプロットする.
主成分分析により次元削減ができる.
ある花の属性は、「5.1 3.5 1.4 0.2」という4つの数値属性を持ち、 別の花の属性は、「4.9 3.0 1.4 0.2」という4つの数値属性を持つとする。
数値属性の個数のことを「次元」と言ったりする。
上で書いた花は、どちらも4次元である。
次元が大きすぎると、解析がうまく行かなかったり、人工知能の学習がうまくいかないという可能性がある。 元のデータで、互いの類似性を保ったままで、より少ない個数の数値属性を作ることを 次元削減という。
この資料の URL: https://www.kkaneko.jp/data/pca/pca.html
目次
【サイト内の関連ページ】
このページの内容は,Google Colaboratory でも実行できる.
そのために,次の URL で,Google Colaboratory のノートブックを準備している.
次のリンクをクリックすると,Google Colaboratory のノートブックが開く. そして,Google アカウントでログインすると,Google Colaboratory のノートブック内のコードを実行することができる.Google Colaboratory のノートブックは書き換えて使うこともできる.このとき,書き換え後のものを,各自の Google ドライブ内に保存することもできる.
https://colab.research.google.com/drive/1nWjnjxgPrldV75OCUcp3RFEV_baeCs4D?usp=sharing
Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.
あるいは, 開発環境や Python コンソール(Jupyter Qt Console,Spyder,PyCharm,PyScripter など)の利用も便利である.
あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.
Google Colaboratory のノートブックを使うか, 自分のパソコンで Python を動かすなどがありえる.
Google Colaboratory のノートブックを新規作成を行う.
https://colab.research.google.com
Google Colab はオンラインの Python 開発環境. 使用するには Google アカウントが必要
システム Python を使うことができる(その場合,Python のインストールは行わない)
システム Python を用いるときは,pip, setuptools の更新は次のコマンドで行う.
sudo apt -y update sudo apt -y install python3-pip python3-setuptools
Ubuntu で,システム Python 以外の Python をインストールしたい場合は pyenv が便利である: 別ページで説明している.
Python の URL: http://www.python.org/
【Python, pip の使い方】
Python, pip は,次のコマンドで起動できる.
【Python 開発環境のインストール】
JupyterLab, spyder, nteract (Python 開発環境) のインストールは, Windows でコマンドプロンプトを管理者として実行し, 次のコマンドを実行.
python -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
詳しくは,: 別ページで説明している.
JupyterLab, spyder, nteract (Python 開発環境) のインストール: : 別ページで説明している.
コマンドプロンプトを管理者として実行し,次のコマンドを実行.
python -m pip install -U numpy pandas matplotlib seaborn scikit-learn scikit-learn-intelex
端末で,次のコマンドを実行
sudo apt -y update sudo apt -y install python3-numpy python3-pandas python3-seaborn python3-matplotlib python3-sklearn
import pandas as pd
import seaborn as sns
sns.set()
iris = sns.load_dataset('iris')
print(iris.head())
配列(アレイ)の形: サイズは 150 ×5.次元数は 2. 最後の列は,iris.target は花の種類のデータである
print(iris.shape) print(iris.ndim)
print( iris.iloc[:,0:4] )
import numpy as np
import sklearn.decomposition
%matplotlib inline
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore') # Suppress Matplotlib warnings
# 主成分分析
def prin(A, n):
pca = sklearn.decomposition.PCA(n_components=n)
return pca.fit_transform(A)
# 主成分分析で2つの成分を得る
def prin2(A):
return prin(A, 2)
# M の最初の2列を,b で色を付けてプロット.b はラベル
def scatter_label_plot(M, b, alpha):
a12 = pd.DataFrame( M[:,0:2], columns=['a1', 'a2'] )
f = pd.factorize(b)
a12['target'] = f[0]
g = sns.scatterplot(x='a1', y='a2', hue='target', data=a12, palette=sns.color_palette("hls", np.max(f[0]) + 1), legend="full", alpha=alpha)
# lenend を書き換え
labels=f[1]
for i, label in enumerate(labels):
g.legend_.get_texts()[i].set_text(label)
plt.show()
# 主成分分析プロット
def pcaplot(A, b, alpha):
scatter_label_plot(prin2(A), b, alpha)
Iris データセットの0, 1, 2, 3列目については, 主成分分析により,サイズ 150 × 4 を,150 × 2 に変換.
X = iris.iloc[:,0:4].to_numpy() y = iris.iloc[:,4] pcaplot(X, y, 0.4)