一、背景
1)数据清洗:缺失值、异常值、一致性
2)特征编码:one-hot 和labels coding
3)特征分箱:等频等距和聚类
4)衍生变量:可解释性和适合模型的输入
5)特征选择:方差选择、卡方选择、正则化
在现实背景中,我们的数据集往往存在各种各样的问题,如果不对数据进行预处理,模型的训练就无法开始。
在对数据进行预处理阶段我们往往要解决一下问题
- 数据中存在缺失值
- 连续特征是否要离散化
- 离散特征的编码
- 特征量纲不同,不具可比性
二、缺失值处理
由于各种各样原因,现实中的许多数据集包含缺失数据,这样的数据是无法直接用于训练的,因此我们需要对缺失值进行处理。
最简单粗暴的方法就是把含有缺失值的样本丢弃,这样可以避免人为填充带来的噪声。这样做可能会丢失一些很重要的信息,特别是数据量不多或者数据价值很高的数据来说,直接丢弃就太浪费了。因此我们可以旋转某种合适的策略对缺失值进行适当的填充。
一般来说,我们可以使用平均值、中值、分位数、众数等替代。如果想要更好的填充效果,可以考虑利用无缺失值的数据建立模型,通过模型来选择一个最适合的填充值,但如果缺失的属性对于模型可有可无,那么得出来的填充值也将不准确。我们还可以使用KNN来选择最相似的样本进行填充。除此以外,缺失信息也可以作为一种特殊的特征表达,例如人的性别,男、女、不详可能各自有着不同的含义。
三、连续特征离散化
特征可以被分为连续特征和离散特征,但有些时候我们可以会将连续特征离散化,例如,如果我们只关心年龄是否大于18,那么我们会将该特征二值化。这样不仅可以使得数据变得稀疏降低过拟合的情况,还可以加快学习的速度,并且令模型对异常数据不那么敏感。离散化方法分为有监督和无监督两类。
等宽、等频的离散化方法是无监督方法的典型代表,根据使用者给定的宽度或频数将连续的区间划分成小的区间的方法对分布不均匀的数据不适用,对异常点比较敏感。无监督离散化方法中还有基于聚类分析的离散化,它通过对某一特征的值进行聚类,由此得到离散区间的划分。
有监督离散化的方法有基于熵的离散化方法,它是一种自顶向下分裂的离散化方法,它根据信息熵在所有可能的区间断点中选取最优的划分。
四、离散特征编码
特征虽然分为连续特征和离散特征,但是计算机都是将所有特征作为连续特征处理,因此如果我们想使用离散特征,必须对离散特征进行独热编码或哑编码。假设我们把年龄划分为[0,20),[20,40),[40,60),[60,+∞)四个区间并用0,1,2,3表示。使用独热编码特征会被编码为
[0,20)1000 [20,40)0100 [40,60)0010 [60,+∞)0001
如果是哑编码则会编码为
[0,20)100 [20,40)010 [40,60)001 [60,+∞)000
具体选择哪种编码可以参照知乎中王赟的回答
如果你不使用regularization,那么one-hot encoding的模型会有多余的自由度。这个自由度体现在你可以把某一个分类型变量各个值对应的权重都增加某一数值,同时把另一个分类型变量各个值对应的权重都减小某一数值,而模型不变。在dummy encoding中,这些多余的自由度都被统摄到intercept里去了。这么看来,dummy encoding更好一些。
如果你使用regularization,那么regularization就能够处理这些多余的自由度。此时,我觉得用one-hot encoding更好,因为每个分类型变量的各个值的地位就是对等的了。”
五、归一化和标准化
归一化和标准化都可以使特征无量纲化,归一化使得数据放缩在[0,1]之间并且使得特征之间的权值相同,改变了原数据的分布,而标准化将不同特征维度的伸缩变换使得不同度量之间的特征具有可比性。同时不改变原始数据的分布。常见的归一化方法有min-max标准化和z-score标准化。
min-max标准化根据特征的最大最小值将数据放缩到[0,1]之间
z-score标准化利用数据的均值和标准差将数据变为标准正态分布
六、添加的特征比必要的特征多,模型增加了噪声,降低了模型的性能。
- 如果两个特征之间的相关性为 0,则意味着更改这两个特征中的任何一个都不会影响另一个。
- 如果两个特征之间的相关性大于 0,这意味着增加一个特征中的值也会增加另一个特征中的值(相关系数越接近 1,两个不同特征之间的这种联系就越强)。
- 如果两个特征之间的相关性小于 0,这意味着增加一个特征中的值将使减少另一个特征中的值(相关性系数越接近-1,两个不同特征之间的这种关系将越强)。