机器学习系列4-特征工程

news2024/11/16 11:33:17

机器学习系列4-特征工程

学习内容来自:谷歌ai学习
https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hl=zh-cn
本文作为学习记录

自己归纳整理的思维导图
在这里插入图片描述

这里写目录标题

  • 机器学习系列4-特征工程
  • 一级目录
    • 二级目录
      • 三级目录
  • 1.数据集划分
    • 1.1 将数据集划分为 训练集和测试集
      • 1.1.1举例1:
      • 1.1.2 问题1
    • 1.2 验证集
  • 2.特征工程
      • 2.1.1映射数值
      • 2.1.2映射分类值
      • 2.1.3 稀疏表示法
    • 2.2良好特征的特点
    • 2.3 清理数据
      • 2.3.1 缩放特征值
      • 2.3.2.处理极端离群值
      • 2.3.4.刷洗

一级目录

二级目录

三级目录

1.数据集划分

1.1 将数据集划分为 训练集和测试集

将数据集划分为两个子集的概念:

  • 训练集 - 用于训练模型的子集。
  • 测试集 - 用于测试训练后模型的子集。
    将单个数据集划分为训练集和测试集。
    在这里插入图片描述
    确保您的测试集满足以下两个条件:
  • 足够大,可以得出具有统计意义的结果。
  • 能代表整个数据集。也就是说,在选择测试集时,不要选择与训练集具有不同特征的测试集。
    在这里插入图片描述
    切勿使用测试数据进行训练。 如果您的评估指标结果出乎意料的好,则可能表明您不小心对测试集进行了训练。例如,高准确率可能表示测试数据泄露到了训练集内。
    在这里插入图片描述

1.1.1举例1:

假设某个模型使用主题行、电子邮件正文和发件人的电子邮件地址作为特征来预测电子邮件是否为垃圾邮件。
我们将数据拆分为训练集和测试集,拆分比例为 80-20。

训练完成后,该模型在训练集和测试集上的精确率均达到 99%。我们预计测试集的精确率较低,因此我们再次查看数据,发现测试集中的许多样本都与训练集中的样本重复(我们并没有忽略输入数据库中同一垃圾邮件的重复条目,然后再拆分数据)。我们无意中对部分测试数据进行了训练,因此无法再准确衡量模型泛化到新数据的程度。

1.1.2 问题1

问题1:使用测试集和训练集来推动模型开发迭代的流程。在每次迭代中,我们都会使用训练数据进行训练,并使用测试数据的评估结果来指导选择和更改各种模型超参数(如学习速率和特征)。这种方法有什么问题吗?

答案:多次重复执行此流程可能会导致我们不知不觉地拟合特定测试集的特性。
解释:我们根据给定测试集进行评估的频率越高,出现隐式过拟合该测试集的风险就越大。

1.2 验证集

将数据集划分为训练集和测试集。通过此分区,您可以基于一组样本进行训练,然后针对另一组样本测试模型。使用两个部分时,工作流程可能如下所示:
将数据集划分为两个集合固然不错,但不是万能的。 通过将数据集划分为下图所示的三个子集,您可以大大降低过拟合的可能性: 将单个数据集划分为三个子集。
在这里插入图片描述
使用验证集评估训练集的结果。 然后,在模型“通过”验证集之后,使用测试集仔细检查您的评估。

在这个经过改进的工作流程中:

  1. 选择在验证集上获得最佳效果的模型。
  2. 请对照测试集仔细检查该模型。
反复使用测试集和验证集会逐渐变耗。 也就是说,使用相同数据来做出有关超参数设置或其他模型改进的决策越多,您对这些结果实际泛化到未知新数据的信心就越低。 如果可能,最好收集更多数据来“刷新”测试集和验证集。重新开始是一个很好的重置机会。

2.特征工程

