数据特征预处理(数据缩放)

我们在进行特征抽取后,需要根据算法的要求,使用特定的统计方法(数学方法)将数据转换成其所需格式(算法要求的数据)。对于不同的数据类型有不同的转换方法。

(1)数值类型数据

对于数值类型数据可采用标准的缩放,其方法有:

  • 归一化
  • 标准化
  • 缺失值处理

(2)类别型数据

采用one-hot编码,像字典、文本数据进行特征抽取,转成了one-hot编码。

(3)时间类型

采用时间切分的方式。

注意:这里主要说说数值型数据的预处理方式。

特征预处理模块:sklearn.preprocessing

1、归一化(※)

sklearn归一化API

sklearn归一化API:sklearn.preprocessing.MinMaxScaler

归一化目的:使得某一个特征对最终结果不会造成更大的影响

MinMaxScaler(feature_range(0,1)...)每个特征缩放到给定的范围(默认[0,1])支持自己指定范围
MinMaxScaler.fit_transform(X)X:numpy array格式的数据[n_samples, n_features]返回转换后形状相同的array
注:feature_range用于指定规范化后的范围
'''
归一化步骤:
    1、实例化MinMaxScalar
    2、通过fit_transform转换
'''
from sklearn.preprocessing import MinMaxScaler

def mm():
    """
    归一化处理
    :return: None
    """
    mm = MinMaxScaler(feature_range=(2, 3))
    data = mm.fit_transform([[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]])
    print(data)
    
    return None

if __name__ == "__main__":
    mm()

如果数据中出现的异常点较多,会有什么影响?

从公式角度:异常点对最大值max和最小值min影响太大,所以归一化最大的缺点就是对异常数据的处理不是太好。

归一化总结:

注意在特定场景下最大值最小值是变化的,另外最大值与最小值非常容易受异常点影响,所以这种方法的鲁棒性比较差,只适合传统精确小数据的场景

2、标准化

目的:使得某一个特征对最终结果不会造成更大的影响

特点:通过对原始数据进行变换,把数据变化到均值为0,标准差为1范围内(注:是标准差,下方图片有误)

注:方差为0的意义(代表什么):某个特征所有值都一样

如果数据中出现的异常点较多,会有什么影响?

标准化中使用的是平均值,异常点对平均值的影响不大

对于标准化来说:如果出现异常点,由于具有一定的数据量,少量的异常点对于平均值的影响并不大,从而方差改变较小

标准化API(sklearn)

sklearn特征化API:sklearn.preprocessing.StandardScaler

StandardScaler(...)处理之后对于每列来说,所有的数据都聚集在均值为0、标准差为1附近
StandardScaler.fit_transform(X)X:numpy array格式的数据 [n_samples, n_features]返回转换后形状相同的array
StandardScaler.mean_原始数据中每列特征的平均值 
StandardScaler.std_原始数据中每列特征的方差 
注:标准化步骤——> 1、实例化StandardScaler   2、通过fit_transform()转换
from sklearn.preprocessing import StandardScaler

def stand():
    """
    标准化
    :return: None
    """
    std = StandardScaler()
    data = std.fit_transform([[1., -1., 3.], [2., 4., 2.], [4., 6., -1.]])
    print(data)
    return None
    
if __name__ == "__main__":
    stand()

标准化总结:

已有样本足够多的情况下比较稳定,适合现代嘈杂大数据情景

3、缺失处理(主要用pandas处理)

如何处理数据中的缺失值?

删除如果每列或者行数据缺失值达到一定的比例,建议放弃整行或者整列
插补(常用)可以通过缺失值每行或者每列的平均值,中位数来填充(注:建议按列填补)

sklearn缺失值API:

sklearn缺失值API:sklearn.preprocessing.Imputer

Imputer(missing_value='NaN', strategy='mean', axis=0)完成缺失值插补axis=0是列,1是行
Imputer.fit_transform(X)X:numpy array格式的数据  [n_samples, n_features]返回转换后形状相同的array
注:在sklearn的0.22以上版本的sklearn去除了Imputer类,我们可以使用SimpleImputer类代替。或者降级回版本sklearn 0.19
from sklearn.preprocessing import Imputer
import numpy as np

def im():
    """
    缺失值处理
    :return: None
    """
    im1 = Imputer(missing_values=np.nan, strategy='mean', axis=0) #axis取0代表按列取平均,1代表按行
    data = im1.fit_transform([[1, 2], [np.nan, 3], [7, 6]])
    print(data)
    return None


if __name__ == "__main__":
    im()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Star星屹程序设计

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值