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

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

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

这是一个好问题。没有办法明确地计算诸如猫、狗、麋鹿的均值。那么可以怎么做呢?可以将属性数据编码为数值!你可能希望使用 sklearn.preprocessing 所提供的 LabelEncoder 类。从你希望进行编码的某列数据入手,调用 label encoder 并拟合在你的数据上。

  1. from sklearn.preprocessing import LabelEncoder 
  2. labelencoder_X = LabelEncoder() 
  3. X[:, 0] = labelencoder_X.fit_transform(X[:, 0]) 

(还记得括号里的数字所表示的含义吗?「:」表示希望提取所有行的数据,0 表示希望提取第一列)

这就是将第一列中的属性变量替换为数值所需的全部工作了。例如,麋鹿将用 0 表示,狗将用 2 表示,猫将用 3 表示。

你发现什么潜在问题了吗?

标注体系暗含以下信息:所使用的数值层级关系可能会影响模型结果:3 比 0 的数值大,但猫并不一定比麋鹿大。

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

图:Cel Lisboa 发布于 Unsplash

我们需要创建哑变量。

我们可以为猫创建一列数据,为麋鹿创建一列数据,……以此类推。然后,将每一列分别以 0/1 填充(认为 1=Yes,0 = No)。这表明,如果原始列的值为猫,那么就会在麋鹿一列得到 0,狗一列得到 0,猫一列得到 1。

看上去非常复杂。输入 OneHotEncoder 吧!

导入编码器,并制定对应列的索引。

  1. from sklearn.preprocessing import OneHotEncoder 
  2. onehotencoder = OneHotEncoder(categorical_features = [0]) 

接着是一点拟合和转换。

  1. X = onehotencoder.fit_transform(X).toarray() 

现在,你的那一列数据已经被替换为了这种形式:数据组中的每一个属性数据对应一列,并以 1 和 0 取代属性变量。非常贴心,对吧?如果我们的 Y 列也是如「Y」和「N」的属性变量,那么我们也可以在其上使用这个编码器。

  1. labelencoder_y = LabelEncoder() 
  2. y = labelencoder_y.fit_transform(y) 

这会直接拟合并将 y 表示为编码变量:1 表示「Y」,0 表示「N」。

训练集与测试集的划分

现在,你可以开始将数据集划分为训练集和测试集了。这已经在之前的图像分类教程一文中论述过了。不过记得,一定要将你的数据分为训练集和测试集,永远不要用测试集来训练!需要避免过拟合(可以认为,过拟合就像在一次测验前,记忆了许多细节,但没有理解其中的信息。如果只是记忆细节,那么当你自己在家复习知识卡片时,效果会很好,但在所有会考察新信息的真实测验中,都会不及格。)

现在,我们有了需要学习的模型。模型需要在数据上训练,并在另外的数据上完成测试。对训练集的记忆并不等于学习。模型在训练集上学习得越好,就应该在测试集给出更好的预测结果。过拟合永远都不是你想要的结果,学习才是!

Janko Ferlič 发布于 Unsplash

首先,导入:

  1. from sklearn.model_selection import train_test_split 

现在,可以创建 X_train、X_test、y_train 和 y_test 集合了。

  1. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) 

一种常见的方法是将数据集按 80/20 进行划分,其中 80% 的数据用作训练,20% 的数据用作测试。这也是为何指定 test_size 为 0.2 的原因。你也可以根据自己的需求来任意划分。你并不需要设置 random_state,这里设置的原因是为了可以完全复现结果。

特征缩放

什么是特征缩放?为什么需要特征缩放?

看看我们的数据。我们有一列动物年龄,范围是 4~17,还有一列动物价值,范围是$48,000-$83,000。价值一栏的数值不仅远大于年龄一栏,而且它还包含更加广阔的数据范围。这表明,欧式距离将完全由价值这一特征所主导,而忽视年龄数据的主导效果。如果欧式距离在特定机器学习模型中并没有具体作用会怎么样?缩放特征将仍能够加速模型,因此,你可以在数据预处理中,加入特征缩放这一步。

特征缩放的方法有很多。但它们都意味着我们将所有的特征放在同一量纲上,进而没有一个会被另一个所主导。

导入相关库开始:

  1. from sklearn.preprocessing import StandardScaler 

创建一个需要缩放对象并调用 Standard Scaler

  1. sc_X = StandardScaler() 

(编辑:核心网)

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

热点阅读