Python: scikit-learn教程与实例(二)——数据预处理(数据标准化之线性变换)

scikit-learn数据预处理——数据标准化之线性变换

sklearn.preprocessing包提供了几个常用的函数和类,用于常见的数据预处理操作。
在讲标准化之前需要强调的一点是scikit-learn对于数据集的要求是[n_sample*n_feature],即每一行代表一个样本,每一列代表一个特征。

1.标准正态分布

scikit-learn有提供的直接将数据处理成标准正态分布(均值为0,标准差为1)的函数:preprocessing.scale

import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1.,  2.],
                   [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X_train)
print(X_scaled)
[[ 0.         -1.22474487  1.33630621]
 [ 1.22474487  0.         -0.26726124]
 [-1.22474487  1.22474487 -1.06904497]]

preprocessing.scale函数中参数axis表示计算平均值和标准差的轴。 如果为axis=0(默认为0),则对每个特征执行标准化,如果为axis=1,则按照样本执行标准化(逐行)。

import numpy as np
from sklearn import preprocessing
X_train = np.array([[ 1., -1.,  2.],
                   [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])
X_scaled = preprocessing.scale(X_train,axis=1)
print(X_scaled)
[[ 0.26726124 -1.33630621  1.06904497]
 [ 1.41421356 -0.70710678 -0.70710678]
 [ 0.          1.22474487 -1.22474487]]

2.线性缩放

标准化方法是将数据缩放到给定的最小值和最大值之间,通常在0到1之间,或者将每个特征的最大绝对值缩放到单位大小。 这可以分别使用MinMaxScaler或MaxAbsScaler来实现。

import numpy as np
from sklearn import preprocessing
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)
print(X_train_minmax)

结果:

[[0.5        0.         1.        ]
 [1.         0.5        0.33333333]
 [0.         1.         0.        ]]

特征变换的范围由参数feature指定,默认为(0,1),注意: MinMaxScaler没有axis这个参数,默认就是逐列进行标准化。

min_max_scaler = preprocessing.MinMaxScaler(feature_range=(0,2))   

MaxAbsScaler将每个特征的最大绝对值缩放到一定范围,默认为[-1,1]。函数中参数axis表示计算平均值和标准差的轴。 如果为axis=0(默认为0),则对每个特征执行标准化,如果为axis=1,则按照样本执行标准化(逐行)。

X_train = np.array([[ 1., -1.,  2.],
                    [ 2.,  0.,  0.],
                    [ 0.,  1., -1.]])

max_abs_scaler = preprocessing.MaxAbsScaler()
X_train_maxabs = max_abs_scaler.fit_transform(X_train)
print(X_train_maxabs)
[[ 0.5 -1.   1. ]
 [ 1.   0.   0. ]
 [ 0.   1.  -0.5]]

3.稀疏数据的线性变换

稀疏数据是指,数据框中绝大多数数值缺失或者为零的数据。对稀疏数据进行线性变换时,推荐使用MaxAbsScaler和maxabs_scale。另外,Scaler和StandardScaler可以接受scipy.sparse矩阵作为输入,但是需要设置参数(with_mean = False)。对稀疏数据可以使用tranform方法,但是不能使用RobustScaler方法。

4.含异常值的数据的线性变换

如果数据中包含许多异常值,可以使用robust_scale和RobustScaler方法。

本文的内容来自scikit-learn官方文档:https://scikit-learn.org/stable/modules/preprocessing.html

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小咖~

码字不易,感谢您的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值