g*******u 发帖数: 3948 | 1 打算 lightgbm or xgboost
有几个 categorical features 有5000个不同的值。 这种怎么encode ?
谢谢
另外一般说high cardinality categorical features 多少个算是high?
thx |
w***g 发帖数: 5958 | 2 word2vec
【在 g*******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 打算 lightgbm or xgboost : 有几个 categorical features 有5000个不同的值。 这种怎么encode ? : 谢谢 : 另外一般说high cardinality categorical features 多少个算是high? : thx
|
m****o 发帖数: 182 | 3 binary encoding : 2^12 = 5000
【在 g*******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 打算 lightgbm or xgboost : 有几个 categorical features 有5000个不同的值。 这种怎么encode ? : 谢谢 : 另外一般说high cardinality categorical features 多少个算是high? : thx
|
f*********r 发帖数: 30 | 4 binary encoding是一个值得一试的办法。类似的还有hashing trick。
除此之外,google "supervised ratio" 和 "weight of evidence",把categorical变
成numerical。
还有就是看level distribution,如果是几个major level和一大堆minor level,
minor level数量小过某个阈值,比如总feature数乘十这种,也可以考虑合并minor
level。 |
g*******u 发帖数: 3948 | 5 binary 应该不适合tree 类型的分类器吧 。素以首先排除
flamewalker 说的后面几个可能可以把?我想的就是根据分布 用直方图。这样就转化
为numerical的了。 吧所有很小的 都轨到一类
因为 5000多种 很多 直方图数值很小 直接用 我担心都接近0 可能会有问题 所以想
小于某个值的都归到 一个数值。
wudong说的word2vec貌似比较高级? 听过没用过。 我可以看看 。 问一下,
word2vec适合这种tree类型的 分类器吗?
thx |
m******r 发帖数: 1033 | 6 什么叫做binary encoding ? 比如我一个变量有8层, 分别代表8个州,NY,CA,TX,NY,
etc
然后你用3个变量做binary encoding?? 000, 001, 010,110,... 111 ??
看起来不太对劲吧? |
f*********r 发帖数: 30 | 7 binary和传统的dummy code都不适合决策树类型的分类器,因为把寻找最优分岔的问题
限制在one vs all这个局限里面了。但是在实际应用中效果还是不错的。有文章说在
cardinality很大的情况下,直接把每个level按照出现概率rank一下然后就哪rank取代
之变成numerical feature也一样work。实际上真正严格遵守最悠久或者近似最优解来
做决策树分叉的算法在high cardin的情况下非常慢,这也是为啥r的随机森林只支持
cardinality小于53的categorical feature。Python里的版本直接就是用的rank来替代
的。
xgboost只支持数值变量,把这个问题丢给了用户去自己找合适的编码方案。
word2vec是根据在意过语料集里单词上下文co-occurrance的频率来学习一个单次的分
布式表达或者向量表达,这个表达的euclidean distance保留一些语义上和语法上的相
似度或者可替代度。这个概念也可以用在其他有co-occurrance的feature上,不仅限于
NLP。用这个方法做feature转换需要有语料集或者co-occurrance matrix来做训练。不
是所有high cardinality问题都适合
【在 g*******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : binary 应该不适合tree 类型的分类器吧 。素以首先排除 : flamewalker 说的后面几个可能可以把?我想的就是根据分布 用直方图。这样就转化 : 为numerical的了。 吧所有很小的 都轨到一类 : 因为 5000多种 很多 直方图数值很小 直接用 我担心都接近0 可能会有问题 所以想 : 小于某个值的都归到 一个数值。 : wudong说的word2vec貌似比较高级? 听过没用过。 我可以看看 。 问一下, : word2vec适合这种tree类型的 分类器吗? : thx
|
f*********r 发帖数: 30 | 8 你理解的没错,看起来不喝啦,但是就像dummy code一样,只保留部分原始
categorical feature的特性,但是在实际中能work就行。
机器学习就是这样,很多trick没有理论支持甚至违反理论假设,但是用起来可能效果
不错,比如naive bayes
【在 m******r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 什么叫做binary encoding ? 比如我一个变量有8层, 分别代表8个州,NY,CA,TX,NY, : etc : 然后你用3个变量做binary encoding?? 000, 001, 010,110,... 111 ?? : 看起来不太对劲吧?
|
S***s 发帖数: 104 | 9 一般不是都会做个fe把high cardinal的category转成numerical的feature么?
【在 f*********r 的大作中提到】![](/moin_static193/solenoid/img/up.png) : binary和传统的dummy code都不适合决策树类型的分类器,因为把寻找最优分岔的问题 : 限制在one vs all这个局限里面了。但是在实际应用中效果还是不错的。有文章说在 : cardinality很大的情况下,直接把每个level按照出现概率rank一下然后就哪rank取代 : 之变成numerical feature也一样work。实际上真正严格遵守最悠久或者近似最优解来 : 做决策树分叉的算法在high cardin的情况下非常慢,这也是为啥r的随机森林只支持 : cardinality小于53的categorical feature。Python里的版本直接就是用的rank来替代 : 的。 : xgboost只支持数值变量,把这个问题丢给了用户去自己找合适的编码方案。 : word2vec是根据在意过语料集里单词上下文co-occurrance的频率来学习一个单次的分 : 布式表达或者向量表达,这个表达的euclidean distance保留一些语义上和语法上的相
|
m****o 发帖数: 182 | 10 word2vec除非你的inputs是有context的概念,一个 input前后跟着其它input,有
temporal dependency,才可能用上。binary encoding效果肯定不如1hot,但是是一个
好的starting point。feature engineering从来都是一个反复有反复的过程。但是一
切反复都要有个起点。
【在 g*******u 的大作中提到】![](/moin_static193/solenoid/img/up.png) : binary 应该不适合tree 类型的分类器吧 。素以首先排除 : flamewalker 说的后面几个可能可以把?我想的就是根据分布 用直方图。这样就转化 : 为numerical的了。 吧所有很小的 都轨到一类 : 因为 5000多种 很多 直方图数值很小 直接用 我担心都接近0 可能会有问题 所以想 : 小于某个值的都归到 一个数值。 : wudong说的word2vec貌似比较高级? 听过没用过。 我可以看看 。 问一下, : word2vec适合这种tree类型的 分类器吗? : thx
|