机器学习之特征预处理

一.预处理的作用

在机器学习任务中,学习器都会对数据有一定的要求,比如在最近邻算法中,我需要寻找与中心点最近邻的点,假设我们使用欧式距离度量,如果有一个属性值是千万量级,而另一个属性是100以内,那么如此计算的距离会严重依赖于大量级的属性,这对最后模型结果是有很大的影响的。总之,预处理的目的就是为了能够让学习器得到“干净”的数据。

二.归一化

通过原始数据进行变换把数据映射到(默认为[0,1])之间,作用于每一列将性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现。

  • 公式: max,min为一列最大,最小值
  • API: sklearn.preprocessing.MinMaxScaler
  • 相关语法:
MinMaxScaler(feature_range=(0,1),......).fit_transform(x)
###feature_range设置缩放给定的范围;x为所需要处理的数据集
  • 缺点:在特定的场景下最大值最小值是变化的,易受异常点的影响,只适用精确小数据

三.标准化

当个体特征太过或明显不遵从高斯正态分布时,标准化表现的效果较差。实际操作中,经常忽略特征数据的分布形状,移除每个特征均值,划分离散特征的标准差,从而等级化,进而实现数据中心化。通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内(作用于每一列)。

  • 公式:
  • API: sklearn.preprocessing.StandardScaler
  • 相关语法:
StandardScaler().fit_transform(x)   ###实例化,并转换数据
StandardScaler.mean_   ###查看原始数据中每列平均值
StandardScaler.var_    ###查看原始数据中每列方差

四.正则化

正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。
该方法是文本分类和聚类分析中经常使用的向量空间模型(Vector Space Model)的基础.
Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。

  • p-范数的计算公式:||X||p=(|x1|p+|x2|p+...+|xn|p)1/p
  • API: sklearn.preprocessing.Normalizer
  • 相关语法:
Normalizer().fit_transform(x)    ###实例化,并转换数据

五.二值化

特征的二值化主要是为了将数据特征转变成boolean变量。在sklearn中,sklearn.preprocessing.Binarizer函数可以实现这一功能,Binarizer函数也可以设定一个阈值,结果数据值大于阈值的为1,小于阈值的为0。

  • API: sklearn.preprocessing.Binarizer
  • 相关语法:
Binarizer().fit_transform(x)    ###实例化,并转换数据

六.Onehot编码

在建模过程中,我们通常会碰到各种类型的属性,如果是标称型属性,也就是不具备序列性、不能比较大小的属性,通常我们不能用简单的数值来粗暴替换。因为属性的数值大小会影响到权重矩阵的计算,不存在大小关系的属性,其权重也不应该发生相应的变化,那么我们就需要用到One-hot编码(也有人称独热编码)这种特殊的编码方式了。

  • API: sklearn.preprocessing.OneHotEncoder
  • 相关语法:
OneHotEncoder().fit_transform(x)    ###实例化,并转换数据

七.缺失值的处理

由于各种原因,许多现实的数据集包含缺失值,通常变为为空白、NaN或其他占位符。使用不完整数据集的基本策略是丢弃包含缺失值的整行或整列,然而这样会丢失可能有价值的数据。一个更好的策略就是从已知的部分数据中推断出缺失值。
Imputer类提供了基本的策略来填充缺失值,可以用行或者列的均值、中位数或众数来填充缺失值。

  • API: sklearn.preprocessing.imputer
  • 相关语法:
imputer(missing_values=, strategy= ,axis=1.......)  
###missing_values为缺失的数据,strategy为需要代替的数据

具体方法和类的使用可以在sklearn官网上查询:http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

原文地址:https://www.cnblogs.com/xiaorui111/p/10907224.html