preprocessing数据预处理模块使用指南

preprocessing 是sklearn库的一个数据预处理模块,它提供了一些实用的数据预处理函数和预处理类。下边就对这些功能进行一些简单介绍,便于大家理解。

安装: pip install scikit-learn

模块导入并简记为sp:

import sklearn.preprocessing as sp

一、 标准化数据

这里指的标准化主要包括两部分,均值移除+方差规模化 

其目的是:使每个特征的基准位置和分散范围加以统一,在数量级上尽可能接近,对模型的预测结果做出均等的贡献。这对后续模型的建立至关重要。

1. 标准化函数

 

        1. 标准化:  
            sp.scale(原始样本矩阵X, with_mean=True, with_std=True, copy=True)    
            均值移除样本矩阵(转为标准正态分布-均值为0,标准差为1,默认按列axis=0)


        2. 范围缩放:
            sp.minmax_scale(X,feature_range=(0, 1), axis=0, copy=True)    
            将数据在缩放在固定区间,默认缩放到区间 [0, 1]


        3. 针对稀疏矩阵:
            sp.maxabs_scale(X,axis=0, copy=True)        
            数据的缩放比例为绝对值最大值,并保留正负号,即在区间 [-1.0, 1.0] 内。
            *唯一可用于稀疏数据 scipy.sparse的标准化*


        4. 针对异常值: 
            sp.robust_scale(X,axis=0, with_centering=True, with_scaling=True,copy=True)
            通过 Interquartile Range (IQR) 标准化数据,即四分之一和四分之三分位点之间

 2. 以上方法对应的类 

灵活的使用这些类,可以简化数据处理过程,比如我们在训练集上对数据做了转换,只需要基于训练集构建出这个转换器,再在测试数据上使用它即可完成转换,不必转换两次。


            通常的使用方法:
                1)基于训练数据构建转换器scaler = xxxScaler().fit()
                2)直接将训练数据的转换方法应用于测试集
                    scaler.transform(test_x)


            1. sp.StandardScaler(copy=True, with_mean=True, with_std=True):
                标准正态分布化的类
                属性:
                scale_:ndarray,缩放比例
                mean_:ndarray,均值
                var_:ndarray,方差
                n_samples_seen_:int,已处理的样本个数,调用partial_fit()时会累加,调用fit()会重设


            2 .sp.MinMaxScaler(feature_range=(0, 1),copy=True):
                将数据在缩放在固定区间的类,默认缩放到区间 [0, 1],对于方差非常小的属性可以增强其稳定性,维持稀疏矩阵中为0的条目
                属性:
                min_:ndarray,缩放后的最小值偏移量
                scale_:ndarray,缩放比例
                data_min_:ndarray,数据最小值
                data_max_:ndarray,数据最大值
                data_range_:ndarray,数据最大最小范围的长度


            3. classpreprocessing.MaxAbsScaler(copy=True):
                数据的缩放比例为绝对值最大值,并保留正负号,即在区间 [-1.0, 1.0] 内。
                **专门用于稀疏数据scipy.sparse**
                属性:
                scale_:ndarray,缩放比例
                max_abs_:ndarray,绝对值最大值
                n_samples_seen_:int,已处理的样本个数


            4. classpreprocessing.RobustScaler(with_centering=True,with_scaling=True, copy=True):
                通过 Interquartile Range (IQR) 标准化数据,即四分之一和四分之三分位点之间
                属性:
                center_:ndarray,中心点
                scale_:ndarray,缩放

3. 类方法


            fit(X[,y]):            根据数据 X 的值,设置标准化缩放的比例
            transform(X[,y, copy]):用之前设置的比例标准化 X
            fit_transform(X[, y]):    根据 X设置标准化缩放比例并标准化
            partial_fit(X[,y]):    累加性的计算缩放比例
            inverse_transform(X[,copy]):将标准化后的数据转换成原数据比例
            get_params([deep]):    获取参数
            set_params(**params):    设置参数

二、归一化(正则化)


        正则化是将样本在向量空间模型上的一个转换,有L1正则化和L2正则化。

            L1正则化:    向量中各元素绝对值之和
            L2正则化:    向量中各元素的平方之和

1. 正则化函数

            sp.normalize(原始样本矩阵X,norm="l1")    ->    归一化样本矩阵
 

2. 对应的类


            sp.Normalizer(norm='l2', copy=True):
            数据归一化的类。可用于稀疏数据 

3. 类方法:


            fit(X[,y])
            transform(X[, y,copy])
            fit_transform(X[,y])
            get_params([deep])
            set_params(**params)
        *normalize和Normalizer都既可以用在密集数组也可以用在稀疏矩阵中*

三、二值化


        有时根据业务需求,需要设定一个阈值,使得样本矩阵中大于阈值的元素置换为1;小于或等于阈值置换为0。
        这样,整个样本矩阵就被处理为只由0和1组成的样本空间。但是其缺点也一目了然,即: 会损失部分数据细节。

