分解类别变量具有多个级别的原则方法?


58

有哪些技术可用于将多个类别折叠(或合并)成几个类别,以便在统计模型中将它们用作输入(预测变量)?


考虑像大学生专业这样的变量(由本科生选择的学科)。它是无序的和绝对的,但它可能具有许多不同的层次。假设我想在回归模型中使用major作为预测变量。

按原样使用这些级别进行建模会导致各种问题,因为存在的问题太多了。使用它们会丢弃很多统计精度,并且结果难以解释。我们很少对特定专业感兴趣-我们更可能对广泛的专业类别(子组)感兴趣。但是,并不总是很清楚如何将这些级别划分为这些更高级别的类别,或者甚至要使用多少个更高级别的类别。

对于典型数据,我很乐意使用因子分析,矩阵分解或离散的潜在建模技术。但是专业是互斥的类别,因此我不愿意在任何事情上利用它们的协方差。

此外,我自己并不关心主要类别。我关心产生与我的回归结果相关的更高层次的类别。在二元结果的情况下,对我而言,这建议使用诸如线性判别分析(LDA)之类的方法来生成可最大化判别性能的高级类别。但是LDA是一种受限制的技术,感觉像是肮脏的数据正在挖给我。而且,任何连续的解决方案都将难以解释。

同时,在这种情况下,基于协方差的东西(如多重对应分析(MCA))在我看来是令人怀疑的,因为互斥的虚拟变量之间存在内在的依赖关系-它们更适合用于研究多个类别变量,而不是研究多个类别变量相同的变量。

编辑:要清楚,这是关于折叠类别(不选择它们),并且类别是预测变量或自变量。事后看来,这个问题似乎是“正规化所有事物并让上帝整理出它们的合适时机”。很高兴看到这个问题对很多人都感兴趣!


2
在我对stats.stackexchange.com/questions/230636/的评论中, 我在这里列出了一堆类似的问题!看看...此外,使用关键字“许多级别”搜索该网站,您会发现许多类似的问题,很少有好的答案。
kjetil b halvorsen

3
我将在有时间的时候回到这个问题上……与此同时,以下是一篇非常相关的论文,似乎在一定程度上回答了这个问题: epub.ub.uni-muenchen.de/12164/1/petry_etal_TR102_2011。 pdf
kjetil b halvorsen

2
我不认为我有这个问题,我的自然冲动实际上是添加更多的虚拟变量来编码层次结构(可以说您可以想到的尽可能多的不同层次结构),然后使用L1 / L2正则化来确保顶级类别选择而不是更精细的级别类别。专业等的问题是,显然没有相似性(当表示为虚拟变量时),因此要获得良好的模型(允许泛化),您需要提供相似性
seanv507

1
@ssdecontrol,是的,我的典型示例是电话号码(或其他ID)。基本上,当被问到如何使用它们建模时,正确的答案是-不要!
seanv507 '16

2
如果要推断层次结构,可以研究神经网络嵌入方案。本质上,他们在类别和模型的其余部分之间使用减少的神经元集,因此模型在求解中必须找到相似类别的线性投影。它本质上是分解机的非线性版本。tensorflow.org/guide/embedding
seanv507 '18

Answers:


41

如果我理解正确,您会想到一个线性模型,其中一个预测变量是分类的(例如,大学专业);并且您期望对于其级别的某些子组(类别的子组),系数可能完全相同。因此,也许数学和物理学的回归系数相同,但不同于化学和生物学的回归系数。

yij=μ+αi+ϵij,
i
{α1=α2,α3=α4=α5.

L=ωi<j|αiαj|.
αiαjω

我从来没有处理过这样的模型,而上面是我想到的第一件事。然后我决定看看是否有类似的实现。我做了一些谷歌搜索,不久就意识到这被称为类别融合。搜索lasso fusion categorical将为您提供大量参考资料供您阅读。以下是我简要介绍过的一些内容:

Gertheiss和Tutz,2010年发表在《应用统计年鉴》上,看起来像是一篇最近且可读性很强的论文,其中包含其他参考资料。这是它的摘要:

L1

我喜欢他们的类似套索的解决方案路径,该路径显示了当正则化强度增加时两个类别变量的级别如何合并在一起:

Gertheiss和Tutz,2010年


1
而且只有在写完所有内容后,我才注意到@Kjetil已经在一个星期前给Tutz的一篇论文提供了链接……
变形虫说Reinstate Monica

1
感谢您对此进行深入研究!这绝对是一个很好的起点,尤其是为我可以搜索的这项技术(“融合”)起了个名字
shadowtalker

10

我已经在一个正在进行的项目中对此进行了角力,此时,我已经确定确实没有一个很好的方法来融合类别,因此我尝试使用层次/混合效果模型,相当于您的专业是随机效果。

同样,在这种情况下,似乎实际上需要做出两个融合决策:1)如何在拟合模型时融合您拥有的类别,以及2)融合的类别会变成“其他”,默认情况下,其中将包括任何新的符合您的模型后有人梦someone以求的专业。(随机效果可以自动处理第二种情况。)

当融合涉及任何判断时(相对于全自动程序而言),我对“其他”类别表示怀疑,该类别通常是类别很少的抓包,而不是任何有原则的分组。

随机效应可以处理许多级别,可以动态合并(从中“汲取力量”)不同级别,可以预测以前看不见的级别,等等。一个缺点可能是,这些级别的分布几乎总是假定为正常。


