• 机器学习之数据准备


    1、数据预处理的理由

    • 在开始训练机器学习的模型之前,需要对数据进行预处理,这是一个必须的过程。不同算法对数据有不同的假设,需要按照不同的方式转换数据,这样做的目的是为了提高模型的准确度。

    2、数据转换的方法

    • 调整数据尺度
    • 正态化数据
    • 二值数据
    • 代码实现

    3、格式化数据

    <1> 导入数据
    <2> 按照算法的输入和输出整理数据
    <3> 格式化输入数据
    <4> 总结显示数据的变化

    4、调整数据尺度

    • 定类尺度:是对事物类别属性的一种测度,按照事物的属性进行分组或分类。
    • 定序尺度:是对事物之间的等级或顺序的一种测度,可以比较优劣或排序。
    • 定比尺度:是对事物类别或次序之间间距的测量。
    • 定距尺度:可以准确地指出类别之间的差距。
    from pandas import read_csv
    from numpy import set_printoptions
    from sklearn.preprocessing import MinMaxScaler
    # ======================================================================
    # 1、调整数据尺寸
    # 导入数据
    file_name = r'../pima_data.csv'
    names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
    data = read_csv(file_name,names=names)
    # 将数据分为输入数据和输出结果
    array = data.values
    print(array)
    X = array[:,0:8]
    print("="*40)
    print(X)
    Y = array[:,8]
    print("="*40)
    print(X)
    '''
    [[   6.     148.      72.    ...,    0.627   50.       1.   ]
     [   1.      85.      66.    ...,    0.351   31.       0.   ]
     [   8.     183.      64.    ...,    0.672   32.       1.   ]
     ..., 
     [   5.     121.      72.    ...,    0.245   30.       0.   ]
     [   1.     126.      60.    ...,    0.349   47.       1.   ]
     [   1.      93.      70.    ...,    0.315   23.       0.   ]]
    ========================================
    [[   6.     148.      72.    ...,   33.6      0.627   50.   ]
     [   1.      85.      66.    ...,   26.6      0.351   31.   ]
     [   8.     183.      64.    ...,   23.3      0.672   32.   ]
     ..., 
     [   5.     121.      72.    ...,   26.2      0.245   30.   ]
     [   1.     126.      60.    ...,   30.1      0.349   47.   ]
     [   1.      93.      70.    ...,   30.4      0.315   23.   ]]
    ========================================
    [[   6.     148.      72.    ...,   33.6      0.627   50.   ]
     [   1.      85.      66.    ...,   26.6      0.351   31.   ]
     [   8.     183.      64.    ...,   23.3      0.672   32.   ]
     ..., 
     [   5.     121.      72.    ...,   26.2      0.245   30.   ]
     [   1.     126.      60.    ...,   30.1      0.349   47.   ]
     [   1.      93.      70.    ...,   30.4      0.315   23.   ]]
    '''
    print('='*40)
    transformer = MinMaxScaler(feature_range=(0,1))
    # 数据转换
    newX = transformer.fit_transform(X)
    # 设定数据的打印格式
    set_printoptions(precision=3)
    print(newX)
    '''
    [[ 0.353  0.744  0.59  ...,  0.501  0.234  0.483]
     [ 0.059  0.427  0.541 ...,  0.396  0.117  0.167]
     [ 0.471  0.92   0.525 ...,  0.347  0.254  0.183]
     ..., 
     [ 0.294  0.608  0.59  ...,  0.39   0.071  0.15 ]
     [ 0.059  0.633  0.492 ...,  0.449  0.116  0.433]
     [ 0.059  0.467  0.574 ...,  0.453  0.101  0.033]]
    '''
    # ======================================================================
    # 2、正态化数据
    from sklearn.preprocessing import StandardScaler
    '''
        正态化数据是有效处理符合高斯分布的数据的手段,输出结果以0为中位数,
    方差为1,并作为假定数据符合高斯分布的算法的输入。
    '''
    print('#'*30,'正态化数据','#'*30)
    # 导入数据
    file_name = r'../pima_data.csv'
    names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
    data = read_csv(file_name,names=names)
    # 将数据分为输入数据和输出结果
    array = data.values
    X = array[:,0:8]
    Y = array[:,8]
    transformer = StandardScaler().fit(X)
    # 数据转换
    newX = transformer.transform(X)
    # 设定数据的打印格式
    set_printoptions(precision=3)
    print(newX)
    '''
    [[ 0.64   0.848  0.15  ...,  0.204  0.468  1.426]
     [-0.845 -1.123 -0.161 ..., -0.684 -0.365 -0.191]
     [ 1.234  1.944 -0.264 ..., -1.103  0.604 -0.106]
     ..., 
     [ 0.343  0.003  0.15  ..., -0.735 -0.685 -0.276]
     [-0.845  0.16  -0.471 ..., -0.24  -0.371  1.171]
     [-0.845 -0.873  0.046 ..., -0.202 -0.474 -0.871]]
    '''
    # ======================================================================
    # 3、标准化数据
    from sklearn.preprocessing import Normalizer
    '''
        标准化数据处理是将每一行的数据的距离处理成1(在线性代数中矢量距离为1)
    的数据又叫做“归一元”处理,适合处理稀疏数据(具有很多0的数据)。
    '''
    print('#'*30,'标准化数据','#'*30)
    # 导入数据
    file_name = r'../pima_data.csv'
    names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
    data = read_csv(file_name,names=names)
    # 将数据分为输入数据和输出结果
    array = data.values
    X = array[:,0:8]
    Y = array[:,8]
    transformer = Normalizer().fit(X)
    # 数据转换
    newX = transformer.transform(X)
    # 设定数据的打印格式
    set_printoptions(precision=3)
    print(newX)
    '''
    ############################## 标准化数据 ##############################
    [[ 0.034  0.828  0.403 ...,  0.188  0.004  0.28 ]
     [ 0.008  0.716  0.556 ...,  0.224  0.003  0.261]
     [ 0.04   0.924  0.323 ...,  0.118  0.003  0.162]
     ..., 
     [ 0.027  0.651  0.388 ...,  0.141  0.001  0.161]
     [ 0.007  0.838  0.399 ...,  0.2    0.002  0.313]
     [ 0.008  0.736  0.554 ...,  0.241  0.002  0.182]]
    '''
    # ======================================================================
    # 4、二值数据
    from sklearn.preprocessing import Binarizer
    '''
        二值数据是使用值将数据转化为二值,大于阈值设置为1,
    小于阈值设置为0,这个过程叫做二分数据或阈值转换。
    '''
    print('#'*30,'二值数据','#'*30)
    # 导入数据
    file_name = r'../pima_data.csv'
    names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
    data = read_csv(file_name,names=names)
    # 将数据分为输入数据和输出结果
    array = data.values
    X = array[:,0:8]
    Y = array[:,8]
    transformer = Binarizer(threshold=0.0).fit(X)
    # 数据转换
    newX = transformer.transform(X)
    # 设定数据的打印格式
    set_printoptions(precision=3)
    print(newX)
    '''
    ############################## 二值数据 ##############################
    [[ 1.  1.  1. ...,  1.  1.  1.]
     [ 1.  1.  1. ...,  1.  1.  1.]
     [ 1.  1.  1. ...,  1.  1.  1.]
     ..., 
     [ 1.  1.  1. ...,  1.  1.  1.]
     [ 1.  1.  1. ...,  1.  1.  1.]
     [ 1.  1.  1. ...,  1.  1.  1.]]
    '''
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 总结
      • 这里总结了scikit-learn中对数据进行预处理的四种方法,这四种方法适用不同的场景,可以在
        实践中根据不同的算法模型来选择不同的数据预处理方法。
  • 相关阅读:
    借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法
    文档检索(search project)
    米尔MYD-JX8MPQ yocto 编译流程 (记录)
    14.8 Socket 一收一发通信
    xss.haozi练习通关详解
    谷歌 Chrome 浏览器正推进“追踪保护”功能
    java中的函数式接口是什么?
    YOLO系列的Backbone改进历史
    ISO/IEC 27001:2022 发布(中文),信息安全、网络安全和隐私保护 信息安全管理系统 要求
    CSS 之 优雅的垂直居中
  • 原文地址:https://blog.csdn.net/sz1125218970/article/details/128162466