こんにちは,デイビッドです.今回は,
教師なし学習(Unsupervised Learning)>PCA Principal Components Analysis(主成分分析)についてです.
教師なし学習
- PCA(主成分分析)
PCA(主成分分析)の理論こんにちは,デイビッドです.今回は, 教師なし学習(Unsupervised Learning)>PCA Principal Components Analysis(主成分分析)についてです. 教師なし学習 PCA(主成分... - k-means法
k-means法の理論こんにちは,デイビッドです.今回は, 教師なし学習(Unsupervised Learning)>k-means法についてです. 教師なし学習 PCA(主成分分析) k-means法 ...
全体に戻る場合はこちら↓
深層学習の理論学習の全体像
こんにちは,デイビッドです.近頃,JDLAのE資格学習を進めており,せっかくなので,学びを残していこうと思います.この記事では,
「機械学習・深層学習の理論学習の全体像について」(学習が渋滞している).
です.
日頃より知識や概念...
PCAとは
統計学と機械学習における次元削減の手法の一つ.PCAは高次元データを低次元に変換し,データの構造やパターンを簡潔に表現する.相関のある多数の変数から,相関のない少数で全体のばらつきを最もよく表す「主成分」を合成する.
PCAの目的は,
- 次元削減:高次元データをより少ない次元に変換し,データの本質的な特徴を保ちながら計算コストを削減
- データの可視化:データを2次元や3次元にプロットし,視覚的に理解しやすくする
- 特徴抽出:重要な特徴を抽出し,データの構造や相関関係を明らかにする
たとえば,BMIは,身長と体重の二次元データを一次元のデータに変換しており,から
制約
- 線形変換のみを使用するため、非線形な関係を捉えにくい。
- 主成分の解釈が難しい場合がある。
- 標準化の影響を受けやすい。
計算手順
- データの標準化:データセットの各特徴量を平均0、分散1に標準化します。これにより、異なるスケールの特徴量が均等に扱われます。
- 共分散行列の計算:データの共分散行列を計算します。共分散行列は、特徴量間の分散と共分散を表します。
- 固有値と固有ベクトルの計算:共分散行列の固有値と固有ベクトルを計算します。固有値はデータのばらつきの大きさを示し、固有ベクトルは新しい次元の方向を示します。
- 主成分の選択:固有値の大きさに基づいて、最も情報を多く含む主成分を選択します。一般的には、累積寄与率が十分に高く(70〜80%以上程度で決めることが多い)なるまで主成分を選びます。削減する次元数を決める.
- データの変換:選ばれた主成分に基づいて元のデータを変換し、新しい低次元のデータを得ます。指定した次元空間に写像する.
適用例
ワインの品種ラベルがついた多次元データを次元削減する.
# 必要なライブラリのインストールとインポート !pip install numpy pandas matplotlib scikit-learn import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler from sklearn.datasets import load_wine # UCIのワインデータセットのロード wine = load_wine() data = wine.data labels = wine.target label_names = wine.target_names # データフレームに変換 df = pd.DataFrame(data, columns=wine.feature_names) df['WineType'] = labels # データの標準化 features = df.columns[:-1] x = df.loc[:, features].values y = df.loc[:, ['WineType']].values x = StandardScaler().fit_transform(x) # PCAの適用 pca = PCA(n_components=2) principal_components = pca.fit_transform(x) principal_df = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2']) # ワインの種類を追加 final_df = pd.concat([principal_df, df[['WineType']]], axis=1) # 結果のプロット fig, ax = plt.subplots(figsize=(8, 6)) wine_types_unique = final_df['WineType'].unique() colors = ['r', 'g', 'b'] for wine_type, color in zip(wine_types_unique, colors): indices_to_keep = final_df['WineType'] == wine_type ax.scatter(final_df.loc[indices_to_keep, 'Principal Component 1'], final_df.loc[indices_to_keep, 'Principal Component 2'], c=color, s=50, label=label_names[wine_type]) ax.legend() ax.set_title('PCA of Wine Types') ax.set_xlabel('Principal Component 1') ax.set_ylabel('Principal Component 2') plt.show()
まとめ
PCAでした.
コメント