图 1 左侧表示来自输入数据源的原始数据,右侧表示特征向量,该矢量是构成数据集中样本的一组浮点值。 特征工程是指将原始数据转换为特征向量。进行特征工程预计需要大量时间。
在这里插入图片描述
许多机器学习模型必须将特征表示为实数向量,因为特征值必须乘以模型权重。

2.1.1映射数值

整数和浮点数据不需要特殊编码,因为它们可以与数字权重相乘。如图 2 所示,将原始整数值 6 转换为特征值 6.0 非常简单: 图 2. 将整数值映射到浮点值
在这里插入图片描述

2.1.2映射分类值

分类特征具有一组离散的可能值。例如,可能有一个名为 street_name 的功能,其中包含以下选项:

{'Charleston Road', 'North Shoreline Boulevard', 'Shorebird Way', 'Rengstorff Avenue'}

由于模型无法将字符串与学习到的权重相乘,因此我们使用特征工程将字符串转换为数值。
该向量的长度等于词汇表中的元素数。当单个值为 1 时,该表示法称为独热编码;当多个值为 1 时,这种表示法称为多热编码。

2.1.3 稀疏表示法

假设您的数据集中有 100 万个不同的街道名称,您想要将其添加为 street_name 的值。如果明确创建一个包含 100 万个元素的二元向量,其中只有 1 个或 2 个元素为 true,那么在处理这些向量时,就存储时间和计算时间而言,这种做法的效率非常低下。在这种情况下,一种常用的方法是使用 稀疏表示法,其中仅存储非零值。在稀疏表示法中,仍然会为每个特征值学习独立的模型权重,如上所述。

2.2良好特征的特点

1.避免很少使用的离散特征值
好的特征值在数据集中出现的次数应超过 5 次。这样一来,模型就可以学习此特征值与标签之间的关系。也就是说,有许多离散值相同的样本可让模型有机会在不同设置中看到相应特征,进而确定何时可以很好地预测标签。
相反,如果特征的值仅出现一次或极少出现,则模型无法根据该特征进行预测。

2.最好能提供清晰明确的含义
每个特征都应对项目中的任何人而言都有明确的含义。
例如,下面的良好特征有明确的名称,且值在名称方面有意义:

✔house_age_years: 27
相反,对于以下特征值的含义,除了创建它的工程师之外,其他人几乎都无法理解:
✘house_age: 851472000
在某些情况下,噪声数据(而不是糟糕的工程选择)会导致值不明确。例如,以下 user_age_years 的来源未检查值是否正确:
✘user_age_years: 277

3.请勿将“神奇”的值与实际数据混用
良好的浮点特征不包含超出范围的异常不连续或“神奇”值。

例如,假设一个特征具有一个介于 01 之间的浮点值。因此,如下所示的值没有问题:
✔quality_rating: 0.82 quality_rating: 0.37
但是,如果用户没有输入 quality_rating,则数据集可能使用如下特殊值表示不存在:
✘quality_rating: -1

如需明确标记魔法值,请创建一个布尔值特征来指示是否提供了 quality_rating。将此布尔特征命名为 is_quality_rating_defined。
在原始特征中,替换特殊值,如下所示:

  • 对于采用一组有限值的变量(离散变量),请向集合中添加一个新值,并使用该值来表示特征值缺失。
  • 对于连续变量,请使用特征数据的平均值,确保缺失值不会影响模型。
    4.考虑上游不稳定性
    特征的定义不应随时间而变化。
例如,以下值是有用的,因为城市名称一般不会更改。(请注意,我们仍需将“br/sao_paulo”这样的字符串转换为独热矢量。)
✔city_id: "br/sao_paulo"
但收集其他模型推断出的值会产生额外的费用。也许值“219”目前代表圣保罗,但在将来运行另一个模型时,这种表示法很容易改变:
✘inferred_city_cluster: "219"

2.3 清理数据

作为机器学习工程师,您将花费大量时间来抛弃不良样本并清理掉可以挽救的样本。即使只有少数“坏苹果”也会破坏大型数据集。

