Python AI极简入门3:数据预处理

一、数据预处理的重要性

在机器学习中,数据的准确性关乎着机器学习任务的成败、直接影响着预测测的结果。

而数据的准确性,一方面指数据的完整度,用于机器学习预测的数据是否全面;另一方面则指数据的统一度,数据与数据之间的分布是否统一。

二、在Python中进行数据预处理

对数据进行预处理的方式有很多中,比如规范化、标准化、二值化、编码分类等等。我们可以通过sklearn模块的preprocessing子模块对数据进行预处理,其中包含了各种数据预处理的集成函数:

假如,我们有一组数据:

每一行特征数据的数值都相差比较大,比如第一行最大值为3.5,最小值为-6,相差为9.5;第二行最大值为4,最小值为-0.3,相差为4.3。

将其转化为数组可以直观地看出来:

下面,我们一一介绍各种数据预处理方法以及在Python中的实现方法:

标准化处理

对数据集进行标准化处理是很多许多机器学习估计器的通用要求 ,因为如果单个特征看起来不像标准正态分布数据那么它们可能会表现得很差。

来看看实际的例子:

我们调用preprocessing模块的StandardScaler()方法,对data数组进行标准化缩放,结果返回了一个数值差异比原始数组小多了的数组。

将值缩放到0-1之间

还有一种标准化方法MinMaxScaler()能够将数值缩放到0到1之间,更好的约束的数组特征:

可以发现,data数组中所有的值都化为了0到1之间的数据。

数据正常化

数据的正常化处理(Normalization)则是将个体样本数值缩放为单位标准。 我们可以在preprocessing中的Normalizer()方法进行调用,下面看实际的处理效果:

数据二值化

前面介绍的数据预处理方法都是对数据进行缩放,除了对数据进行缩放之外,我们还可以对数据进行二值化处理,将不同的数据全部处理为0或1这两个数值。

下面看看实际的效果:

对比一下原始的数据:

似乎其将小于0的数据都处理为了0,大于1的数据都处理为了1。我们可以对其指定threshold参数来设置二值化的阀值,下面请看:

可以发现,默认情况下被处理为1的一些数据(比如1),已经被处理为了0。

处理分类编码

除了上述示例中的数值数据,我们在实际的数据处理过程中还会遇到数据为分类字符串的情况,比如下面这种情况:

这样的字符串数据既不能转换为数据,也无从缩放。不过这种数据多是用于表示分类的,我们可以使用编码分类特征来对这类数据进行预处理。

在sklearn中,对应的处理方法为preprocessing.LabelEncoder(),下面我们看一个实际的演示:

可以发现,我们的四个城市名称字符串被编码为了值为1、0、2、3的数组。那么如果取回之前的字符串数据呢,可以使用classes_属性进行取回:

同时还能根据编码后的数字,来获取到真实的分类字符串:

处理缺失值

在实际的数据集中,还经常会出现有缺失值的情况,其中有一些缺失值表示为None,有一个则是表示为一个空字符串"",面对这种情况,我们可以将有缺失值的行数删除,但是如果数据量大的话,可能会影响到机器学习模型的准确性。一个比较好的方法是填充这些缺失值。

处理缺失值在pandas模块中就有很成熟的方法来实现,比如fillna()方法。

我们在data中新增一列空值:

再使用fillna()方法,对空值进行填充:

这样就完成了缺失值的填充了。

更多

除了上述介绍的sklearn的数据预处理方法,还有很多没有提及到,在sklearn的官方文档中,大家可以详细去了解:

三、下一篇

在了解了数据预处理的几种基本方法后,下一篇我们将介绍创建一个机器学习回归模型。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2018-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程

AI 研习社按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。AI 研习社编译。 ? Jaso...

3187
来自专栏风口上的猪的文章

机器学习(1) - TensorflowSharp 简单使用与KNN识别MNIST流程

机器学习是时下非常流行的话题,而Tensorflow是机器学习中最有名的工具包。TensorflowSharp是Tensorflow的C#语言表述。本文会对Te...

1313
来自专栏Script Boy (CN-SIMO)

格子刷油漆【动态规划问题】—NYOJ 980

1542
来自专栏AI科技评论

开发 | 如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程

AI科技评论按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。 Jason Brownlee ...

3495
来自专栏机器之心

基于注意力机制,机器之心带你理解与训练神经机器翻译系统

6028
来自专栏张俊红

python数据科学-数据预处理

总第88篇 数据预处理是我们在做机器学习之前必经的一个过程,在机器学习中常见的数据预处理包括缺失值处理,缩放数据以及对数据进行标准化处理这三个过程。 01|缺失...

3696
来自专栏奇点大数据

扔掉代码表!用RNN“破解”摩斯电码

作者:Sandeep Bhupatiraju 剧透警告:摩斯电码并不需要破解。它很有用,因为消息可以使用这些代码以最少的设备发送,并且我说它不需要破解,因为代码...

4095
来自专栏信数据得永生

《Scikit-Learn与TensorFlow机器学习实用指南》第15章 自编码器

3897
来自专栏AILearning

【Scikit-Learn 中文文档】聚类 - 无监督学习 - 用户指南 | ApacheCN

2.3. 聚类 未标记的数据的 Clustering(聚类) 可以使用模块 sklearn.cluster 来实现。 每个 clustering algo...

1.7K10
来自专栏人工智能头条

TensorFlow Wide And Deep 模型详解与应用

8203

扫码关注云+社区