数据预处理及sklearn方法实现
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方法实现的更多相关文章
- 文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer
文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作.在介绍向量化之前,我们先来了解下词袋模型. 1.词袋模型(Bag of words,简称 BoW ) 词袋模型假设我们不考虑文本中词与词 ...
- 机器学习 第4篇:数据预处理(sklearn 插补缺失值)
由于各种原因,现实世界中的许多数据集都包含缺失值,通常把缺失值编码为空白,NaN或其他占位符.但是,此类数据集与scikit-learn估计器不兼容,这是因为scikit-learn的估计器假定数组中 ...
- 数据预处理 | 通过 Z-Score 方法判断异常值
判断异常值方法:Z-Score 计算公式 Z = (X-μ)/σ 其中μ为总体平均值,X-μ为离均差,σ表示标准差.z的绝对值表示在标准差范围内的原始分数与总体均值之间的距离.当原始分数低于平均值时, ...
- sklearn数据预处理-scale
对数据按列属性进行scale处理后,每列的数据均值变成0,标准差变为1.可通过下面的例子加深理解: from sklearn import preprocessing import numpy as ...
- 使用sklearn进行数据挖掘-房价预测(4)—数据预处理
在使用机器算法之前,我们先把数据做下预处理,先把特征和标签拆分出来 housing = strat_train_set.drop("median_house_value",axis ...
- 【sklearn】数据预处理 sklearn.preprocessing
数据预处理 标准化 (Standardization) 规范化(Normalization) 二值化 分类特征编码 推定缺失数据 生成多项式特征 定制转换器 1. 标准化Standardization ...
- python中常用的九种数据预处理方法分享
Spyder Ctrl + 4/5: 块注释/块反注释 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(St ...
- sklearn数据预处理
一.standardization 之所以标准化的原因是,如果数据集中的某个特征的取值不服从标准的正太分布,则性能就会变得很差 ①函数scale提供了快速和简单的方法在单个数组形式的数据集上来执行标准 ...
- sklearn学习笔记(一)——数据预处理 sklearn.preprocessing
https://blog.csdn.net/zhangyang10d/article/details/53418227 数据预处理 sklearn.preprocessing 标准化 (Standar ...
随机推荐
- ISP图像处理算法之---Demosaic
目前市场上主流传感器为Coms传感器,sensor出来的的数据格式为bayer数据格式,这种格式,每个像素点只有三个颜色通道中的一个,如图1所示 ...
- SSO单点登录系列4:cas-server登录页面自定义修改过程(jsp页面修改)
落雨 cas 单点登录 SSO单点登录系列4:cas-server登录页面自定义修改过程,全新DIY. 目标: 下面是正文: 打开cas的默认首页,映入眼帘的是满眼的中文and英文混杂体,作为一 ...
- 文本文件打印类库(C#)
我写了一个打印文本文件的类库,功能包含:打印预览.打印.打印时能够选择打印机.能够指定页码范围. 调用方法很easy: TextFilePrinter p = new TextFilePrinter( ...
- Centos 7 搭建OpenStack 私有云——(1)基础环境配置
1.简介: OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目. OpenStack是一个开源的云计算管理 ...
- 字体和颜色 Font Color 基础笔记
private void SelectFontAndColor_Load(object sender, EventArgs e) {//窗体加载的时候,初始化字体 //返回所有的字体 FontFami ...
- 常用的二种修改mysql最大连接数的方法
方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起MY ...
- lodash 数组元素查找 findIndex
_.findIndex(array, [predicate=_.identity]) 这个方法类似 _.find.除了它返回最先通过 predicate 判断为真值的元素的 index ,而不是元素本 ...
- HBase伪分布式安装及简单使用
HBase是Hadoop的数据库,基于Hadoop执行.是一种NoSQL数据库. 特点:分布式.多版本号.面向列的存储模型.可以大规模的数据实时随机读写,可直接使用本地文件系统. 不适合:与关系型数据 ...
- TortoiseGit 连接oschina不用每次输入username和password的方法
每次git clone 和push 都要输入username和password.尽管安全.但在本机上每次都输有些麻烦,怎样记住username和password呢? 在网上看了各种方法,太杂,非常多可 ...
- NoSQL之Redis学习小结
大数据时代要求: 三V:Volume海量.Velocity实时.Variety多样: 三高:高并发.高可扩.高性能 高并发操作不建议使用关联查询,而使用冗余数据,分布式系统支持不了太多的并发. 横向 ...