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. hdu4099 Revenge of Fibonacci

    题意:给定fibonacci数列,输入前缀,求出下标.题目中fibonacci数量达到100000,而题目输入的前缀顶多为40位数字,这说明我们只需要精确计算fibinacci数前40位即可.查询时使 ...

  2. MySQL时间增加、字符串拼接

    MySQL时间增加.字符串拼接 SELECT DATE_ADD(startTime,  INTERVAL 10 SECOND); CONCAT(string1,string2,…)

  3. 前端存储之Web Sql Database

    前言 在上一篇前端存储之indexedDB中说到,我们项目组要搞一个前后端分离的项目,要求在前端实现存储,我们首先找到了indexedDB,而我们研究了一段时间的indexedDB后,发现它并不是很适 ...

  4. 使用HttpClient测试SpringMVC的接口

    转载:http://blog.csdn.net/tmaskboy/article/details/52355591 最近在写SSM创建的Web项目,写到一个对外接口时需要做测试,接受json格式的数据 ...

  5. Input.GetAxis 获取轴

    static function GetAxis (axisName : string) : float Description描述 Returns the value of the virtual a ...

  6. Nginx探索三

    这次探索一下http 请求 request 这节我们讲request,在nginx中我们指的是http请求,详细到nginx中的数据结构是ngx_http_request_t. ngx_http_re ...

  7. 块设备驱动之NOR FLASH驱动

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25240947 一.硬件原理 从原理图中我们能看到NOR FLASH有地址线,有 ...

  8. scrapy 安装详解

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

  9. Mysql视图的创建及使用

    视图理解: 视图又叫虚表.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成. 视 ...

  10. Socket协议通讯

    Socket协议通讯   服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; us ...