• -数据预处理技术(均值移除,范围缩放,归一化,二值化,独热编码)


    1. 均值移除(Mean removal)

    去除均值和方差进行缩放。(均值为0,标准差为1)

      代码展示:

    import numpy as np
    from sklearn import preprocessing
    data=np.array([[3, -1.5, 2, -5.4],
    [0, 4,-0.3,2.1],
    [1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
    data_standardized=preprocessing.scale(data) #0均值处理
    print(data_standardized.shape)
    print('Mean={}'.format(data_standardized.mean(axis=0))) #对列求均值(浮点计算有误差,接近0)
    print('Mean2={}'.format(np.mean(data_standardized,axis=0))) #对列求均值(浮点计算有误差,接近0)
    # axis:int类型,初始值为0,axis用来计算均值 means 和标准方差 standard deviations.
    # 如果是0,则单独的标准化每个特征(列),如果是1,则标准化每个观测样本(行)。
    print('标准化后: ')
    print(data_standardized)
    print('标准差={}'.format(np.std(data_standardized,axis=0)))

    1, 值移除之后的矩阵每一列的均值约为0,而std为1。这样做的目的是确保每一个特征列的数值都在类似的数据范
    围之间,防止某一个特征列数据天然的数值太大而一家独大。
    2, 可以直接调用preprocessing模块中成熟的 方法来对一个numpy 矩阵进行均值移除。
    3, 求一个numpy矩阵的平均值(或std,min,max等)至少有两种方法,如代码中第9行和第10行所示。

    2. 范围缩放(Scaling)

    必要性:数据点中每个特征列的数值范围可能变化很大,因此,有时需要将特征列的数值范围缩放到合理的大小。

    代码展示:

    import numpy as np
    from sklearn import preprocessing
    data=np.array([[3, -1.5, 2, -5.4],
    [0, 4,-0.3,2.1],
    [1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
    data_scaler=preprocessing.MinMaxScaler(feature_range=(0,1)) # 缩放到(0,1)之间
    data_scaled=data_scaler.fit_transform(data)
    print('scaled matrix: *********************************')
    print(data_scaled)

    3. 归一化(Normalization)

    用于需要对特征向量的值进行调整时,以保证每个特征向量的值都缩放到相同的数值范围。机器学习中最常用的归
    一化形式就是将特征向量调整为L1范数,归一化就是L1/L2为1

      范数

    给定向量x=(x1,x2,...xn)
    L1范数:向量各个元素(向量分量)绝对值之和
    L2范数:向量各个元素(向量分量)的平方求和然后求平方根

    代码展示:

    import numpy as np
    from sklearn import preprocessing
    data=np.array([[3, -1.5, 2, -5.4],
    [0, 4,-0.3,2.1],
    [1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
    data_L1_normalized=preprocessing.normalize(data,norm='l1')
    print('L1 normalized matrix: *********************************')
    print(data_L1_normalized)
    print('sum of matrix: {}'.format(np.sum(data_L1_normalized)))
    data_L2_normalized=preprocessing.normalize(data,norm='l2') # 默认:l2
    print('L2 normalized matrix: *********************************')
    print(data_L2_normalized)
    print('sum of matrix: {}'.format(np.sum(data_L2_normalized)))

     

    1,Normaliztion之后所有的特征向量的值都缩放到同一个数值范围,可以确保数据点没有因为特征的基本性质而
    产生的较大差异,即确保所有数据点都处于同一个数据量,提高不同特征数据的可比性。
    2,注意和均值移除的区别:均值移除是对每一个特征列都缩放到类似的数值范围,每一个特征列的均值为0,而
    Normalization是将全局所有数值都缩放到同一个数值范围。

    4. 二值化(Binarization)

    二值化用于将数值特征向量转换为布尔类型向量。

    代码展示:

    import numpy as np
    from sklearn import preprocessing
    data=np.array([[3, -1.5, 2, -5.4],
    [0, 4,-0.3,2.1],
    [1, 3.3, -1.9, -4.3]]) # 原始数据矩阵 shape=(3,4)
    data_binarized=preprocessing.Binarizer(threshold=1.4).fit_transform(data) #小于等于 threshold 为
    0
    print('binarized matrix: *********************************')
    print(data_binarized)

    1,二值化之后的数据点都是0或者1,所以叫做二值化。
    2,计算方法是,将所有大于threshold的数据都改为1,小于等于threshold的都设为0。
    3,经常用于出现某种特征(比如设为1),或者没有出现某种特征(设为0)的应用场合

    5. 独热编码(One-Hot Encoding)

    通常,需要处理的数值都是稀疏地,散乱地分布在空间中,但我们并不需要存储这些大数值,这时就需要使用独热
    编码,独热编码实际上是一种收紧特征向量的工具

    代码展示:

    import numpy as np

    from sklearn import preprocessing

    data=np.array([[0,2,1,12],
    [1,3,5,3],
    [2,3,2,12],
    [1,2,4,3]]) # 原始数据矩阵 shape=(4,4)
    encoder=preprocessing.OneHotEncoder()
    encoder.fit(data)
    encoded_vector=encoder.transform([[2,3,5,3]]).toarray()
    print('one-hot encoded matrix: *********************************')
    print(encoded_vector.shape)
    print(encoded_vector)

    1,独热编码可以缩小特征向量的维度,将稀疏的,散乱的数据集(比如代码块中的data,shape=(4,4))收缩为
    11维致密矩阵(如输出结果,shape=(1,11))。
    2,编码方式为:根据原始数据集data构建编码器encoder,用编码器来对新数据进行编码。比如,第0列有三个
    不同值(0,1,2),故而有三个维度,即0=100,1=010,2=001;同理,第1列有两个不同值(2,3),故而只有两
    个维度,即2=10,3=01;同理,第2列有四个不同值(1,5,2,4),故而有四个维度,即1=1000,
    2=0100,4=0010,5=0001同理,第3列有两个不同值(3,12),故而只有两个维度,即3=10,12=01。所以在面对
    新数据[[2,3,5,3]]时,第0列的2就对应于001,第二列的3对应于01,第三列的5对应于0001,第四列的3对应于
    10,连接起来后就是输出的这个(1,11)矩阵,即为读了编码后的致密矩阵。
    3,如果面对的新数据不存在上面的编码器中,比如[[2,3,5,4]]时,4不存在于第3列(只有两个离散值3和12),则
    输出为00,连接起来后是[[0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0.]],注意倒数第二个数字变成了0

    6.数据离散化

    作用:将连续型数据离散化

    代码展示:

    ages = [20,33,54,23,66,77,88,99,26,63]
    bins = [18,25,35,60,100]
    labels = ['少年','青年','中年','老年']
    new_ages = pd.cut(x=ages,bins=bins,labels=labels,retbins=True)#retbins:返回bins
    print(new_ages)

    有不懂的地方可以联系作者

  • 相关阅读:
    第一次面试准备
    第一次面试复盘(谐云)
    段子第二弹(乐趣就是把一件丢人的事儿不点破,让观众自己打开包袱,但是又不能太难理解,最好1秒半能反应过来)
    mac上安装配置allure(必定成功)
    Django和Python的版本对应关系
    http请求默认值
    mac安装brew
    一种解决方法 Error: No such file or directory @ rb_sysopen
    git提交代码的正确步骤
    C#DirectoryHelper文件夹IO
  • 原文地址:https://www.cnblogs.com/long-ke/p/10820608.html
Copyright © 2020-2023  润新知