feature如果是high cardinality或者highly skewed怎么处理?

老师,high cardinality的feature除了直接drop(比如id之类的),如果是含有有用信息的,比如风向(W, E, S, N, NW, NE, SW, SE…)之类的该如何处理?另外,课上讲了如果label是imbalanced,可以用一些sampling的技巧,那如果feature是imbalanced或者highly skewed该如何处理?

这是两个不同的问题:

  1. High cardinality in features.
  • 如果是经典ML model (non neural network),一般来说是直接使用One-hot encoding,随后再做PCA降维。如果为了保持feature物理意义,不想使用PCA,且feature的unique values过多的话(这种情况比较少见),那么可以使用其他encoding方法来减少描述数据使用的维度(one-hot encoding显然是维度最多的表示方法),比如target encoding [sklearn][paper]
  • 如果有条件使用neural network, 那么可以把这个feature利用embedding model,transfer成low dimensional feature representation.
  1. Imbalanced label. 建议的做法就是downsample/upsample labels, i.e. rebalance dataset. 如果想用更加高级的方法的话,可以使用一些在loss function中加入了weights调整的算法。具体可以参考这一篇survey和这篇paper.

谢谢老师回复。关于第二点,如果feature是imbalanced的话,也是可以用这些不同sampling的方法来平衡数据分布的是吗?

我没见过"imbalanced feature"这种描述,如果你见到过的话可以把相关文章链接发在这里。feature中如果只有1% 0, 99% 1的话,有可能有用,也有可能没有用。这完全是由模型决定的。我觉得这可能不需要做数据处理。

还想follow up一下第一点中提到的target encoding,这种encoding方法是否也适用于非常极端的imbalance class?比如在某一次的cv中我选取的部分数据作为我的训练数据,然而这一部分中某一种类别对应所有的label都是0,那么在做完target encoding之后这一类的值都会为0, 这样会对模型的训练有影响吗?

如果是categorical feature的取值imbalanced,那么任何encoding方法都无法解决“encode之后,大量数据行对应的feature取值相同”这个问题的。此时首先要思考的是,这个feature是否真的对于Model prediction有意义?如果你认为它有意义,还是想把它放到Model中的话,那么就不能使用tree-based model了,应该使用Neural Network or Generalized Linear Model。

不能使用tree-based mode的原因是因为这样在sampling的过程中会大量出现这个feature下都是一种值的情况,这样会导致tree在split的过程中不能很好的使用这个feature给purity带来的改变是吗?
如果是Neural Network和GLM两种模型面对某个feature中存在大量0,matrix会很sparse,会不会影响Gradient Descent的效果呢?

如果这种sparse feature只占你的模型features的一小部分,那么用tree-based model or other model都可以。因为此时整体training features中不会有大量相同的Feature取值。如果sparse feature占据了你的model features的绝大多数,那么就不能用tree-based model了,因为tree based model会退化成类似LinkedList那种只向单边生长的情况,预测效果很差,无法学习到feature之间的关系了。而GLM这种model是通过squared error or absolute error来构造loss的,与tree-based model建模的基本思想完全不同。至于模型求解过程中是否会受影响,这就要视具体数据情况而定了,我目前不了解这个问题很确定性的结论。

1 个赞