特異値分解(SVD:Singular Value Decomposition)は、線形代数における行列の因数分解手法であり、正規行列の対角化を一般化したもので、行列 X を3つの成分 X = U S V' に分解します。SVD は信号処理および統計分析において広く利用されています。
仕組み
SVD では、入力行列 X(m 行 × n 列)を以下の3つの出力行列に因数分解します:
| 出力 | 次元 | 説明 |
|---|---|---|
| U | m × sgNum | 左特異ベクター(ユニタリ行列) |
| S | sgNum × sgNum | 特異値を対角成分に持つ対角行列(散乱行列) |
| V | n × sgNum | 右特異ベクター(V 行列) |
ここで、sgNum は実際に計算される特異値の個数(要求された k よりも少ない場合があります)、m は入力テーブルの行数、n は列数です。
コンポーネントの設定
Machine Learning Platform for AI コンソールを使用する
| タブ | パラメーター | 説明 |
|---|---|---|
| フィールド設定 | 特徴量カラム | キーと値のペアを格納するカラムです。キーと値はコロン (:) で区切り、複数のキーと値のペアはカンマ (,) で区切ります。 |
| パラメーター設定 | 保持する特異値の個数 | 上位 N 個の特異値を計算します。デフォルトではすべての特異値を計算します。 |
| パラメーター設定 | 精度誤差 | 収束判定における許容誤差精度です。 |
| チューニング | ノードあたりのメモリサイズ | 各ノードに割り当てるメモリ量(MB 単位)です。ノード数 と併用する必要があります。有効な値:1~9999(正の整数)。 |
| チューニング | ノード数 | 計算ノードの数です。有効な値:1024~64 × 1024(正の整数)。 |
| チューニング | 有効期間 | 出力テーブルの有効期間(日単位)です。 |
コマンドを使用する
コマンドラインから SVD ジョブを実行します:
PAI -name svd
-project algo_public
-DinputTableName=bank_data
-DselectedColNames=col0
-DenableSparse=true
-Dk=5
-DoutputUTableName=u_table
-DoutputVTableName=v_table
-DoutputSTableName=s_table;入力パラメーター
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
inputTableName | はい | — | トレーニングに使用する入力テーブルです。 |
selectedColNames | いいえ | すべてのカラム | 含めるカラムの一覧(カンマ区切り)。スパース入力には STRING 型カラムを、デンス入力には INT 型または DOUBLE 型カラムを使用します。 |
inputTablePartitions | いいえ | すべてのパーティション | 読み取る入力テーブルのパーティションです。形式: partition_name=value。マルチレベルパーティションの場合は:name1=value1/name2=value2;。複数のパーティションを指定する場合は、カンマで区切ります。 |
enableSparse | いいえ | false | 入力データがスパース形式(キーと値のペア)である場合、true を指定します。 |
itemDelimiter | いいえ | 半角スペース | スパース形式におけるキーと値のペア間の区切り文字です。 |
kvDelimiter | いいえ | : | スパース形式におけるキーと値の間の区切り文字です。 |
k | はい | — | 計算する特異値の個数です。実際の返却数は k より少なくなる場合があります。 |
tol | いいえ | 1.0e-06 | 収束判定のエラーしきい値です。 |
出力パラメーター
| パラメーター | 必須 | 説明 |
|---|---|---|
outputUTableName | はい | U 行列(m × sgNum)の出力テーブルです。 |
outputSTableName | はい | S 行列(sgNum × sgNum)の出力テーブルです。 |
outputVTableName | はい | V 行列(n × sgNum)の出力テーブルです。 |
リソースパラメーター
| パラメーター | 必須 | デフォルト | 説明 |
|---|---|---|---|
coreNum | いいえ | システムデフォルト | コア数です。memSizePerCore と併用する必要があります。有効な値:1~9999(正の整数)。 |
memSizePerCore | いいえ | システムデフォルト | コアあたりのメモリ量(MB 単位)です。coreNum と併用する必要があります。有効な値:1024~64 × 1024(正の整数)。 |
lifecycle | いいえ | — | 出力テーブルの有効期間(日単位、正の整数)です。 |
例
この例では、6 行・最大 100,000 列のスパース入力テーブルに対して SVD を実行し、上位 5 個の特異値を計算します。
ステップ 1:入力テーブルを作成します。
DROP TABLE IF EXISTS svd_test_input;
CREATE TABLE svd_test_input
AS
SELECT *
FROM
(
SELECT '0:3.9079 2:0.0009 3:0.0416 4:0.17664 6:0.36460 8:0.091330' AS col0
UNION ALL
SELECT '0:0.09229 2:0.4872172 5:0.5267 8:0.4544 9:0.23317' AS col0
UNION ALL
SELECT '1:0.8312 3:0.9317 5:0.5680 7:0.5560 9:0.0508' AS col0
UNION ALL
SELECT '2:0.767 5:0.01891 8:0.25235' AS col0
UNION ALL
SELECT '0:0.29819 2:0.87598086 6:0.5315568' AS col0
UNION ALL
SELECT '0:0.920260 2:0.5154311513 4:0.8104 5:0.188420 8:0.88' AS col0
) a;ステップ 2:SVD ジョブを実行します。
PAI -name svd
-project algo_public
-DinputTableName=svd_test_input
-DselectedColNames=col0
-DenableSparse=true
-Dk=5
-DoutputUTableName=u_table
-DoutputVTableName=v_table
-DoutputSTableName=s_table;