2.3.1 缩放特征值

缩放是指将浮点特征值从自然范围(例如 100 到 900)转换为标准范围(例如 0 到 1 或 -1 到 +1)。 如果某个特征集仅包含一个特征,则缩放几乎没有实际好处。但是,如果特征集由多个特征组成,则特征缩放可带来以下好处:

  • 有助于梯度下降法更快地收敛。
  • 帮助避免“NaN 陷阱”。在这种陷阱中,模型中的一个数值变成 NaN(例如,当某个值在训练期间超过浮点精确率限制时),并且模型中的所有其他数值最终也会因数学运算而变成 NaN。
  • 帮助模型为每个特征学习适当的权重。 如果不进行特征缩放,模型会过于关注范围较大的特征。
    您不必对每个浮点特征执行完全相同的缩放。如果特征 A 的范围是 -1 到 +1,而特征 B 的范围是 -3 到 +3,则不会发生任何糟糕的情况。但是,如果特征 B 的范围是 5,000 到 100,000,则模型的响应会很糟糕。
    在这里插入图片描述

2.3.2.处理极端离群值

下面的曲线图表示加利福尼亚州住房数据集中名为 roomsPerPerson 的地图项。roomsPerPerson 的值的计算方法是将某个区域的房间总数除以该区域的人口数量。该曲线图显示,加利福尼亚州的绝大部分地区每人一到两个房间。不过我们来看一下 x 轴。
在这里插入图片描述
我们如何最大限度地降低这些极端离群值的影响?一种方法是对每个值取对数:
在这里插入图片描述
对数缩放的效果稍好一些,但仍有一个离群值显著尾巴。我们选择另一种方法。如果我们只是简单地将 roomsPerPerson 的最大值“限制”或“裁剪”为任意值(如 4.0),会发生什么情况?
在这里插入图片描述

将特征值限制在 4.0 并不意味着我们会忽略所有大于 4.0 的值。而是意味着所有大于 4.0 的值现在都会变成 4.0。这解释了 4.0 处这个有趣的小山。 尽管存在这个小山,但缩放后的特征集现在比原始数据更有用。

3.分箱
下面的曲线图显示了加利福尼亚州不同纬度的房屋相对普及率。请注意聚类 - 洛杉矶大致位于纬度 34 度,旧金山大约在纬度 38 度。
在这里插入图片描述

在数据集中,latitude 是一个浮点值。不过,在我们的模型中将 latitude 表示为浮点特征没有意义。这是因为纬度和房屋价值之间不存在线性关系。例如,纬度 35 处的房屋并不比
3534
纬度 34 处的房屋贵(或不贵)高。然而,单独的纬度很可能能够很好地预测房屋价值。
为了让纬度成为有用的预测指标,我们将纬度划分为“分箱”,如下图所示:
在这里插入图片描述
现在,我们拥有 11 个不同的布尔值特征(LatitudeBin1、LatitudeBin2、…、LatitudeBin11),而不是使用一个浮点特征。拥有 11 个单独的特征有点不方便,因此让我们将它们合并成一个包含 11 元素的向量。这样,我们就可以这样表示纬度 37.4,如下所示:

[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]

得益于分箱,我们的模型现在可以针对每个纬度学习完全不同的权重。
在这里插入图片描述

2.3.4.刷洗

到目前为止,我们假定用于训练和测试的所有数据都是可信的。在现实生活中,数据集中的许多样本都是不可靠的, 原因如下:

  • 省略的值。例如,有人忘记输入某个房屋的年龄值。
  • 重复样本。例如,服务器错误地将同一条记录上传了两次。
  • 不良标签。例如,有人错误地将一棵橡树的图片标记为枫树。
  • 特征值错误。例如,有人多输入了一个数字,或者温度计被遗落在太阳下。

