减少无序分类预测变量的级别数


11

我想训练一个分类器,例如SVM,随机森林或任何其他分类器。数据集中的特征之一是具有1000个级别的分类变量。减少此变量的级别数的最佳方法是什么。在R combine.levels()中,Hmisc程序包中有一个函数,它结合了很少的级别,但是我在寻找其他建议。


分类变量是无序的吗?您大约有几例?类别变量的频率分布是多少?
Jeromy Anglim

级别不排序。我有大约10,000个观察结果。频率分布如下:A级出现在大约11%的观测值中。B级出现8%。c级出现在5%中。这些级别中约有15个覆盖了数据集中50%的观测值。
sabunime,2011年

Answers:


9

如何做到最好,取决于您正在执行的任务,因此会有很大的不同,因此无法以独立于任务的方式说出最好的方法。

如果您的级别是顺序的,可以尝试两种简单的方法:

  1. 垃圾桶 例如,0 =(0 250),1 =(251 500),依此类推。您可能需要选择限制,以使每个垃圾箱都有相同数量的项目。
  2. 您还可以对级别进行对数转换。这将缩小范围。

如果级别不是顺序的,则可以根据数据集中的其他功能/变量对级别进行聚类,并用聚类ID替换先前的级别。执行此操作的方法与使用聚类算法的方法一样多,因此是一个广阔的领域。在我阅读本文时,这就是combine.levels()正在做的事情。您可以使用kmeans()或进行类似的操作prcomp()。(您可能/随后应训练分类器以预测新数据点的群集。)


3
除了将分类变量视为随机效应之外,我不知道有什么真正好的方法来处理此问题。您可以通过对变量使用二次(岭)惩罚过程来模拟这一点。我的回归建模策略 书和课程笔记就涉及到这一点。
弗兰克·哈雷尔

1
@FrankHarrell我想到了两种方法:多变量变量潜在类分析是一种(cran.r-project.org/web/packages/poLCA/poLCA.pdf),对应分析是另一种(例如statmethods.net/advstats/ca)。 html)。
迈克·亨特
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.