机器学习数据预处理(Data PreProcessing)

Contents

一、背景

数据预处理的目的是保证数据的质量,以便能够更好的为后续的分析、建模等工作服务。 (代码及数据Machine-Learning )

二、数据预处理

数据预处理主要有

  • 数据清洗(如对异常值、缺失值、数据格式的处理)
  • 构造新变量(均值、因子分子中的因子)
  • 数据标准化
  • 数据类型的变换等。

对于异常值、缺失值要给出其产生的原因,对于构造新变量、数据标准化、数据类型变换同样也要给出采用此种方法的原因。

三、 实例

  1. 导包(importing the library)
    import numpy as np
    import pandas as pd
    
  2. 读取数据、展示数据(importing dataset)
    dataset = pd.read_csv('Data.csv')
    dataset.head()
    

    image1
    可以看出,这个数据集包含 Country, Age Salary, Purchased 四个字段。
    机器学习或者说数据科学中很重要的一点就是建立 metrics(度量,指标)。每一列都可以是一个 metric。
    metrics 主要包括两部分:independent variable 和 dependent variable。

  3. 创建自变量和因变量
    X = dataset.iloc[ : , :-1].values
    Y = dataset.iloc[ : , 3].values
    

    iloc 表示取数据集中的某些行和某些列,逗号前表示行,逗号后表示列。

  4. 处理缺失的数据(Missing Data)
    在数据集中可能会出现为空的数据,我们不能删除有空数据的列,这样会对我们机器学习的结果造成影响,在 data science 中我们可以用NaN代替空值,但是在 ML 中必须要求数据为 numeric。
    imputer = Imputer(missing_values = "NaN", strategy = "mean", axis =0)
    imputer = imputer.fit(X[ : , 1:3])
    X[ : , 1:3] = imputer.transform(X[ : , 1:3])
    

    image2
    在这里我们可以通过对整列数据进行平均化或中值化来填补缺失数据,使用sklearn.preprocessing 中的 Imputer(sklearn.preprocessing.Imputer — scikit-learn 0.19.2 ) 类方法来解决这个问题。

  5. 解析分类数据(category data)
    from sklearn.preprocessing import LabelEncoder, OneHotEncoder
    labelencoder_X= LabelEncoder()
    X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0]) # 不包括 index 行
    

    创建虚拟变量

    onehotencoder = OneHotEncoder(categorical_features = [0])
    X = onehotencoder.fit_transform(X).toarray()
    labelencoder_Y = LabelEncoder()
    Y =  labelencoder_Y.fit_transform(Y)
    

    在对数据集进行处理时候我们会遇到一些包含同类别的数据, 我们需要对这些类数据进行编码,将其转化为数值。
    在这里,不同的国家我们可以用1,2,3区分不同国家,但是这样会出现一个比较严重的问题。就是国家之间的地位是相同的,但是数字有顺序大小之分。所以我们用另一种方法,就是将不同的类别(如不同国家)另外分为一个列,属于这个国家的设置为1,不属于的设置为0。

  6. 拆分数据集为训练集合和测试集合
    from sklearn.model_selection import train_test_split
    X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)
    

    我们通常需要对源数据集进行处理,分离出训练集和测试集,分别用于模型的训练和测试。通常所使用的分离比为8:2,我们可以通过导入 sklearn.model_selection 库的 train_test_split() 方法来解决这个问题。

  7. 特征缩放(feature scaling) 在机器学习中,由于每个变量的范围不同,如果两个变量之间差距太大,会导致距离对结果产生影响。所以我们要对数据进行一定的标准化改变,以通过特征标准化或 Z 分数正则化来解决。最简单的方式是将数据缩放至 [0.1] 或者 [-1,1] 之间
    from sklearn.preprocessing import StandardScaler
    sc_X = StandardScaler()
    X_train = sc_X.fit_transform(X_train)
    X_test = sc_X.transform(X_test)
    
  8. 数据展示
    现在让我们看看,训练集中的 X_train 是怎么样的 image4

四、小结

数据和特征决定了机器学习的上限,因此在机器学习中,数据处理显得非常重要,是机器学习的基础。

References

[1] Pandas学习笔记(DataFrame基本操作)
[2] 数据分析第三步:数据预处理
[3] 导入数据集
[4] 机器学习(一):入门
[5] sklearn.preprocessing.Imputer — scikit-learn 0.19.2
[6] scikit_learn(sklearn)数据预处理
[7] 使用sklearn做单机特征工程

Further Reading

[1] Machine-Learning
[2] scikit-learn.org


转载请注明:yezuolin的博客 » 点击阅读原文