1、标准化(中心化)

在许多机器学习执行前,需要对数据集进行标准化处理。因为很对算法假设数据的特征服从标准正态分布。所以如果不对数据标准化,那么算法的效果会很差。

例如,在学习算法的目标函数,都假设数据集的所有特征集中在0附近,并且有相同的方差。如果某个特征的方差远大于其他特征的方差,那么该特征可能在目标函数占的权重更大,使得算法不能从所有特征中学习。

在实践中,我们往往忽略了分布的形状,只需要通过减去每个特征的均值,然后除以非标准特征的标准偏差来转换数据。

scale方法提供了在一个类似数据的数据集上执行操作的简便方法:

from sklearn import preprocessing

X_scaled = preprocessing.scale(X)

preprocessing模块还提供了一种使用类:StandardScaler,主要计算训练集的均值和标准差,然后应用在测试集的转换上

scaler = preprocessing.StandardScaler().fit(X)                              
sscaler.transform(X)                              

1.1将特征缩放到一个范围

另一种标准化方法是将特征值缩放到在一个给定的最小值和最大值之间,通常是0~1;或者每个特征的最大绝对值被缩放到单位大小。该方法可以分别通过MinMaxScaler或者MaxAbsScaler实现。

使用范围:特征对非常小的标准差的鲁棒性和希望在稀疏数据中保存零项

Example1

min_max_scaler = preprocessing.MinMaxScaler()
X_train_minmax = min_max_scaler.fit_transform(X_train)

Example2:

 max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)

1.2稀疏数据缩放

对稀疏数据中心化处理会破坏数据的稀疏性结构,所以很少对稀疏数据中心化。但是如果特征在不同的方差下,依然需要对数据进行缩放。

MaxAbsScaler和方法maxabs_scale是专门用来对稀疏数据进行缩放的。

1.3、离群点的缩放

如果数据集中包含很多离群点,那么使用数据的均值方差进行缩放的效果不会很好。

在这种情况下,可以使用方法robust_scale和类RobustScaler来进行替换,它们对数据的均值和方差使用更健壮的估计

1.4、中心化核矩阵

如果有一个核K的核矩阵,通过定义的函数phi计算特征空间的点积,使用类KernelCenterer可以变换核矩阵,它包含去除特征空间均值后,再利用phi计算特征空间的内积。

2、归一化

归一化是将单个样本缩放为单位范数的过程。如果使用一个二次形式,例如点积或其他任何内核来量化一对样本的相似度,这个步骤会很有必要。这个步骤是向量空间模型的基础,常被用于文本分类聚类中。

normalize方法提供了快速简单的方法来对单个array数据集进行归一化,可以选择L1或者L2范数。

preprocessing.normalize(X, norm='l2')

preprocessing模块还提供了类Normalizer,通过方法Transformer API对另一数据集执行同样的操作。

normalizer = preprocessing.Normalizer().fit(X)
normalizer.transform(X)

注:normalize和Normalizer同样适用于类似array的稠密的或者稀疏的矩阵。

3、二值化

特征二值化是对数值特征进行阈值化以得到布尔值的过程。这对于假设输入数据服从多变量伯努利分布的后验分布的估计是有用的。例如,在sklearn.neural_network.BernoulliRBM的使用时需要二值化。

在文本处理中经常使用二值特征(可能是为了简化推理过程),例如在计数或者TF-IDF特征值中,使用二值特征能够更有效。

类Binarizer是专门用于二值化的,例如:

preprocessing.Binarizer().fit(X)或者preprocessing.Binarizer(threshold=1.1)
binarizer.transform(X)

preprocessing模块提供binarize方法来对特征进行二值化处理。

4、种类特征编码

在很多情况下,特征值不是连续的值而是种类。例如,一个人可能的特征是[male, female]等等,这些特征可以用整数值来进行编码。

在scikit-learn中,将种类特征用1-of-k或者one-hot编码。预处理模块中有OneHotEncoder来对种类特征编码,通常是m个可能的种类用m个值来表示。例如:

preprocessing.OneHotEncoder()

默认情况下,m值时通过数据集自动推断出来的。例如,数据集中有2种性别,三种可能的地方,4中可能的浏览器。然后在编码时,在9列的array数组中,前2个数字编码性别,接下来3个数字编码地方,最后4个数字编码浏览器。

5、缺失值处理

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

Imputer类提供了基本的策略来填充缺失值,可以用行或者列的均值、中位数或众数来填充缺失值。例如:

imp = Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit([[1, 2], [np.nan, 3], [7, 6]])
X = [[np.nan, 2], [6, np.nan], [7, 6]]
imp.transform(X)

该类还支持稀疏矩阵(将缺失值编码为0),将稀疏矩阵填充为稠密的矩阵。

6、生成多项式特征

