博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【机器学习】Google Developer-特征工程介绍
阅读量:4171 次
发布时间:2019-05-26

本文共 1753 字,大约阅读时间需要 5 分钟。

Table of Contents



最近在通过Google online education学习机器学习有关的课程,对于学习的内容做一个简单的记录。

学习资源链接: 

感兴趣的也可以去学习,这个需要VPN访问。 

1、什么是特征工程?

特征工程简单来说,就是将原始数据转换为特征向量。这种特征向量被计算机所使用,用来训练模型。 如下图:

2、 那么将原始数据如何进行转换呢?

 2.1 数值映射

如果是整型或者浮点数据则不需要特别的转换,直接使用,一般算法中使用浮点数,整型的话可以转换为浮点。

2.2 分类值映射

一般分类的特征都包含多个选项的数据集。比如街道名字“,{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}

这种字符串类型不能直接用于机器学习,所以需要转换。有一种转换方法就是one-hot 编码。 它的编码规则是将出现的设置为1,其他的都设置为0.如下图:

如果1个地方在2条街道的交叉口,则可把两条街道的对应值都设置为1

在这个转换中,也许有人会疑问,假如有上万条街道,那么存储信息会占用磁盘很大。根据我们大学知识,这个类型我们可以用稀疏矩阵,只存储1信息。

3、如何提高特征的质量?

3.1 尽量避免很少使用离散的特征值

好的特征值应该在数据集中至少出现5次。比如在房屋价格预测,house_type是维多利亚时代,这就是一个很好的特征。

如果是unique_house_id: 8SK982ZZ1242Z, 那么这不是一个好的特征,因为这个值对模型来说只能使用一次,模型不能从这个值学到经验。

3.2 推荐特征使用清晰且明确的含义

每一个特征应该都有一个清晰明确的含义,比如house_age_years:27, 而不是house_age: 851472000。在有些情况下,噪声数据会导致特征值不清晰,比如user_age_years:227, 在特征处理过程中要对这些异常数据进行清理。 

3.3 不要将异常数据和真实数据相混淆

好的浮点数据特征不应该包括超过范围值的数据或者一些魔鬼数字。 比如一个特征值quality_rating是【0,1】,假设用户 没有输入则设置为-1。 这种方法是不可取的。针对这种场景一般处理方式是增加一个Boolean字段用来标识用户有没有输入数 据。也可以通过在有限的数据集中增加新值用来表示缺少特征值 。对于连续变量,为了确保缺失值不会影响模型,使用特征数据的平均值。

3.4 考虑使用特征值的数据不要随意变化

比如我们用另一个系统收集到城市的ID是219,但这个数据可能随数据源输入不同而发生变化,最好使用city_id: "br/sao_paulo",然后用one-hot编码。

4、数据如何清洗?

4.1 缩放特征值

缩放特征值一般也成为标准化,就是把一些浮点数据的特征值从大的范围转为小的。比如原来在10000~90000,通过标准化变为0~1之间。 这种标准化的好处在于可以让梯度最快的收敛,同时有助于避免NaN这种异常数据造成对模型的干扰

4.2 处理极端值,减小极端值对模型的影响

比如从California房屋数据,roomsPerPerson这个特征值是通过这个区域的房屋总数除以这个区域的人口数量。通过绘图可以看到下面数据:

上图中可以看到,每个人所占房屋大多集中在1~3之间,但是有些数据在50以上。明显这个数据不能客观反映真实情况。

消除这种指端值的影响可以使用下面方法:

此外,对于大于4的数据不是直接删除,而是把该数据设置为4。 这样的话最终处理完的数据正态分布如下面所示:

4.3 对数据进行分档

纬度是一个浮点数,但是该浮点数和房间之间没有特别的线性关系。所以将这类数据按照区域进行分档。 

比如整个数据在31-45之间,那么我们根据实际情况化为5个档

然后利用one-hot编码,把维度落在那个区间的数据设置为1,其他区间设置为0;

4.4 异常数据修复

在实际研发中,数据有可能是漏值、重复样本、错误标签、错误特征值都会对模型进行干扰。在前期对数据记性可视化或者简单的统计有助于及时发现数据错误。

 

 

 

 

 

转载地址:http://oekai.baihongyu.com/

你可能感兴趣的文章
2018.5.51
查看>>
2018.5.52
查看>>
《python基础教程》答案(第四章)
查看>>
2018.5.53
查看>>
2018.5.54
查看>>
2018.5.55
查看>>
2018.5.58
查看>>
2018.12.5
查看>>
2018.12.6
查看>>
人智导(四):约束满足问题
查看>>
2018.12.7
查看>>
2018.12.8
查看>>
2018.12.9
查看>>
2018.12.29
查看>>
2018.12.31
查看>>
2019.1.2
查看>>
2019.1.4
查看>>
2019.1.9
查看>>
2019.1.12
查看>>
Java语言程序设计与数据结构》编程练习答案(第二十章)(二)
查看>>