机器学习之数据预处理

前言

github 上最近有个项目特别火——100 天机器学习打卡行动,内容循序渐进,我自己也打算刷一刷,地址如下:

https://github.com/Avik-Jain/100-Days-Of-ML-Code

第一天的任务是学习机器学习中数据的预处理,总共分为了6步,总结的特别好,我参考了一些资料,把它的内容扩充了一下,使得基础不那么好的也能大概看懂,哪怕 python 基础不好的也可以根据代码望文生义。和大家分享一下。

正文

step1:import libraries(载入库)

Step 2: Importing dataset(载入数据库)

step 3:Handling the missing data(处理缺失值)

前两步没什么好说的。但是数据清洗是很机器学习的重中之重,包括但不仅限于一下几种

数据的完整性:例如人的属性中缺少性别、籍贯、年龄等

数据的唯一性:例如不同来源的数据出现重复的情况

数据的杈威性:例如同一个指标出现多个来源的数据,且数值不一样

数据的合法性:例如获取的数据与常识不符,年龄大于150岁

数据的一致性:例如不同来源的不同指标,实际内涵是一样的,或是同一指标内涵不一致

这里我们只讨论最简单的一种情况,数据的完整性(数据缺失):

简介

有很多可能导致数据的丢失,打个比方:

调查报告里有的人并不愿意填写他们的收入

女朋友性格的调查数据里,很多人其实没有女朋友

可以通过这样一行代码统计缺失值的个数

解决方案

把带有缺失值那一项去掉

( 代码可以左右拖动)

Imputation(推断):如我们下面的程序一样,用别数据的平均值来替代缺失值

我们打印一下,结果如下:

Step 4: Encoding categorical data(解析分类数据)

上面得到的数据中,每一条都包含了一个字符串和两个实数,这样的数据其实对机器学习来说是是没有什么意义的。(机器又看不懂字符串里表示的是德国还是法国,也不必看懂)

比如这里出现了三个国家,我们把:

法国用矩阵  [1,0,0] 替代

德国用矩阵  [0,1,0] 替代

西班牙用矩阵 [0,0,1] 替代

这样我们就把无意义的字符串转为了线性代数中可用来运算的矩阵

Step 5: Splitting the datasets into training sets and Test sets

Step 6: Feature Scaling

我们可以看到,上面的特征虽然矩阵化了,但是各维特征的跨度差距很大。这一步的作用就是使得梯度下降更快收敛。

如果不做这一步,目标函数就会是“扁”的:

aaa

(图中椭圆表示目标函数的等高线,两个坐标轴代表两个特征)这样,在进行梯度下降的时候,梯度的方向就会偏离最小值的方向,走很多弯路。如果归一化了,那么目标函数就“圆”了:

bbb

看,每一步梯度的方向都基本指向最小值,可以大踏步地前进。

后记

我也是刚开始参与这个项目,如果有兴趣一起的,可以后台私聊我或者微信私聊我(如果有我微信的话)

如果觉得文章有用,可以顺手关注,如果关注的人多,我会更有动力写下去的~

老码农...只写干货

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181020G17NGZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券