MADlib——基于SQL的数据挖掘解决方案(19)——回归之聚类方差

2019-05-25 19:36:32 浏览数 (1)

Clustered Variance模块调整聚类的标准误。例如,将一个数据集合复制100次,不应该增加参数估计的精度,但是在符合独立同分布假设(Independent Identically Distributed,IID)下执行这个过程实际上会提高精度。另一个例子是在教育经济学的研究中,有理由期望同一个班里孩子的误差项不是独立的。聚类标准误可以解决这个问题。

MADlib的聚类方差(Clustered Variance)模块包含计算线性、逻辑和多类逻辑回归问题的函数。

聚类方差线性回归训练函数

聚类方差线性回归训练函数具有以下语法:

代码语言:javascript复制
clustered_variance_linregr ( source_table,
                             out_table,
                             dependent_varname,
                             independent_varname,
                             clustervar,
                             grouping_cols
                           )

参数

source_table:TEXT类型,包含训练数据的表的名称。

out_table:VARCHAR类型,包含输出模型的生成表的名称。输出表包含以下列:

  • coef:DOUBLE PRECISION[]类型,回归系数向量。
  • std_err:DOUBLE PRECISION[]类型,系数标准误向量。
  • t_stats:DOUBLE PRECISION[]类型,系数的t统计向量。
  • p_values:DOUBLE PRECISION[]类型,系数的p值向量。

还会创建一个名为<out_table>_summary的汇总表,它与linregr_train函数创建的汇总表相同。有关详细信息,请参阅线性回归的文档。

dependent_varname:TEXT类型,用于评估因变量的表达式。

independent_varname:TEXT类型,用于评估自变量的表达式。

clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。

grouping_cols(可选):TEXT类型,缺省值为NULL,当前未实现,忽略任何非NULL值。一个列表表达式,类似于SQL GROUP BY子句,用于将输入数据集分组为离散组,每组运行一次​​回归。当此值为空时,不使用分组,并生成单个结果模型。

聚类方差逻辑回归训练函数

聚类方差逻辑回归训练函数具有以下语法:

代码语言:javascript复制
clustered_variance_logregr( source_table,
                            out_table,
                            dependent_varname,
                            independent_varname,
                            clustervar,
                            grouping_cols,
                            max_iter,
                            optimizer,
                            tolerance,
                            verbose_mode
                          )

参数

source_table:TEXT类型,包含训练数据的表的名称。

out_table:VARCHAR类型,包含输出模型的生成表的名称。输出表包含以下列:

  • coef:回归系数向量。
  • std_err:系数标准误向量。
  • z_stats:DOUBLE PRECISION[]类型,系数的z统计向量。
  • p_values:DOUBLE PRECISION[]类型,系数的p值向量。

还会创建一个名为<out_table>_summary的汇总表,它与logregr_train函数创建的汇总表相同。有关详细信息,请参阅逻辑回归的文档。

dependent_varname:TEXT类型,用于评估因变量的表达式。

independent_varname:TEXT类型,用于评估自变量的表达式。

clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。

grouping_cols(可选):TEXT类型,缺省值为NULL,当前未实现,忽略任何非NULL值。一个列表表达式,类似于SQL GROUP BY子句,用于将输入数据集分组为离散组,每组运行一次​​回归。当此值为空时,不使用分组,并生成单个结果模型。

max_iter(可选):INTEGER类型,缺省值为20。允许的最大迭代次数。

Optimizer(可选):TEXT类型,缺省值为‘irls’。使用的优化器名称:

  • ‘newton’或‘irls’:迭代再加权的最小二乘。
  • ‘cg’: 共轭梯度。
  • ‘igd’:递增梯度下降。

Tolerance(可选):FLOAT8类型,缺省值为0.0001。表明收敛的连续迭代中对数似然值之间的差异,以便在n次迭代完成后停止执行。零不能用作收敛标准。

verbose_mode(可选):BOOLEAN类型,缺省值为FALSE。提供训练结果的详细输出。

聚类方差多类逻辑回归训练函数

代码语言:javascript复制
clustered_variance_mlogregr( source_table,
                             out_table,
                             dependent_varname,
                             independent_varname,
                             cluster_varname,
                             ref_category,
                             grouping_cols,
                             optimizer_params,
                             verbose_mode
                           )

参数

source_table:TEXT类型,包含输入数据的表的名称。

out_table:TEXT类型,存储回归模型的表的名称。输出表包含以下列:

  • category:类别。
  • ref_category:用于建模的参考类别。
  • coef:回归系数向量。
  • std_err:系数标准误向量。
  • z_stats:系数z统计向量。
  • p_values:系数p值向量。

还会创建一个名为<out_table>_summary的汇总表,它与mlogregr_train函数创建的汇总表相同。有关详细信息,请参阅多类逻辑回归的文档。

dependent_varname:TEXT类型,用于评估因变量的表达式。

independent_varname:TEXT类型,用于评估自变量的表达式。

cluster_varname TEXT类型,用作聚类变量列的逗号分隔列表。

ref_category(可选):INTEGER类型,范围在[0,num_category)中的引用类别。

