最近在看Feature Engineering for Machine Learning。这本书给了我很大的启发。它引入了一些很新颖的观点,比如:
- 所谓Data,是我们对真实世界现象的一种观测。
- 所谓Feature,是我们对raw data的一种数值型表示(也就是说,raw data和feature实际上是不同的)。
这个第二点说得确实有道理,因为如果我们不把哪些text转换为model可以处理的data的话,是不可以继续往下处理的。
另外,当我们看到feature这个词的时候,我们就应该立刻想到pandas里面的Series对象。换而言之,feature既有名字,也有像列表一样的内容。
一. Numerical Features简介
这个专栏的第一篇博客,我打算介绍numerical features, 正如上文所提到的,feature是对row data的一种数值型表示,然而,我的numerical features的,值全都已经是模型可以直接处理的数据,那我们还要不要进行FE呢?这个当然要视具体情况而定。
(1)观察特征的取值范围
进行FE时,一个很重要的一个步骤是观察特征的取值范围。众所周知好的特征取决于具体的数据和模型,所以说特征的取值范围对某些模型有着很大的影响,比如:
- 使用Euclidean distance的模型,如k-means聚类,knn,RBF核的模型,对你特征的取值范围就很敏感。
- 而使用logical function的模型,如基于space-partitioning的树——决策树,GBM,RF;这些模型对这个就不是很敏感。
你当然可以在每次建模之前都使用normalization,不过这在一定程度上牺牲了模型的可解释性,因此在面对space-partitioning树的时候,你可以不进行normalization。
(2)观察特征的分布
在很多notebook中我们经常会看到关于某一个特征的分布。这是因为某些模型确实依赖于你特征的分布。
比如