1
您是否考虑过将接近矩阵用作距离矩阵进行聚类?stats.stackexchange.com/questions/270201/…
基思(Keith)

7

Zz1,...,zKYZImpact(Z)

Impact(zk)=E(Y | Z=zk)E(Y)

YYlogitEE

category_encoders库[2]中有一个Python实现。

在R包Vtreat [3] [4]中实现了一种称为“影响编码”的变体。2016年[5]的那些作者在一篇文章中描述了该程序包(以及影响编码本身)[5],以及几篇博客文章[6]。请注意,当前的R实现不处理多项式(类别超过2个类别)或多元(向量值)响应。

  1. Daniele Micci-Barreca(2001)。分类和预测问题中的高基数分类属性的预处理方案。ACM SIGKDD勘探通讯,第3卷,第1期,2001年7月,第27-32页。https://doi.org/10.1145/507533.507538
  2. 类别编码器。http://contrib.scikit-learn.org/categorical-encoding/index.html
  3. John Mount和Nina Zumel(2017)。vtreat:统计上合理的“ data.frame”处理器/调节器。R软件包版本0.5.32。 https://CRAN.R-project.org/package=vtreat
  4. Win-Vector(2017)。vtreat。GitHub资料库位于https://github.com/WinVector/vtreat
  5. 祖梅尔,妮娜和约翰山(2016)。vtreat:用于预测建模的data.frame处理器。1611.09477v3,ArXiv电子版。可在https://arxiv.org/abs/1611.09477v3上获得
  6. http://www.win-vector.com/blog/tag/vtreat/

什么是logit E?您能否分享一下配方本身?
擎天柱

@OptimusPrime logit E是期望的logit
shadowtalker

好的。因此,在那种情况下,Impact(zk)= log(E(Y | Z = zk)-E(Y))或Impact(zk)= log(E(Y | Z = zk))-log(E(Y) )?
擎天柱

2
这是监督学习,并会采取复杂的调整,认识到来自Y.正在“偷”自由度数
弗兰克·哈瑞尔

3
可以肯定的是,任何使用Y来指导分类预测器如何处理类别的方法都可能会过拟合,并且很难获得不确定性区间,该区间的宽度应足够准确。我专注于无监督学习,因此不会出现这些问题。
弗兰克·哈雷尔18/12/30

6

如果您具有逻辑上适合用作分类预测变量的锚的辅助自变量,请考虑使用Fisher的最佳评分算法,该算法与他的线性判别分析有关。假设您想将大学专业映射为一个连续的度量标准,并假设适当的锚点是入学前SAT定量考试成绩。计算每个专业的平均定量得分,并用该平均值代替专业。您可以轻松地将其扩展到多个锚点,从而在总结专业时创建了多个自由度。

请注意,与某些早期建议不同,最佳评分代表一种无监督的学习方法,因此自由度(针对Y估计的参数数量)很少且定义明确,从而导致适当的统计推断(如果是常客,准确的标准错误,置信度(兼容性)间隔和p值)。

我非常喜欢https://stats.stackexchange.com/users/28666/amoeba @amoeba 的处罚建议。


您愿意看我的问题stats.stackexchange.com/q/383887/44368吗?谢谢。
汉斯(Hans)'18

最佳评分方法是否是本讲座幻灯片15中所述的方法?搜索这些术语有点困难,所有这些术语在其他情况下都很常见。
shadowtalker

1
我0.85确保它是
弗兰克·哈瑞尔

这听起来像(更好的)版本的思想,目标编码机器学习,例如stats.stackexchange.com/questions/398903/...
的Kjetil b Halvorsen的

2

文章“ 分类和预测问题中的高基数分类属性的预处理方案 ”利用嵌套的“经验贝叶斯”方案在每个池/级别的分类属性中的层次结构,将分类变量映射为后验概率。可以直接使用或作为其他模型的输入。


这基本上就是@Wayne的建议(混合效果模型〜贝叶斯层次模型的频繁版本),以及我在评论中提出的建议。但是OP想要推断层次结构。
seanv507 '18

1

这里有多个问题,其中一些是较早提出和回答的。如果问题是计算需要很长时间:有多种处理方法,请参见具有稀疏特征矩阵的大规模回归 以及Maechler和Bates的论文。

但是很可能是问题出在建模上,我不确定在处理具有多个级别的分类变量时,处理分类预测变量的常用方法是否真的能提供足够的指导,请参见此站点[many-categories]。当然,可以尝试多种方法,一种可能是(如果我不知道您的示例,这对您的示例来说是一个好主意),则是一种分层的类别变量,即启发性的根据生物学分类中使用的系统,请参见https://en.wikipedia.org/wiki/Taxonomy_(biology)。在这里,一个人(植物或动物)首先被分类为领域,然后是王国,养蜂,阶级,秩序,家庭,属和最后是物种。因此,对于分类中的每个级别,您都可以创建一个因子变量。如果您的水平是,例如,在超市中出售的产品,则可以创建一个从[食品,厨具,其他]开始的层次分类,然后将食品分类为[肉,鱼,蔬菜,谷物...]和以此类推。只是一种可能性,它给出了先验的层次结构,与结果没有特别的关系。

但是你说:

我关心产生与我的回归结果相关的更高级别的类别。

然后,您可以尝试融合套索,在此线程中查看其他答案,这可以看作是完全根据数据将级别折叠为更大的组的一种方式,而不是我提议的层次结构所暗示的级别的先验组织各级组织。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.