主成分分析(PCA)
複数の数値列をまとめて、主成分1、主成分2… という少ない数の列に置き換えます。主成分ごとの寄与率と固有ベクトルも出るので、どこまで使えば元の情報をどれくらい保てるかを数字で決められます。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | まとめたい数値列を持つデータ |
| 出力データ | 主成分1、主成分2… の列。「処理後残す列」で選んだ列は左側にそのまま付きます |
| 固有ベクトル | 元の列が各主成分にどれだけ効いているか |
| 寄与率など | 主成分ごとの固有値・固有値の標準偏差・寄与率・累積寄与率 |
バイプロットはボニートくんで開きます。 ノードのポートには出ません。実行したあとプレビューフィールドの右上に出るボタンを押すと、そのままバイプロットが開きます(この機能のボニートくんはこの 1 ページだけです)。
元の対象列は出力データに残りません。 残したい列は「処理後残す列を選択する」で選んでください。
Spark エンジンでは動きません。
設定項目
- 処理対象列を選択
- まとめる元の列。数値の列を複数選びます。
- 処理後残す列を選択する
- 主成分と一緒に残しておく列。ID や名前など、後から見分けに使う列を選びます。
アルゴリズムオプション
- 標準化する
- 列ごとに尺度を揃えてから計算します。単位の違う列を混ぜるときは ONにしてください。売上(円)と件数(回)をそのまま混ぜると、数の大きい列に引きずられます。
- 白色化する
- 主成分どうしの大きさを揃えます。後ろで機械学習に使うときに効きます。
- 次元数を指定
- いくつの主成分にまとめるか。空にすると作れるだけ作ります(ふつうは対象列と同じ数)。対象列の数より大きい値を入れると、入れなかったのと同じ扱いになります。
- 乱数シードを固定する
- 整数を入れると毎回同じ結果になります。考え方は乱数シードを参照。
グラフオプション
- 色分けする列を選択
- 散布図の点を色分けする列。グループごとのまとまりを見たいときに使います。
- ラベルとして表示させる列を選択
- 点の脇に出す文字。どの行がどこにあるかを確かめたいときに使います。
寄与率の読み方
「寄与率など」のポートに、主成分ごとの寄与率と累積寄与率が入っています。 累積寄与率は上から足し上げた値なので、どこまで使えば元の情報をどれくらい保てるかが読めます。
| 列 | 中身 |
|---|---|
| 主成分 | 主成分1、主成分2… |
| 固有値 | その主成分が持つばらつきの大きさ |
| 固有値の標準偏差 | 固有値の平方根 |
| 寄与率 | 全体のばらつきのうち、その主成分が占める割合 |
| 累積寄与率 | 第 1 主成分からそこまでを足した割合 |
バイプロットの読み方
点が 1 行、赤い矢印が元の列 1 つです。 横軸が第 1 主成分、縦軸が第 2 主成分で、3 つめ以降の主成分は描かれません。
| 見るところ | 読み方 |
|---|---|
| 矢印の向き | その列が大きい行は、矢印の向いている側に寄ります |
| 矢印の長さ | 長いほど、第 1・第 2 主成分への効きが大きい列です |
| 2 本の矢印のなす角 | 狭いほど一緒に動く列、180 度に近いほど逆に動く列、直角に近いほど関係の薄い列です |
| 点と矢印の位置 | 矢印の先のほうにある点ほど、その列の値が大きい行です |
| 点のかたまり | 近い点どうしは、選んだ列全体の傾向が似ている行です |
色分け・ラベルはグラフオプションで付けます。 下の例 4 を参照してください。
エラーと対処
どのエラーも、入力データか設定を直して実行し直せば消えます。
処理対象列に欠損値がある
処理対象列に欠損値が含まれています。欠損値を除外するか補完してください。
直し方 — 欠損値処理で埋めるか、欠損のある行を外します
処理対象列に数値以外がある
処理対象列に数値型以外のデータが含まれてます。型変換をするか、数値型以外の列を除去してください。
直し方 — 列の型変更で数値にするか、その列を外します
よく使う例
1. 列が多すぎるので減らす
お題 — 説明変数が 50 列あり、学習が重い
入力 — 数値列が 50 列あるデータ
設定 — 処理対象列に 50 列を選び、次元数に 5。「処理後残す列」に顧客 ID を選ぶ
出力 — 顧客 ID と 主成分1〜主成分5 だけのデータ。そのままオートMLの説明変数に使えます
2. 何成分まで使えばよいか決める
お題 — 次元数をいくつにすればよいか分からない
入力 — 同上
設定 — 次元数を空のまま実行する
出力 — 「寄与率など」のポートに全主成分の累積寄与率が出る。たとえば第 5 主成分までで 0.9 を超えていれば、次元数 5 で入れ直す
3. 単位の違う列を混ぜる
お題 — 売上(円)と件数(回)を一緒にまとめたい
入力 — 単位の違う数値列を持つデータ
設定 — アルゴリズムオプションの 標準化する にチェック
出力 — 数の大きい列に引きずられず、どの列も同じ重みで効いた主成分になる
4. どの行がどこにいるか確かめる
お題 — バイプロットで、外れている点がどの行か知りたい
入力 — 同上
設定 — グラフオプションの「ラベルとして表示させる列を選択」に名前の列、「色分けする列を選択」に区分の列
出力 — ボニートくんのバイプロットで、点の脇に名前が出て区分ごとに色が分かれる