一旦检测到不良样本,您通常可以通过从数据集中移除不良样本来“修正”这些样本。要检测遗漏值或重复样本,您可以编写一个简单的程序。检测不良特征值或标签可能要困难得多。
除了检测各个不良样本之外,您还必须检测集合中的不良数据。直方图是一种直观呈现汇总数据的绝佳机制。此外,获取如下统计信息也会有所帮助:

  • 最大值和最小值
  • 平均值和中位数
  • 标准差

考虑生成离散特征的最常见值列表。 例如,country:uk 的样本数是否符合您的预期。language:jp 真的应该是您数据集中最常用的语言吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1435967.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac利用brew安装mysql并设置初始密码

前言 之前一直是在windows上开发后段程序,所以只在windows上装mysql。(我记得linux只需要适应yum之类的命令即可) 另外, linux的移步 linux安装mysql (详细步骤,初次初始化,sql小例子,可视化操作客户端推荐) 好家伙,我佛了,写完当天网上发…

集群clickhouse使用和clickhouse索引的使用

ClickHouse支持多种索引类型,包括普通索引、范围索引、哈希索引、倒排索引等。使用索引可以加快查询速度和提高查询效率。下面是ClickHouse索引的一些使用方法: 1 普通索引 可以使用普通索引来加速查询特定的列,例如: CREATE TA…

MES生产制造管理:汽车零部件生产MES解决方案

某某汽车部件科技有限公司是一家铝合金零部件研发、压铸和精加工为一体的高新技术企业,拥有先进压铸、机加、检测等设备,并配套自动化生产线。为解决发动机支架等产品的全程生产质量追溯和实现机台设备联网,梅施科技提供了车间级的MES解决方案,如图所示: 梅施科技采…

Axios设置token到请求头的三种方式

1、为什么要携带token? 用户登录时,后端会返回一个token,并且保存到浏览器的localstorage中,可以根据localstorage中的token判断用户是否登录,登录后才有权限访问相关的页面,所以当发送请求时,都要携带to…

每日一题——LeetCode1408.数组中的字符串匹配

方法一 暴力枚举&#xff1a; 对每个单词循环判断是否是其他单词的子字符串 var stringMatching function(words) {const ret [];for (let i 0; i < words.length; i) {for (let j 0; j < words.length; j) {if (i ! j && words[j].search(words[i]) ! -1)…

探索Gin框架:Golang Gin框架请求参数的获取

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站https://www.captainbed.cn/kitie。 前言 我们在专栏的前面几篇文章内讲解了Gin框架的路由配置&#xff0c;服务启动等内容。 专栏地址&…

TS项目实战二:网页计算器

使用ts实现网页计算器工具&#xff0c;实现计算器相关功能&#xff0c;使用tsify进行项目编译&#xff0c;引入Browserify实现web界面中直接使用模块加载服务。   源码下载&#xff1a;点击下载 讲解视频 TS实战项目四&#xff1a;计算器项目创建 TS实战项目五&#xff1a;B…

Unity3D判断屏幕中某个坐标点的位置是否在指定UI区域内

系列文章目录 unity工具 文章目录 系列文章目录前言一、使用rect.Contains()判断1-1、转换坐标1-2、代码如下&#xff1a;1-3、注意事项1-3、测试效果如下 二、使用坐标计算在不在区域内2-1、方法如下&#xff1a;2-2、注意事项 三、使用RectTransformUtility.ScreenPointToLo…

[每日一题] 02.06 - ABC

ABC lis list(map(int,input().split())) ABC list(input()) lis.sort() dic {A:lis[0],B:lis[1],C:lis[2]} res print(dic) for i in ABC:print(dic[i],end )我感觉没问题&#xff0c;但提交就是出问题了&#xff0c;应该不是最后多了个空格&#xff08;试过去除还是错…

股票投资指南!石家庄开通股票账户佣金最低是多少?怎么开低佣金账户?

