数据预处理

特征预处理包括无量纲化、特征分桶、统计变换和特征编码等步骤。

一、无量纲化

只能针对数值型特征。方法有数据标准化(Standardization)、归一化(MinMax归一化、MaxAbs归一化)、正态分布化(Normalization)

数据标准化的原因:
1、某些算法要求样本具有零均值和单位方差;
2、需要消除样本不同属性具有不同量级时的影响。
①、归一化有可能提高精度;数量级的差异将导致量级较大的属性占据主导地位,从而与实际情况相悖(比如这时实际情况是值域范围小的特征更重要);
②、数量级的差异将导致迭代收敛速度减慢;
③、当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;
④、依赖于样本距离的算法对于数据的数量级非常敏感。

1 数据标准化(Standardization)

标准化的前提是特征值服从正态分布,标准化后,其转换成标准正态分布。即μ=0、σ=1,也叫z-score标准化。
适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
公式:x’=(x-μ)/σ

1.1 优缺点

1.1.1优点:

Z-Score最大的优点就是简单,易计算,Z-Score能够应用于数值型的数据,并且不受数据量级的影响,因为它本身的作用就是消除量级给分析带来的不便。

1.1.2 缺点:

①、估算Z-Score需要总体的平均值与方差,但是这一值在真实的分析与挖掘中很难得到,大多数情况下是用样本的均值与标准差替代;
②、Z-Score对于数据的分布有一定的要求,正态分布是最有利于Z-Score计算的;
③、Z-Score消除了数据具有的实际意义,A的Z-Score与B的Z-Score与他们各自的分数不再有关系,因此Z-Score的结果只能用于比较数据间的结果,数据的真实意义还需要还原原值;
④、在存在异常值时无法保证平衡的特征尺度。

1.2 代码实现

class StandardScaler:
    
    def __init__(self):
        self.mean_=None
        self.scale_=None
        
    def fit(self,X):
        """根据数据集X获得数据的均值和方差"""
        assert X.ndim>=2,"The dimension of X must be greater than or equal to 2"
        
        #  求出每个列的均值和方差
        self.mean_=np.mean(np.array([X[:,i] for i in range(X.shape[1])]),axis=1)
        self.scale_=np.std(np.array([X[:,i] for i in range(X.shape[1])]),axis=1)
        
        return self
    
    def transform(self,X):
        """将X根据StandardScaler进行均值方差归一化处理"""
        assert  X.ndim>=2,"The dimension of X must be greater than or equal to 2"
        assert self.mean_ is not None and self.scale_ is not None,\
            "must fit before transform"
        assert X.shape[1]==len(self.mean_),\
            "the feature number of X must be equal to mean_ and std_"
        
        # 创建一个浮点型矩阵,大小和X相同
        resX=np.empty(shape=X.shape)
        
        # 对于每一列(维度)都计算
        for col in range(X.shape[1]):
            resX[:,col]=(X[:,i]-np.mean_[col])/np.std_[col]
            
        return resX

2 归一化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值