奇异值分解

奇异值分解(Singular Value Decomposition)是线性代数中一种重要的矩阵分解,是矩阵分析中正规矩阵求对角化的推广。在信号处理、统计学等领域有重要应用。

背景信息

奇异值分解的公式为X = U S V’

参数配置

您可以使用以下任意一种方式,配置奇异值分解组件参数。

方式一:可视化方式

Designer工作流页面配置组件参数。

页签

参数

描述

字段设置

选择特征列

存放k:v,k:v格式的列。

参数设置

保留奇异值个数

期望求解的top奇异组个数。默认求解全部奇异组。

精度误差

允许的期望的误差精度。

执行调优

单个节点内存大小

单位为兆,与节点个数参数配对使用,取值为[1024, 64*1024]的正整数。

节点个数

取值为[1, 9999]的正整数。

生命周期

指定输出表的生命周期。

方式二:PAI命令方式

使用PAI命令方式,配置该组件参数。您可以使用SQL脚本组件进行PAI命令调用,详情请参见SQL脚本

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类型。如果是表,支持INTDOUBLE类型。

默认选择所有列。

inputTablePartitions

输入表中指定参与分析的分区,格式为Partition_name=value

如果是多级分区,格式为name1=value1/name2=value2,

如果指定多个分区,则需要使用,隔开。

默认选择所有分区。

outputUTableName

U矩阵的输出表,维度是m * sgNum。其中,m为数据表的行数,sgNum为计算出的奇异值个数。

outputSTableName

S矩阵的输出表,维度是sgNum * sgNum。其中,sgNum为计算出的奇异值个数。

outputVTableName

V矩阵的输出表,维度是n * sgNum。其中,n是矩阵的列数,sgNum是计算出的奇异值个数。

k

期望的奇异值个数。

输出的结果为可能比K值小的正整数。

tol

收敛误差

1.0e-06

enableSparse

输入数据是否为稀疏格式:

  • true

  • false

false

itemDelimiter

指当输入表数据为稀疏格式时,kv间的分隔符。

空格

kvDelimiter

指当输入表数据为稀疏格式时,keyvalue的分隔符。

冒号

coreNum

节点个数。与memSizePerCore参数配对使用,取值为[1, 9999]的正整数。

系统自动分配。

memSizePerCore

单个节点内存大小,单位为兆。取值为[1024, 64*1024]的正整数。

系统自动分配。

lifecycle

指定输出表的生命周期。取值为正整数。

示例

  • 数据生成

    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;
  • PAI命令

    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;
  • 算法规模:10万列。