前言
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
看,每一步梯度的方向都基本指向最小值,可以大踏步地前进。
后记
我也是刚开始参与这个项目,如果有兴趣一起的,可以后台私聊我或者微信私聊我(如果有我微信的话)
如果觉得文章有用,可以顺手关注,如果关注的人多,我会更有动力写下去的~
老码农...只写干货
领取专属 10元无门槛券
私享最新 技术干货