Machine Learning-数据预处理教程学习

“水点将苦与乐连结交织风光灿烂与失意“——致敬最爱的梅西机器学习系列专栏选自 Python-Machine-Learning-Book On GitHub作者:Sebas...
摘要由CSDN通过智能技术生成

640?wx_fmt=png

“水点将苦与乐连结

交织风光灿烂与失意“

——致敬最爱的梅西

机器学习系列专栏

选自 Python-Machine-Learning-Book On GitHub

作者:Sebastian Raschka

翻译&整理 By Sam

这次学习一些基础性的东西,那就是最基本但也很重要的一步——数据预处理。本篇学习笔记主要记录了一些常见的数据预处理的方法和思路,还是以python来实现,所以我也对学习中的code进行了保存,大家如果需要的话可以到公众号后台输入关键字 “预处理” 来获得呗,话不多说,马上开始今天的学习。

按照传统,先把本文的主体结构前置,如下:

  • 处理数据缺失

    • 删除有缺失的样本或特征

    • 填充缺失值

  • 处理分类数据

    • 映射有序特性

    • 对类别特征进行编码

    • 对无序特征进行“独热编码”

  • 学习划分训练及验证集

  • 统一特征取值范围

  • 选择有意义(有效)的特征

    • L1正则化的稀疏解

    • 序列特征选择算法

  • 使用随机森林评估特征重要性

PS:代码已单独保存:可在公众号后台输入“预处理”进行获取ipynb文件

处理数据缺失

数据缺失,在现实生活中是十分常见的,原因也是非常复杂的,在我们进行建模的过程中,如果我们不对这些缺失值进行适当的处理,出来的模型恐怕也效果不太好,其重要性这里就不累赘多说,我们先来创建一个小栗子,助于大家理解数据缺失的问题:

 1import pandas as pd
 2from io import StringIO
 3csv_data = '''A,B,C,D
 41.0,2.0,3.0,4.0
 55.0,6.0,,8.0
 610.0,11.0,12.0,'''
 7# If you are using Python 2.7, you need
 8# to convert the string to unicode:
 9# csv_data = unicode(csv_data)
10df = pd.read_csv(StringIO(csv_data))
11df

output:

640?wx_fmt=png

1# 查看各列缺失情况
2df.isnull().sum()

output:

640?wx_fmt=png

我们创建了一个csv格式的数据并且读入DataFrame对象,如果想统计有多少缺失,我们可以使用isnull方法来返回一个值为布尔类型的DataFrame,判断每个元素是否缺失,如果元素缺失,值为True。然后使用sum方法,我们就能得到DataFrame中每一列的缺失值个数。

这里提示一下,预处理时推荐使用pandas的DataFrame格式,而不要用NumPy数组。由DataFrame对象得到NumPy数组很方便,直接通过values属性即可,然后就可以用sklearn中的算法了。

1.1 删除有缺失的样本或特征

那么,如果我们想要删除这些缺失的数据,处理的方式是怎么样的呢?下面给出了几种场景,都是使用dropna方法来实现的。

 1# 删除含有缺失值的样本(即行)
 2print (df.dropna())
 3print ('\n')

 4# 删除含有缺失值的特征(即列)
 5print (df.dropna(axis=1))
 6print ('\n')

 7# 删除所有列都是缺失的样本
 8print (df.dropna(how='all'))
 9print ('\n')

10# 删除没有4个非空特征的样本
11print (df.dropna(thresh=4))
12print ('\n')

13# 删除指定特征上有缺失的样本(这里‘c'为指定特征)
14print (df.dropna(subset=['C']))

output:

640?wx_fmt=png

1.2 填充缺失值

有些特征的缺失其实是可以通过填充的方式来弥补的,所以这里也介绍一下sklearn中的Imputer类方法。

参数axis:axis=0计算每个特征取值的平均值用来填充,若axis=1则计算样本所有取值的平均值用来填充;

参数strategy:包括mean、median和most_frequent(most_frequent对于处理分类数据类型的缺失值很有用)。

1from sklearn.preprocessing import Imputer
2# 这里使用均值填充
3imr = Imputer(missing_values='NaN', strategy='mean', axis=0)
4imr = imr.fit(df)
5imputed_data = imr.transform(df.values)
6imputed_data

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值