すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:特異値分解

最終更新日:Apr 01, 2026

特異値分解(SVD:Singular Value Decomposition)は、線形代数における行列の因数分解手法であり、正規行列の対角化を一般化したもので、行列 X を3つの成分 X = U S V' に分解します。SVD は信号処理および統計分析において広く利用されています。

仕組み

SVD では、入力行列 X(m 行 × n 列)を以下の3つの出力行列に因数分解します:

出力次元説明
Um × sgNum左特異ベクター(ユニタリ行列)
SsgNum × sgNum特異値を対角成分に持つ対角行列(散乱行列)
Vn × 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;