分类变量,进行One hot编码,维度升高,如何处理?

  统计/机器学习 数据预处理 数据降维    浏览次数:7412        分享
2

如果一个分类变量有非常多的类,进行one hot编码后,维度会升得很高,该如何处理?

谢谢!


 

whs_ita   2018-01-12 15:09



   7个回答 
4

有几种思路可以尝试的:

1. 要看这个变量背后的逻辑了,就像雷猴说的,它的意义是什么,有没有办法按照这个分类变量本身的意义进行合并。

2. 按照目标值进行合并,比如你的目标是0-1二元预测,如果这个分类变量取A的时候,90%是1;取B的时候,89%是1。那么A和B就可以合并在一起。最后再做one hot。如果你的目标是回归,也是类似的方法。

3. 把分类变量的分类按频次高低排序,累计到90%或者95%的分类都保留,最小的10%或者5%可以合并成一类。

4. hashing trick,随机合并。


SofaSofa数据科学社区DS面试题库 DS面经

DuckU   2018-02-12 11:09

3

那要看你的分类变量是什么了,有没有办法进行一些合并。

比如你的分类变量是中国的村镇,那你可以合并到县或者市甚至省这一级别。

比如你的分类变量是产品,那你看看能不能分到什么大类里面。

总之就是进行合并处理。


此外,有些分类变量可能频次特别低,比如出现次数小于20次或者50次的那种,你把所有这种小频次的大不了也可以合并起来。


SofaSofa数据科学社区DS面试题库 DS面经

雷猴   2018-02-07 12:32

3

还有个思路是不对分类变量做one hot处理,而是用y的均值代替。


SofaSofa数据科学社区DS面试题库 DS面经

曾经是科比   2018-03-19 14:37

2

用count来代替。比如类别A出现10次,就用10代替所有的A,B出现20次,用20代替B。这样就把分类的变量全部换成了整数。

SofaSofa数据科学社区DS面试题库 DS面经

zl_pku   2019-08-07 16:42

这个最近业界比较常用的 - 东布东   2019-12-13 13:39
1

我一般用每个分类对应的目标变量的均值来代替

除了上面各位提到的方法,还有人说可以用每个分类出现的频数来代替,How to deal with Features having high cardinality。实际效果应该和feature hashing差不多吧。

SofaSofa数据科学社区DS面试题库 DS面经

LiShanfei   2018-12-18 04:22

1

可以低维嵌入

SofaSofa数据科学社区DS面试题库 DS面经

kym1990   2019-05-10 07:42

的确,做embedding是现在比较流行的思路 - 何立诚   2019-11-16 01:51
1

如果是用户id item id这种特征的话,建议使用embedding,用一个模型先对这些特征的表达进行预训练,可以有效的降低维数,而且可以提高 training和serving时的效率。这个预训练用的模型虽然需要的数据量很大,但也不需要更新的很频繁,对算力的占用不算高。

如果是省市 id 这种特征的话,one-hot 之后有几十、几百维这样,可以在模型内部进行 embedding


还有一种方式就是选择更适用于高维稀疏数据的模型,如 LR FM 这种。

SofaSofa数据科学社区DS面试题库 DS面经

dearelenore   2020-07-31 11:29



  相关主题

hashing trick或者feature hashing是什么   1回答

维数大于样本数的问题   3回答

为什么LDA降维最多降到类别数k-1?   1回答

python里怎么实现t-SNE降维?   1回答

NLP中的hashing trick是什么?   1回答

低维嵌入(low dimension embedding)是什么意思?   2回答

什么时候应该用isomap降维方法?   0回答

三维以上聚类都要先降维?10维数据直接聚类然后silhouette判断效果可以吗?   3回答

非序列数据(任务),针对种类型特征可以用embedding技术吗?   1回答

t-SNE如何实现降维?   1回答

怎么评价tSNE的降维效果?   2回答

LDA线性判别分析进行信号分类时如何对训练数据和测试数据降维?   1回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!