加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

数据清洗预处理入门完整指南

发布时间:2019-02-23 09:30:45 所属栏目:教程 来源:机器之心编译
导读:数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效就是这么简单。 人们通常认为,数据预处理是一个非常枯燥的部分。但它就是「做好准备」
副标题[/!--empirenews.page--]

数据预处理是建立机器学习模型的第一步(也很可能是最重要的一步),对最终结果有决定性的作用:如果你的数据集没有完成数据清洗和预处理,那么你的模型很可能也不会有效——就是这么简单。

数据清洗预处理入门完整指南

人们通常认为,数据预处理是一个非常枯燥的部分。但它就是「做好准备」和「完全没有准备」之间的差别,也是表现专业和业余之间的差别。就像为度假做好事先准备一样,如果你提前将行程细节确定好,就能够预防旅途变成一场噩梦。

那么,应该怎么做呢?

本文将带你领略,如何在任意的数据集上,针对任意一个机器学习模型,完成数据预处理工作。

第一步,导入

让我们从导入数据预处理所需要的库开始吧。库是非常棒的使用工具:将输入传递给库,它则完成相应的工作。你可以接触到非常多的库,但在 PYTHON 中,有三个是最基础的库。任何时候,你都很可能最终还是使用到它们。这三个在使用 PYTHON 时最流行的库就是 Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库,由于代码是基于数学公式运行的,因此就会使用到它。Maplotlib(具体而言,Matplotlib.pyplot)则是满足绘图所需要的库。Pandas 则是最好的导入并处理数据集的一个库。对于数据预处理而言,Pandas 和 Numpy 基本是必需的。

最适当的方式是,在导入这些库的时候,赋予其缩写的称呼形式,在之后的使用中,这可以节省一定的时间成本。这一步非常简单,可以用如下方式实现:

  1. import numpy as np 
  2. import matplotlib.pyplot as plt 
  3. import pandas as pd 

现在,可以通过输入如下语句读入数据集

  1. dataset = pd.read_csv('my_data.csv') 

这个语句告诉 Pandas(pd) 来读入数据集。在本文中,我也附上数据集的前几行数据。

我们有了数据集,但需要创建一个矩阵来保存自变量,以及一个向量来保存因变量。为了创建保存自变量的矩阵,输入语句:

  1. X = dataset.iloc[:, :-1].values 

第一个冒号表示提取数据集的全部行,「:-1」则表示提取除最后一列以外的所有列。最后的「.values」表示希望提取所有的值。接下来,我们希望创建保存因变量的向量,取数据的最后一列。输入语句:

  1. y = dataset.iloc[:, 3].values 

记住,在查看数据集的时候,索引(index)是从 0 开始的。所以,如果希望统计列数,从 0 开始计数而不是 1。「[:, :3]」会返回 animal、age 和 worth 三列。其中 0 表示 animal,1 表示 age,2 表示 worth。对于这种计数方法,即使你没见过,也会在很短的时间内适应。

如果有缺失数据会怎么样?

事实上,我们总会遇到数据缺失。对此,我们可以将存在缺失的行直接删除,但这不是一个好办法,还很容易引发问题。因此需要一个更好的解决方案。最常用的方法是,用其所在列的均值来填充缺失。为此,你可以利用 scikit-learn 预处理模型中的 inputer 类来很轻松地实现。(如果你还不知道,那么我强烈建议你搞明白它:scikit-learn 包含非常棒的机器学习模型)。在机器学习中,你可能并不适应诸如「方法」、「类」和「对象」这些术语。这不是什么大问题!

  • 类就是我们希望为某目的所建立的模型。如果我们希望搭建一个棚子,那么搭建规划就是一个类。
  • 对象是类的一个实例。在这个例子中,根据规划所搭建出来的一个棚子就是一个对象。同一个类可以有很多对象,就像可以根据规划搭建出很多个棚子一样。
  • 方法是我们可以在对象上使用的工具,或在对象上实现的函数:传递给它某些输入,它返回一个输出。这就像,当我们的棚子变得有点不通气的时候,可以使用「打开窗户」这个方法。

图:Roman Kraft 发布于 Unsplash

为了使用 imputer,输入类似如下语句。

  1. from sklearn.preprocessing import Imputer 
  2. imputer = Imputer(missing_values = np.nan, strategy = ‘mean’, axis = 0) 

均值填充是默认的填充策略,所以其实不需要指定,加在此处是为了方便了解可以包含什么信息。missing_values 的默认值是 nan。如果你的数据集中存在「NaN」形式的缺失值,那么你应该关注 np.nan,可以在此查看官方文档:

https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

为了拟合这个 imputer,输入:

  1. imputerimputer = imputer.fit(X[:, 1:3]) 

我们只希望在数据存在缺失的列上拟合 imputer。这里的第一个冒号表示包含所有行,而「1:3」则表示我们取索引为 1 和 2 的列。不要担心,你很快就会习惯 PTYHON 的计数方法的。

现在,我们希望调用实际上可以替换填充缺失数据的方法。通过输入以下语句完成:

  1. X[:, 1:3] = imputer.transform(X[:, 1:3]) 

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读