[数学モデリング] 一般的なアルゴリズムの Python 実装 - 主成分分析 PCA

1 はじめに

この記事では主に主成分分析 (PCA) の Python 実装について説明し、分析例については後ほど説明します。

2 原則 - コードの実装

2.1 実装手順

主成分分析 PCA は広く使用されている次元削減手法であり、その実現は次のように要約されます。ここに画像の説明を挿入

2.2 コードの実装

インポートパッケージ

import numpy as np
  • 計算共分散行列関数
    X を入力データとして定義します。m はサンプル データの数、つまり X の行数です。
    X を標準化するには、平均を引いて分散で割るという方法がありますが、この部分の原理が理解できない場合は、Baidu を参照してください。
    標準化されたデータは、平均 0、分散 1 の標準正規分布です。
# 计算协方差矩阵
def calc_cov(X):
    m = X.shape[0] # 样本的数量,行数
    # 数据标准化
    X = (X - np.mean(X, axis=0)) / np.var(X, axis=0) # 标准化之后均值为0,方差为1
    return 1 / m * np.matmul(X.T, X) # matmul为两个矩阵的乘积
  • PCA を定義するプロセスでは、
    まず入力データ X の共分散を計算し、次にその固有値を次のように計算します。固有値、その固有ベクトルを次のように計算します。固有ベクトルは、np.linalg.eig() 関数を使用して固有値
    と固有ベクトルを計算します。これは非常に便利です。
    次のステップでは、行列 P を計算し、Y=XP を使用して次元削減されたデータ Y を計算します。
def pca(X, n_components):
    # 计算协方差矩阵
    cov_matrix = calc_cov(X)
    # 计算协方差矩阵的特征值和对应特征向量
    eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) # eigenvalues特征值,eigenvectors特征向量
    # 对特征值排序
    idx = eigenvalues.argsort()[::-1]
    # 取最大的前n_component组
    eigenvectors = eigenvectors[:, idx]
    eigenvectors = eigenvectors[:, :n_components]
    # Y=XP转换
    return np.matmul(X, eigenvectors)

2.3 アイリスデータセットの例

データのインポート

from sklearn import datasets
import matplotlib.pyplot as plt
# 导入鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

データの形状を見ると、結果は (150, 4) になります。

X.shape
# (150, 4)

共分散行列を計算する

cov_matrix = calc_cov(X) # 计算特征值
cov_matrix

ここに画像の説明を挿入
共分散行列が 4*4 行列であることがわかり、行列の固有値と固有ベクトルを計算します。

eigenvalues, eigenvectors = np.linalg.eig(cov_matrix) # eigenvalues特征值,eigenvectors特征向量

ここに画像の説明を挿入
次に、必要な P を計算します。ここでは 3 つの主成分を保持します。

idx = eigenvalues.argsort()[::-1]
# 取最大的前n_component组
eigenvectors = eigenvectors[:, idx]
eigenvectors = eigenvectors[:, :3]

4 行 3 列の行列が取得され
ここに画像の説明を挿入
、P を使用して次元削減されたデータが取得されます。

# Y=PX转换
np.matmul(X, eigenvectors)

次元削減後のデータは、(150, 4)*(4, 3)=(150, 3)、
つまり3列150個のデータとなり、元の4次元から3次元に削減されます。
ここに画像の説明を挿入

3 Sklearnに基づく実装

# 导入sklearn降维模块
from sklearn import decomposition
# 创建pca模型实例,主成分个数为3个
pca = decomposition.PCA(n_components=3) # 写我们需要几个主成分
# 模型拟合
pca.fit(X)
# 拟合模型并将模型应用于数据X
X_trans = pca.transform(X)

# 颜色列表
colors = ['navy', 'turquoise', 'darkorange']
# 绘制不同类别
for c, i, target_name in zip(colors, [0,1,2], iris.target_names):
    plt.scatter(X_trans[y == i, 0], X_trans[y == i, 1], 
            color=c, lw=2, label=target_name)
# 添加图例
plt.legend()
plt.show()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_44319167/article/details/128839122