groupingvarng_cols(可选):TEXT类型,缺省值为NULL,当前未实现,忽略任何非NULL值。用作分组变量的逗号分隔列列表。

optimizer_params(可选):TEXT类型,缺省值为NULL,使用优化器参数的默认值: max_iter=20, optimizer=‘newton’, tolerance=1e-4。应该是一个包含由逗号分隔的‘key = value’对的字符串。

verbose_mode(可选):BOOLEAN类型,缺省值为FALSE。如果为TRUE,则在计算逻辑回归时打印详细信息。

Cox比例风险模型的聚类方差

Cox比例危险模型的聚类稳健方差估计函数具有以下语法:

代码语言:javascript复制
clustered_variance_coxph(model_table,output_table, clustervar)

参数

model_table:TEXT类型。模型表的名称,与coxph_train()函数的‘output_table’参数完全相同。

output_table:TEXT类型。保存输出表的名称,有以下几列:

  • coef:FLOAT8[]类型,系数向量。
  • loglikelihood:FLOAT8类型,极大似然估计(Maximum Likelihood Estimate,MLE)的对数似然值。
  • std_err:FLOAT8[]类型,系数标准误向量。
  • clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。
  • clustered_se:FLOAT8[]类型,系数的稳健标准误向量。
  • clustered_z:FLOAT8[]类型,系数的稳健z统计向量。
  • clustered_p:FLOAT8[]类型,系数的稳健p值向量。
  • hessian:FLOAT8[][]类型,黑塞矩阵(Hessian Matrix)。

clustervar:TEXT类型,用作聚类变量列的逗号分隔列表。

示例

1. 查看聚类方差线性回归函数的联机帮助。

代码语言:javascript复制
SELECT madlib.clustered_variance_linregr();

2. 运行线性回归函数并查看结果。

代码语言:javascript复制
DROP TABLE IF EXISTS out_table;
SELECT madlib.clustered_variance_linregr( 'abalone',
                                          'out_table',
                                          'rings',
                                          'ARRAY[1, diameter, length, width]',
                                          'sex',
                                          NULL
                                        );
SELECT * FROM out_table;

3. 查看聚类方差逻辑回归函数的联机帮助。

代码语言:javascript复制
SELECT madlib.clustered_variance_logregr();

4. 运行逻辑回归函数并查看结果。

代码语言:javascript复制
DROP TABLE IF EXISTS out_table;
SELECT madlib.clustered_variance_logregr( 'abalone',
                                          'out_table',
                                          'rings < 10',
                                          'ARRAY[1, diameter, length, width]',
                                          'sex'
                                        );
SELECT * FROM out_table;

5. 查看聚类方差多类逻辑回归函数的联机帮助。

代码语言:javascript复制
SELECTmadlib.clustered_variance_mlogregr();

6. 运行多类逻辑回归并查看结果。

代码语言:javascript复制
DROP TABLE IF EXISTS out_table;
SELECT madlib.clustered_variance_mlogregr( 'abalone',
                                           'out_table',
                                           'CASE WHEN rings < 10 THEN 1 ELSE 0 END',
                                           'ARRAY[1, diameter, length, width]',
                                           'sex',
                                           0
                                         );
SELECT * FROM out_table;

7. 运行Cox比例风险回归,并计算聚类稳健估计。

代码语言:javascript复制
DROP TABLE IF EXISTS lung_cl_out;
DROP TABLE IF EXISTS lung_out;
DROP TABLE IF EXISTS lung_out_summary;
SELECT madlib.coxph_train('lung',
                          'lung_out',
                          'time',
                          'array[age, "ph.ecog"]',
                          'TRUE',
                          NULL,
                          NULL);
SELECT madlib.clustered_variance_coxph('lung_out',
                                       'lung_cl_out',
                                       '"ph.karno"');
SELECT * FROM lung_cl_out;

注意

请注意,我们需要在自变量表达式中手动包含一个截距项。groupingvar的NULL值表示在计算中没有分组。

技术背景

假设数据可以分成

个簇。通常这可以通过根据一列或多列对数据表进行分组来完成。估计量与通常的三明治估计量具有相似的形式:

面包部分与Huber-White三明治估计量相同

其中

是作为目标函数二阶导数的黑塞矩阵:

肉的部分是不同的:

其中

的第

行为:

其中

是属于同一个聚类的一组行。

我们可以通过一个聚合函数在一次扫描数据表期间,计算每个聚类的

的数量,然后在聚合函数外部将所有聚类汇总得到完整

。最后,矩阵多项式在主节点上的一个单独的函数中完成。

在计算多类逻辑回归的聚类方差时,它使用默认的参考类别为零,回归系数包含在输出表中。输出的回归系数与多类逻辑回归函数的顺序相同。对于K个因变量(1,...,K)和J个类别(0,...,J-1)的问题,令

表示因变量k和类别j的系数。输出是

。该顺序与函数marginal_mlogregr的多类回归边际效应计算不一致。这是故意为之,因为所有多类回归(稳健、聚类、...)的接口将被移动到匹配边际效应使用的接口中。

0 人点赞