logo

Pythonによる主成分分析

主成分分析 これは基本的に、相関がある可能性のある変数の一連の観測値を、線形に相関のない変数の値のセットに変換する統計手順です。

各主成分は、まだ利用可能な分散のほとんどを記述するような方法で選択され、これらすべての主成分は互いに直交します。すべての主成分において、最初の主成分の分散が最大になります。



PCA の用途:

  1. データ内の変数間の相互関係を見つけるために使用されます。
  2. データの解釈と視覚化に使用されます。
  3. 変数の数が減少しているため、さらなる分析が簡単になります。
  4. 集団間の遺伝的距離と関連性を視覚化するためによく使用されます。


これらは基本的に正方対称行列上で実行されます。純粋な二乗和および外積行列、共分散行列、または相関行列を使用できます。個々の分散が大きく異なる場合は、相関行列が使用されます。

PCA の目的:



  1. これは基本的に非依存的な手順であり、属性空間を多数の変数から少数の因子に削減します。
  2. PCA は基本的に次元削減プロセスですが、次元が解釈可能であるという保証はありません。
  3. この PCA の主なタスクは、元の変数が元本金額と最も高い相関関係にあることに基づいて、より大きなセットから変数のサブセットを選択することです。
  4. パターンの特定: PCA は、元のデータでは明らかではない変数間のパターンや関係を特定するのに役立ちます。 PCA は、データの次元を削減することで、データの理解と解釈に役立つ基礎的な構造を明らかにすることができます。
  5. 特徴抽出: PCA を使用すると、元の変数よりも有益または関連性のある一連の変数から特徴を抽出できます。これらの機能は、モデリングやその他の分析タスクで使用できます。
  6. データ圧縮: PCA を使用すると、可能な限り多くの情報を保持しながら、データを表すために必要な変数の数を減らすことで、大規模なデータセットを圧縮できます。
  7. ノイズ低減: PCA を使用すると、データのノイズの多い部分に対応する主成分を特定して除去することで、データセット内のノイズを低減できます。
  8. 視覚化: PCA を使用すると、高次元データを低次元空間で視覚化し、解釈と理解が容易になります。データを主成分に投影することにより、変数間のパターンと関係をより簡単に視覚化できます。

主軸法: PCA は基本的に変数の線形結合を検索し、変数から最大の分散を抽出します。このプロセスが完了すると、それを削除し、基本的に直交因子につながる残りの分散の最大割合についての説明を与える別の線形結合を検索します。この方法では、総分散を分析します。

固有ベクトル: これは、行列の乗算後も平行を保つ非ゼロ ベクトルです。 Mx と x が平行である場合、x が次元 r*r の行列 M の次元 r の固有ベクトルであると仮定します。次に、固有ベクトルと固有値を取得するには、x と A の両方が不明である Mx=Ax を解く必要があります。
固有ベクトルでは、主成分は変数の共通分散と固有分散の両方を示すと言えます。基本的に、これは分散に焦点を当てたアプローチであり、すべてのコンポーネントとの合計の分散と相関を再現しようとします。主成分は基本的に、特定の直交次元の分散を説明するための寄与によって重み付けされた元の変数の線形結合です。

自身の価値観: 基本的には特徴的な根として知られています。基本的には、その要因によって説明されるすべての変数の分散を測定します。固有値の比は、変数に対する因子の説明重要度の比です。係数が低い場合、変数の説明への寄与は小さくなります。簡単に言うと、指定されたデータベースの合計における、要因によって説明される分散の量を測定します。因子の固有値は、すべての変数の因子負荷の 2 乗の合計として計算できます。



では、Python を使った主成分分析を理解しましょう。

実装で使用されるデータセットを取得するには、をクリックします。 ここ

ステップ1: ライブラリのインポート

パイソン
# importing required libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd>

ステップ2: データセットのインポート

データセットをインポートし、データ分析のためにデータセットを X コンポーネントと y コンポーネントに分散します。

パイソン
# importing or loading the dataset dataset = pd.read_csv('wine.csv') # distributing the dataset into two components X and Y X = dataset.iloc[:, 0:13].values y = dataset.iloc[:, 13].values>


ステップ 3: データセットをトレーニング セットとテスト セットに分割する

パイソン
# Splitting the X and Y into the # Training set and Testing set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)>

ステップ 4: 機能のスケーリング

標準スケールのフィッティングなど、トレーニングおよびテスト セットの前処理部分を実行します。

パイソン
# performing preprocessing part from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test)>

ステップ5: PCA機能を適用する

PCA 関数をトレーニングおよびテスト セットに適用して分析します。

パイソン
# Applying PCA function on training # and testing set of X component from sklearn.decomposition import PCA pca = PCA(n_components = 2) X_train = pca.fit_transform(X_train) X_test = pca.transform(X_test) explained_variance = pca.explained_variance_ratio_>

ステップ6: ロジスティック回帰をトレーニングセットに当てはめる

パイソン
# Fitting Logistic Regression To the training set from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state = 0) classifier.fit(X_train, y_train)>

出力:

ステップ 7: テストセットの結果の予測

パイソン
# Predicting the test set result using  # predict function under LogisticRegression  y_pred = classifier.predict(X_test)>


ステップ8: 混同行列の作成

パイソン
# making confusion matrix between # test set of Y and predicted value. from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred)>


ステップ9: トレーニングセットの結果を予測する

パイソン
# Predicting the training set # result through scatter plot  from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], color = ListedColormap(('red', 'green', 'blue'))(i), label = j) plt.title('Logistic Regression (Training set)') plt.xlabel('PC1') # for Xlabel plt.ylabel('PC2') # for Ylabel plt.legend() # to show legend # show scatter plot plt.show()>

出力:

ステップ 10: テストセットの結果の視覚化

パイソン
# Visualising the Test set results through scatter plot from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], color = ListedColormap(('red', 'green', 'blue'))(i), label = j) # title for scatter plot plt.title('Logistic Regression (Test set)') plt.xlabel('PC1') # for Xlabel plt.ylabel('PC2') # for Ylabel plt.legend() # show scatter plot plt.show()>

新しい主成分空間でデータを視覚化できます。

パイソン
# plot the first two principal components with labels y = df.iloc[:, -1].values colors = ['r', 'g'] labels = ['Class 1', 'Class 2'] for i, color, label in zip(np.unique(y), colors, labels): plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], color=color, label=label) plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.legend() plt.show() 7>

これは、Python を使用して PCA を実行する方法の簡単な例です。このコードの出力は、最初の 2 つの主成分とそれらの説明された分散比の散布図になります。適切な数の主成分を選択することで、データセットの次元を削減し、データの理解を向上させることができます。

if else if else if Java