通常,通过考虑输入数据的非线性特征来增加模型的复杂度是很有用的。一个简单常用的方法是多项式特征,它可以得到特征的高阶和相互作用项。

PolynomialFeatures类可以用来生成多项式特征。

poly = PolynomialFeatures(2)
poly.fit_transform(X)     

上述将(X1, X2)转化为(1, X1, X2, X12, X1X2, X22)

应用范围:多样式特征常用于核方法中(SVM, 核PCA)

PS:该内容从sklearn数据预处理模块整理,具体方法和类的使用可以在sklearn官网上查询:http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

数据预处理及sklearn方法实现的更多相关文章

  1. 文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer

    文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作.在介绍向量化之前,我们先来了解下词袋模型. 1.词袋模型(Bag of words,简称 BoW ) 词袋模型假设我们不考虑文本中词与词 ...

  2. 机器学习 第4篇:数据预处理(sklearn 插补缺失值)

    由于各种原因,现实世界中的许多数据集都包含缺失值,通常把缺失值编码为空白,NaN或其他占位符.但是,此类数据集与scikit-learn估计器不兼容,这是因为scikit-learn的估计器假定数组中 ...

  3. 数据预处理 | 通过 Z-Score 方法判断异常值

    判断异常值方法:Z-Score 计算公式 Z = (X-μ)/σ 其中μ为总体平均值,X-μ为离均差,σ表示标准差.z的绝对值表示在标准差范围内的原始分数与总体均值之间的距离.当原始分数低于平均值时, ...

  4. sklearn数据预处理-scale

    对数据按列属性进行scale处理后,每列的数据均值变成0,标准差变为1.可通过下面的例子加深理解: from sklearn import preprocessing import numpy as ...

  5. 使用sklearn进行数据挖掘-房价预测(4)—数据预处理

    在使用机器算法之前,我们先把数据做下预处理,先把特征和标签拆分出来 housing = strat_train_set.drop("median_house_value",axis ...

  6. 【sklearn】数据预处理 sklearn.preprocessing

    数据预处理 标准化 (Standardization) 规范化(Normalization) 二值化 分类特征编码 推定缺失数据 生成多项式特征 定制转换器 1. 标准化Standardization ...

  7. python中常用的九种数据预处理方法分享

    Spyder   Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...

  8. sklearn数据预处理

    一.standardization 之所以标准化的原因是,如果数据集中的某个特征的取值不服从标准的正太分布,则性能就会变得很差 ①函数scale提供了快速和简单的方法在单个数组形式的数据集上来执行标准 ...

  9. sklearn学习笔记(一)——数据预处理 sklearn.preprocessing

    https://blog.csdn.net/zhangyang10d/article/details/53418227 数据预处理 sklearn.preprocessing 标准化 (Standar ...

随机推荐

  1. php安装扩展步骤(redis)

    星哥让装一个扩展,解决PDF抓PNG的问题,功能没有实现,有点小悲伤,但是还是学到点东西的. php安装扩展步骤(以redis为例) 前提注意:在自己的LINUX本机上一定要安装有redis软件,我之 ...

  2. PL/SQL Developer 显示中文乱码问题解决

    PL/SQL Developer 显示中文乱码问题简单版本:首先,通过 select userenv('language') from dual;查询oracle服务器端的编码, 如为: AMERIC ...

  3. 解决dubbo问题:forbid consumer(1)

    原因: 1.dubbo服务没有起动起来 2.dubbo链接的地址出现异常 3.dubbo服务端更新了服务接口,没有发布 如果已上都没有问题,那么还有一个原因就是 “ 别人的代码有问题 阻碍了 你的程序 ...

  4. C#与数据结构--图的遍历

    http://www.cnblogs.com/abatei/archive/2008/06/06/1215114.html 8.2 图的存储结构 图的存储结构除了要存储图中各个顶点的本身的信息外,同时 ...

  5. 2. Spring Boot返回json数据【从零开始学Spring Boot】

    在做如下操作之前,我们对之前的Hello进行简单的修改,我们新建一个包com.kfit.test.web然后新建一个类HelloControoler,然后修改App.Java类,主要是的这个类就是一个 ...

  6. Angular 学习笔记——ng-Resource1

    <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv="C ...

  7. 为php5.6.30安装redis扩展

    1.下载phpredis3.1.2 https://github.com/phpredis/phpredis/releases/tag/3.1.2 2.解压后在phpredis3.1.2目录下执行 / ...

  8. MySQL的四种变量类型

    一.全局变量在系统运行期间动态更改其参数,重启后失效.SET GLOABL var=XXX;SET @@global.var=XXX;以上两种方式等效 查看系统的全局变量show global var ...

  9. scrapy 安装详解

    一. Scrapy简介 Scrapy is a fast high-level screen scraping and web crawling framework, used to crawl we ...

  10. Linux——vi命令的使用

    vi的基本操作 a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command m ...