zoukankan      html  css  js  c++  java
  • 数据预处理(Python scikit-learn)

    在机器学习任务中,经常会对数据进行预处理.如尺度变换,标准化,二值化,正规化.至于采用哪种方法更有效,则与数据分布和采用算法有关.不同算法对数据的假设不同,可能需要不同的变换,而且有时无需进行变换,也可能得到相对更好的效果.因此推荐使用多种数据变换方式,用多个不同算法学习和测试,选择相对较好的变换方式和算法.

    下面对在 Python scikit-learn 库(也称 sklearn 库)中的预处理过程进行介绍:

    1. 加载数据集;
    
    2. 将数据集分为用于机器学习的输入变量和输出变量;
    
    3. 对输入变量进行变换(或预处理);
    
    4. 显示变换结果(可选).

    本文采用 scikit-learn 库自带的鸢尾花数据集(Iris Plants Database)作为示例.

    首先,加载数据集,获取输入变量 X 和输出变量 y ,示例代码如下:

    from sklearn import datasets
    import numpy as np
    
    data = datasets.load_iris()
    X, y = data.data, data.target
    
    np.set_printoptions(precision=3)
    print ("
    " "Preprocess input variables: " "
    ")
    print ("Raw Data: ")
    print (X[:5, :])

    然后,变换输入变量 X (类型为 <type 'numpy.ndarray'>),具体变换如下:

    尺度变换

    将输入变量变换到某一范围,如 0 ~ 1 区间.在 sklearn 库中,使用 MinMaxScaler 类实现.常用于类似梯度下降的优化算法,回归和神经网络中的加权输入,以及类似 K 近邻的距离度量.示例代码如下:

    from sklearn.preprocessing import MinMaxScaler
    
    scaler = MinMaxScaler(feature_range=(0,1))
    rescaledX = scaler.fit_transform(X)
    
    # Print transformed data
    print ("
    Rescaled Data: ")
    print(rescaledX[0:5,:])

    标准化

    通常适用于高斯分布的输入变量.具体来说,将输入变量中的每个属性值减去其平均值,然后除以标准差,得到标准正态分布的属性值.在 sklearn库中,使用 StandardScaler 类实现.常用于假定输入变量高斯分布的线性回归,Logistic回归和线性判决分析.

    from sklearn.preprocessing import StandardScaler
    
    scaler = StandardScaler().fit(X)
    standardizedX = scaler.transform(X)
    print (" Standardized Data: ") print (standardizedX[0:5,:])

    正规化

    将输入变量变换为具有单位范数长度的数据.常用的范数有L1,L2,详见我之前的博文 "数据正规化 (data normalization) 的原理及实现 (Python sklearn)". 在 sklearn 库中,使用 Normalizer 类实现.常用于含有许多 0 的稀疏数据集,像神经网络的采用加权输入的算法和像 K 近邻采用距离度量的算法.

    from sklearn.preprocessing import Normalizer
    
    scaler = Normalizer().fit(X)
    normalizedX = scaler.transform(X)
    
    print ("
    Normalized Data: ")
    print (normalizedX[0:5,:])

    二值化

    使用门限值,将输入数据二值化.当输入变量值大于门限值时,变换为 1;当输入变量值小于或等于门限值时,变换为 0.在 sklearn 库中,使用 Binarizer 类实现.常用于获取清晰的值的概率,产生新的有意义的属性的特征工程.

    from sklearn.preprocessing import Binarizer
    
    binarizer = Binarizer(threshold=0.0).fit(X)
    binaryX = binarizer.transform(X)
    
    print ("
    Binarized Data: ")
    print (binaryX[0:5,:])

    参考资料

    Jason Brownlee. How To Prepare Your Data For Machine Learning in Python with Scikit-Learn. 

    https://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/

  • 相关阅读:
    【python】10分钟教你用python打造贪吃蛇超详细教程
    盘点下那些年我们用过的编程工具IDE都有哪些
    帝国竞争算法(imperialist competitive algorithm, ICA )详解+Java代码实现
    10分钟教你使用Picgo+GitHub+ jsDelivr搭建CDN加速免费图床
    10分钟了解代码命名规范(Java、Python)
    什么是算法?从枚举到贪心再到启发式(下)-终于有人把邻域搜索讲清了!
    番茄路径优化系统介绍-专注于算法与路径优化VRP
    什么是算法?从枚举到贪心再到启发式(上)
    10分钟教你用Python打造学生成绩管理系统
    10分钟教你用Python中的Matplotlib绘制多图并合并展示
  • 原文地址:https://www.cnblogs.com/klchang/p/9061399.html
Copyright © 2011-2022 走看看