sklearn学习 数据预处理-数据集的转换

sklearn.preprocessing包提供了多种数据预处理工具,如标准化、非线性变换、正则化和二值化等。标准化常用StandardScaler进行均值去除和方差缩放,适用于假设所有特征具有相同尺度的算法。MinMaxScaler和MaxAbsScaler用于将特征缩放到特定范围,以增强数据的健壮性。RobustScaler适用于处理异常值。QuantileTransformer可用于平滑非正常分布。正则化如normalize进行L1或L2正则化。二值化通过阈值处理将数值特征转换为布尔值。OneHotEncoder用于类别特征的编码,处理非顺序类别数据。Imputer用于处理缺失值,提供均值、中位数和众数填充策略。多项式特征通过PolynomialFeatures创建,增加模型复杂度。FunctionTransformer可将自定义函数转换为预处理操作。
摘要由CSDN通过智能技术生成

数据预处理

sklearn.preprocessing 包提供了一些通用的工具或者transformer类把原始的特征向量转换成更适合于模型进行训练的形式。
通常来说,一些机器学习算法需要对数据进行标准化。如果数据集中出现了一些奇异点,你最好使用更加健壮的scalers或者transformers。这些不同的scalers, transformers, and normalizers在包含奇异点的数据集上的效果,在这里有所展示。

标准化、均值去除和方差缩放

对数据集做标准化(Standardization)操作是很多sklearn库实现的机器学习算法的常见的要求。如果这些特征看起来不太像正态分布(具有零均值和单位方差的高斯分布)的数据的话,这些算法可能效果不佳。
实际上,我们经常忽视数据的分布情况,直接数据转换到向量空间的中央,通过对每个特征减去它的均值实现,然后呢,把特征通过标准差进行缩放。
举个例子,在一些机器学习算法中,比如说支持向量机的RBF核或者线性模型的L1和L2正则化,都是假设所有的特征都是以0为中心分布的,并且取值区间范围应当是相同的。如果一个特征的取值区间比别的特征大,它可能在目标函数中占主导地位,使得学习器(estimator)不能像期望的那样从别的特征中进行学习。

最方便快捷地实现这个操作的方法是调用 scale 函数。

>>> from sklearn import preprocessing
>>> import numpy as np
>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
>>> X_scaled = preprocessing.scale(X_train)

>>> X_scaled                                          
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

scale 操作后的函数都是零均值、单位方差的:

>>> X_scaled.mean(axis=0)
array([ 0.,  0.,  0.])

>>> X_scaled.std(axis=0)
array([ 1.,  1.,  1.])

preprocessing 模块实现了一个工具类叫做 StandardScaler,它可以计算出训练集中特征的均值和方差并且在这之后,在测试集上进行同样的转换。

>>> scaler = preprocessing.StandardScaler().fit(X_train)
>>> scaler
StandardScaler(copy=True, with_mean=True, with_std=True)

>>> scaler.mean_                                      
array([ 1. ...,  0. ...,  0.33...])

>>> scaler.scale_                                       
array([ 0.81...,  0.81...,  1.24...])

>>> scaler.transform(X_train)                           
array([[ 0.  ..., -1.22...,  1.33...],
       [ 1.22...,  0.  ..., -0.26...],
       [-1.22...,  1.22..., -1.06...]])

在这之后能,我们可以在测试集上做同样的操作:

>>> X_test = [[-1., 1., 0.]]
>>> scaler.transform(X_test)                
array([[-2.44...,  1.22..., -0.26...]])

把特征缩放到某个范围

标准化的一个可选的操作是把特征缩放到给定最大值和最小值的区间范围,通常是取01区间或者是为了把每个特征的最大绝对值按比例缩放为单位大小。可以通过使用 MinMaxScaler 或 MaxAbsScaler 实现。
这么做的目的是为了给那些标准差非常小的特征增加健壮性,另外也可以使得矩阵中产生更多的零,从而使矩阵更加稀疏,占用更少的存储空间。
下面是一个把矩阵转换到01范围的例子:

>>> X_train = np.array([[ 1., -1.,  2.],
...                     [ 2.,  0.,  0.],
...                     [ 0.,  1., -1.]])
...
>>> min_max_scaler = preprocessing.MinMaxScaler()
>>> X_train_minmax = min_max_scaler.fit_transform(X_train)
>>> X_train_minmax
array([[ 0.5       ,  0.        ,  1.        ],
       [ 1.        ,  0.5       ,  0.33333333],
       [ 0.        ,  1.        ,  0.        ]])

在这之后可以把对训练集同样的操作应用在测试集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值