前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MADlib——基于SQL的数据挖掘解决方案(19)——回归之聚类方差

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

作者头像
用户1148526
发布2019-05-25 19:36:32
7190
发布2019-05-25 19:36:32
举报
文章被收录于专栏:Hadoop数据仓库Hadoop数据仓库

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的多类回归边际效应计算不一致。这是故意为之,因为所有多类回归(稳健、聚类、...)的接口将被移动到匹配边际效应使用的接口中。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年02月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档