预处理数据包括:特征的标准化,数据的正则化,特征的二值化,非线性转换,数据特征编码,缺失值插补,生成多项式特征等。
数据预处理的api有两种接口,一种是类接口,需要先fit再transform,或者使用fit_transform。
第二种是函数接口,可以直接转换。如sklearn.preprocessing.scale(data)。
推荐使用类接口。
特征的标准化指的是将数据集的特征进行某种线性缩放和偏移。 在许多情况下,特征的标准化可以改善机器学习算法的性能和效率。
常见的数据标准化方式包括:
正则化是缩放单个样本以具有单位范数的过程。正则化有时也叫归一化,正规化。如果你计划使用二次形式(如点积或任何其他核函数)来量化任何样本间的相似度,则此过程将非常有用。
常用的向量范数有"l1"范数和"l2"范数
特征二值化是将数值特征用阈值过滤得到布尔值的过程。
在机器学习中,特征经常不是数值型的而是分类型(标称型)的。举个例子,一个人的性别可能是 "male"或 "female"两者之一。我们可以用0来表示"male",1来表示"female"。但是这样做的话,性别特征就变得有序了。
为了解决这个问题,我们可以使用一种叫做"one-of-K"或称做"one-hot"(独热)的编码方式。即两个特征值来进行编码性别[1,0]表示"male",而[0,1]表示"female"。通常使用"one-hot"方式编码后会增加数据的维度和稀疏性。
因为各种各样的原因,真实世界中的许多数据集都包含缺失数据,这类数据经常被编码成空格、NaN,或者是其他的占位符。但是这样的数据集并不能和scikit-learn学习算法兼容。
使用不完整的数据集的一个基本策略就是舍弃掉整行或整列包含缺失值的数据。但是这样就付出了舍弃可能有价值数据(即使是不完整的 )的代价。
处理缺失数值的一个更好的策略就是从已有的数据推断出缺失的数值。
在机器学习中,通过增加一些输入数据的非线性特征来增加模型的复杂度通常是有效的。一个简单通用的办法是使用多项式特征,这可以获得特征的更高次数和互相间关系的项。
在一些情况下,只需要特征间的交互项,这可以通过设置 interaction_only=True 来得到