股票投资指南可以帮助您更好地了解股票投资的基本知识和技巧&#xff0c;以便您可以做出明智的投资决策。以下是一些股票投资的基本指南&#xff1a; 了解股票市场&#xff1a;学习股票市场的基本概念和运作方式&#xff0c;包括股票交易所、股票指数和股票价格等。 定义投资目…

技术是你的安身立命之本

技术是你的安身立命之本 技术是你的安身立命之本,这句话是我父亲说的,我也一直把这句话奉为圭臬。这句话让我受用至今。 我父亲是一个两面派人士,一面是农民,一直在耕种着五亩薄田,没有像别的人家一样把田租赁出去,另一面是银行职员,勤勤恳恳在小县城的网点干了一辈子…

【AI】告别繁琐阅读,阿里通义智文阅读助手带您轻松畅游知识海洋!

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff0c;致力于程序服务生活&#xff01; 一、阿里通义智文阅读助手简介 阿里通义智文阅读助手是一款基于人工智能技术的阅读辅助工具&#xff0c;可以帮助用户更高效地阅读和理解各种类型的文档&#xff0c;如PPT、图片和PD…

【多模态MLLMs+图像编辑】MGIE:苹果开源基于指令和大语言模型的图片编辑神器(24.02.03开源)

项目主页&#xff1a;https://mllm-ie.github.io/ 论文 :基于指令和多模态大语言模型图片编辑 2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models &#xff08;加州大学圣巴拉分校苹果&#xff09; 代码&#xff1a;https://github.com/appl…

LeetCode-第2769题-找出最大的可达成数字

1.题目描述 给你两个整数 num 和 t 。 如果整数 x 可以在执行下述操作不超过 t 次的情况下变为与 num 相等&#xff0c;则称其为 可达成数字 &#xff1a; 每次操作将 x 的值增加或减少 1 &#xff0c;同时可以选择将 num 的值增加或减少 1 。 2.样例描述 3.思路描述 当 x…

第五讲 二维费用的背包问题

【题目来源】AcWing 8. 二维费用的背包问题 【题意分析】 本题在前面背包问题的基础上&#xff0c;增加了一个维度——质量&#xff0c;背包拥有了容积、承重两个限制&#xff0c;物品也有了体积、质量两种属性。 【参考资料】第一讲 0/1背包问题 与0/1背包类似&#xff0c;加…

PDF文件格式(一):交叉引用流

在PDF-1.5版本之前&#xff0c;对象的交叉引用信息是存储在交叉引用表(cross-reference table)中的。在PDF-1.5版本之后&#xff0c;引进了交叉引用流(cross-reference stream)对象&#xff0c;可以用它来存储对象的交叉引用信息&#xff0c;就像交叉引用表的功能一样。 采用交…

C语言第十九弹---指针(三)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、数组名的理解 2、使用指针访问数组 3、⼀维数组传参的本质 4、冒泡排序 5、二级指针 6、指针数组 7、指针数组模拟二维数组 总结 1、数组名的理解…

C++学习Day04之常函数和常对象

目录 一、程序及输出1.1 常函数1.1.1 不能修改对象的成员变量1.1.2 常函数可以被常对象和非常对象调用 1.2 常对象1.2.1 对象的成员变量不能被修改1.2.2 只能调用常函数&#xff0c;不能调用非常函数1.2.3 const_cast 调用非常函数 1.3 常函数中或常对象修改成员变量 二、分析与…

070:vue+cesium: 利用canvas设置线性渐变色材质

第070个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置线性渐变色的材质,这里使用canvas的辅助方法。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共104行)专栏目标示例效果 配置方式 1)查看基础…

WPF控件-ItemsControl

介绍 ItemsControl是用于展示一组项的控件。我们常见的列表&#xff08;ListBox&#xff09;、数据表格&#xff08;DataGrid&#xff09;等都是继承自ItemsControl。可用于自定义样式展示各种批量的数据集合。 常见使用示例&#xff1a; <ItemsControl ItemsSource"…