1. 二值化函数


        1. sp.binarize(X,threshold=0.0, copy=True):
            将数据转化为 0 和 1,其中小于等于 threshold 为 0,可用于稀疏数据 


2. 对应的类


            sp.Binarizer(threshold=0.0,copy=True):
            二值化处理的类,可用于稀疏数据


3. 类方法


            fit(X[,y])
            transform(X[, y,copy])
            fit_transform(X[,y])
            get_params([deep])
            set_params(**params)
            其中fit 函数不会做任何操作


四、独热编码 one hot encoder

        将有n种特征值的一个特征变成n个二元的特征,所有二元特征互斥,当某个二元特征为 1 时,表示取对应的这个类别

        ohe = sp.OneHotEncoder(n_values='auto',
                                categorical_features='all',
                                dtype='float', 
                                sparse=True,
                                handle_unknown='error')    
        参数:
            n_values:每个特征的类别个数,可以为‘auto’,int或者 int数组
            categorical_features:被当作类别来处理的特征,可以为“all”或者下标数组指定或者mask数组指定
            sparse: False代表不压缩;默认True代表压缩,只展示1的位置(位置元组:值,eg:(0,5) 1)
            
        方法:
            fit(X[, y])
            transform(X[, y,copy])
            fit_transform(X[,y])
            get_params([deep])
            set_params(**params)

可以发现这些数据处理器的方法中,都有fit,transform和fit_transform方法,这里做一下简单说明以便区分:

1)fit():表示用原始数据去定义转换器;

2)transform():表示将构建号的转换器应用到新的数据里,即使用相同的转换规则去处理数据  ;

3)fit_transform():则表示定义并使用的过程,及时前面已经定义(fit)过转换器,此时用了fit_ransform()就表示重新定义转换器了,另外这里需要特别注意一下。如果新的数据样本有了不同于原始数据的新值,则不能使用原转换器了,此时就需要重新fit_transform一下。


            
五、标签编码


        将类别特征转换为多维二元特征,并将每个特征扩展成用一维表示:0,1,2,3,...,每个值代表一个标签。这里大家可以自动脑补,将标签编码和独热编码进行一下简单对比,以理解两者的异同。往往在实际应用过程中,输入样本特征的处理通常采用独热编码,而像分类问题的输出一般采用标签编码。
        lbe = sp.LabelEncoder(neg_label=0, pos_label=1,sparse_output=False)
        属性:
            classes:        ndarry,所有类别的值
            y_type_:        str
            multilabel_:    bool
            sparse_input_:    bool
            indicator_matrix_:str
        方法:
            fit(X[, y])
            transform(X[, y,copy])
            fit_transform(X[,y])
            inverse_transform(y)
            get_params([deep])
            set_params(**params)

      

六、填补缺失数据


        实际数据中往往存在Nan或null值的情况,一味的丢弃可能造成数据样本的浪费,一定程度上也会影响到模型的构建,所以填补缺失值是一个很好的处理手段,实际应用中,可以使用均值,中位数,众数等对缺失值进行填补。
        imp = Imputer(missing_values='NaN', strategy='mean', axis=0,verbose=0,copy=True)
        strategy:填补策略
            "mean"        -    均值
            "median"    -    中位数
            "most_frequent"-众数 
        对于稀疏矩阵:
            imp = Imputer(missing_values=0, strategy='mean', verbose=0)
            代表将0作为缺失值处理,为其补上均值

七、创建多项式特征


        可以将数据多项式结合生成多维特征,比如 [a,b] 的二次多项式特征为5个 [1, a, b, a^2, ab, b^2]
        比如:
            [[0 1]
             [2 3]
             [4 5]]
            -->    [[ 1.  0.  1.  0.  0.  1.]
                     [ 1.  2.  3.  4.  6.  9.]
                     [ 1.  4.  5. 16. 20. 25.]]

        sp.PolynomialFeatures(degree=2,interaction_only=False, include_bias=True):
        参数:
            degree:int,多项式次数
            interaction_only:boolean,是否只产生交叉相乘的特征
            include_bias:boolean,是否包含偏移列,即全为1 的列
        方法:
            fit(X[, y])
            transform(X[, y,copy])
            fit_transform(X[,y])
            get_params([deep])
            set_params(**params)


八、增加伪特征


        sp.add_dummy_feature(X,value=1.0):
        在 X 的第一列插入值为 value 的列


九、自定义特征转换函数


        将原始的特征放进自定义的函数中做转换,其输出值就是根据自定函数的转换规则转换后的新特征
        transformer = sp.FunctionTransformer(func=None,validate=True, accept_sparse=False, pass_y=False):
        func是自定义函数

以上就是sklearn.preprocessing模块的基本应用,可以帮助大家在数据预处理上更加得心应手,如有不足或疏漏之处还请指正。

  • 5
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值