

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# PCA の仕組み
<a name="how-pca-works"></a>

主成分分析法 (PCA) は、できる限りの情報を保持しながら、データセット内の次元 (特徴の数) を縮退させる学習アルゴリズムです。

PCA は、互いに相関しない元の特徴のコンポジットである、*成分*と呼ばれる新しい特徴のセットを見つけることで次元を縮退させます。最初の成分はデータ内で考えられる最大の変動性、2 番目の成分は 2 番目に大きな変動性と続きます。

これは教師なしの次元縮退アルゴリズムです。教師なしの学習では、トレーニングデータセット内のオブジェクトに関連付けられている可能性のあるラベルは使用されません。

行 ![\[x_1,…,x_n\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-39b.png) の各次元が `1 * d` である行列を入力すると、データはミニバッチの行に分割され、トレーニングノード (ワーカー) に分配されます。各ワーカーは、その後そのデータのサマリーを計算します。計算終了後、個々のワーカーのサマリーは 1 つの解に統一されます。

**モード**

Amazon SageMaker AI の PCA アルゴリズムは、状況に応じて、次の 2 つのモードのいずれかを使用してこれらのサマリーを計算します。
+ **regular**: 疎データと標準的な数の観測および特徴を備えたデータセットの場合。
+ **randomized**: 多数の観測および特徴の両方を備えたデータセットの場合。このモードは近似アルゴリズムを使用します。

アルゴリズムの最後のステップでは、統一解に対して特異値分解を実行し、主成分はそこから派生します。

## モード 1: Regular
<a name="mode-1"></a>

ワーカーは、![\[Equation in text-form: \sum x_i^T x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-1b.png) と ![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-2b.png) の両方を計算します。

**注記**  
![\[Equation in text-form: x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-3b.png) は行ベクトル `1 * d` であるため、![\[Equation in text-form: x_i^T x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-4b.png) は行列です (スカラーではありません)。コード内で行ベクトルを使用すると、キャッシュを効率的に取得できます。

共分散行列は ![\[Equation in text-form: \sum x_i^T x_i - (1/n) (\sum x_i)^T \sum x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-32b.png) という式で計算され、その上位の特異ベクトル `num_components` がモデルを形成します。

**注記**  
`subtract_mean` が `False` である場合、![\[Equation in text-form: \sum x_i\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-2b.png) の計算と減算は回避します。

ベクトルの次元 `d` が十分に小さく、![\[Equation in text-form: d^2\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-7b.png) がメモリに収まる場合に、このアルゴリズムを使用します。

## モード 2: Randomized
<a name="mode-2"></a>

入力データセット内の特徴の数が多い場合は、共分散行列を近似するメソッドを使用します。次元 `b * d` のすべてのミニバッチ ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-23b.png) において、各ミニバッチで乗算する行列 `(num_components + extra_components) * b` をランダムに初期化し、行列 `(num_components + extra_components) * d` を作成します。これらの行列の合計はワーカーによって計算され、サーバーが最終的な `(num_components + extra_components) * d` 行列に対して SVD を実行します。右上のその `num_components` 特異ベクトルは、入力行列の上位の特異ベクトルの近似値です。

![\[Equation in text-form: \ell\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-38b.png) ` = num_components + extra_components` であるとします。次元 `b * d` のミニバッチ ![\[Equation in text-form: X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-23b.png) が指定されると、ワーカーは次元 ![\[Equation in text-form: \ell * b\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-38.png) のランダム行列 ![\[Equation in text-form: H_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-24b.png) を抽出します。環境で GPU と CPU のどちらが使用されているかに応じて、および次元のサイズに応じて、行列は、各エントリが `+-1` であるランダム符号行列である場合と、*FJLT* (高速 Johnson Lindenstrauss 変換、詳細については [FJLT Transforms (FJLT 変換)](https://www.cs.princeton.edu/~chazelle/pubs/FJLT-sicomp09.pdf) とそのフォローアップ論文を参照) である場合があります。その後、ワーカーは ![\[Equation in text-form: H_t X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-26b.png) を計算し、![\[Equation in text-form: B = \sum H_t X_t\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-27b.png) を保持します。ワーカーは、![\[Equation in text-form: h^T\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-28b.png)、![\[Equation in text-form: H_1,..,H_T\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-29b.png) の列の合計 (`T` はミニバッチの総数)、`s` (すべての入力行の合計) も保持します。データの全シャードを処理した後、ワーカーはサーバーに `B`、`h`、`s`、および `n` (入力行の合計数) を送信します。

サーバーへの各種入力は ![\[Equation in text-form: B^1, h^1, s^1, n^1,…\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-30b.png) と表記します。サーバーは、`B`、`h`、`s`、`n` (それぞれの入力の合計) を計算します。さらに ![\[Equation in text-form: C = B – (1/n) h^T s\]](http://docs.aws.amazon.com/ja_jp/sagemaker/latest/dg/images/PCA-31b.png) を計算し、その特異値分解を見つけます。右上の特異ベクトルと `C` の特異値が問題に対する近似解として使用されます。