当前位置: 首页 > news >正文

机器学习算法与Python实战 | 8个特征工程技术,提高机器学习预测能力

本文来源公众号“机器学习算法与Python实战”,仅用于学术分享,侵权删,干货满满。

原文链接:8个特征工程技术,提高机器学习预测能力

在机器学习方面,人们可以采取的改进 ML 模型预测的方法是选择正确的特征并删除对模型性能影响微不足道的特征。因此,选择正确的特征可能是数据科学家或机器学习工程师需要做的最重要的步骤之一,他们通常负责构建那些能够很好地概括测试数据集的复杂模型。

例如,考虑预测一个人是否会患心脏病的任务,可以产生良好影响的最强指标之一就是体重指数 (BMI)。当我们试图预测一个人可能患有的血压 (BP) 水平时,没有考虑这个特征并且没有在我们的数据集中使用它,通常会导致结果不太准确。在这种情况下,BMI 可以强烈表明一个人患有这些疾病。因此,考虑这个特征很重要,因为它会对结果产生很大的影响。

考虑另一个预测某人是否会拖欠贷款的案例研究。在向某人提供贷款之前,所考虑的银行会询问一系列问题,例如工资、净资产和他们的信用记录。如果我们要让一个人根据上述一系列因素来决定是否必须向某人提供贷款,他/她会查看总工资和他们的整体信用记录。

同样,当数据以与人类相同的方式提供给 ML 模型时,它会学会获得重要的表示,以便它决定一个人是否会偿还贷款。如果我们删除诸如工资之类的特征,ML 模型将缺少关键信息,无法完美地解读一个人是否会偿还贷款。因此,它的预测可能会非常错误,因为数据中缺少最重要的特征之一(工资)。因此,这凸显了拥有正确的特征对于我们的机器学习和深度学习模型在测试集和实时数据上表现良好的重要性。

现在我们已经了解了确定正确特征对于确定模型预测质量的重要性,我们现在将继续寻找有助于我们的模型预测并改善其结果的各种特征化技术。

插值

这是我们在数据中填充缺失值的一种方法。我们在互联网上找到了大量数据集,例如包含几乎所有特征和标签而没有异常或缺失数据的玩具数据集。然而,这在现实生活中可能远非如此,因为大多数现实世界数据都包含缺失值。因此,必须采取特定步骤来确保以某种方式填充缺失的值。

我们可以使用各种方法来执行插值。我们可以使用特征的平均值或平均值来填充缺失值。还有其他方法,例如特征的中位数插值和众数插值。因此,通过执行这些方法,我们不会得到包含缺失值的数据。

如果我们要预测一个人是否会拖欠贷款,我们会将薪水作为我们机器学习模型的重要特征之一。但是,所有参与者的薪水信息可能不存在于我们的数据中。因此,最好的方法之一是分别用整个薪资特征的平均值来估算或填充这些缺失值。

缩放

我们倾向于为我们的模型提供一组不同的特征,基于此,模型将确定用于预测结果或目标变量的最佳特征。但需要注意的是,我们使用的特征在我们最初收到数据时可能具有不同的尺度。

以用于确定房价的特征为例。在这种情况下,特征可能是卧室数量和利率。我们无法比较这两个特征,因为卧室数量以单位为单位,而利率以美元 ($) 为单位。如果我们将这些数据提供给我们的 ML 模型,它只会理解美元比卧室数量特征高出很多单位。然而,正如我们上面所看到的,这远非事实。因此,在将特征提供给模型进行预测之前,执行特征的缩放操作非常重要。

归一化

这是我们执行缩放操作的一种方式,在转换数据中的其他值之前,先对所考虑的各个特征取最大值和最小值。我们确保特征的最小值为 0,最大值为 1。这将确保我们能够使用模型产生最佳结果并获得良好的预测。

以客户是否会流失(离开)或继续使用互联网服务为例,月费和使用期限等特征是一些重要特征。月费可以以美元 ($) 为单位,而使用期限可以以年或月为单位。由于它们的规模不同,因此规范化在这种情况下非常方便,并确保我们获得最佳的模型预测。

标准化

标准化在转换特征方面与规范化类似,不同之处在于我们以这样一种方式转换数据,即我们得到一个输出,该输出对于每个单独的特征都具有单位方差和零均值。我们已经看到,对各种特征使用不同的尺度常常会使模型感到困惑,因为模型会因为数据的尺度而假设一个特征比另一个特征更重要,执行标准化操作有助于确保我们获得最佳预测。因此,这是机器学习从业者在构建最佳预测时经常采取的一步。

在预测汽车价格时,我们会分别考虑气缸数和里程数等特征。由于这两个特征的尺度不同,我们必须执行标准化,以便在给出预测模型之前,我们可以在特征之间找到共同点。

独热编码

想象一个场景,我们的数据中有大量分类特征。我们数据中的一些分类特征可以包括国家、州、名称等特征。从这些特征中,我们看到,我们只生成这些实例的出现,而没有得到数字表示。

为了使我们的 ML 模型能够很好地工作并利用数据,分类特征(如上所示)应该转换为数字特征,以便模型执行计算。因此,我们执行这一步独热编码,以便将分类特征转换为数字特征。

现在人们可能会质疑算法实际上是如何做到这一点的。它只是将每个特征的每个类别视为单独的列。特定类别的存在或不存在将被标记为 1 或 0。如果我们发现特定类别存在,反之亦然,我们将值设为 1。

响应编码

这是另一种与独热编码非常相似的方法,因为它可以处理分类数据。但是,将分类特征转换为数值特征的过程与之前的方法不同。

在响应编码中,我们最感兴趣的是每个类别的目标平均值。例如,以确定房价为例。为了预测各个地区的房价,我们将对各个地区进行分组,并找出每个地区的平均房价。稍后,我们将用每个地区特定的平均房价替换地区,以表示先前作为分类特征的数值。因此,我们的模型可以固有地了解社区在确定房价方面有多大影响。因此,响应编码在这种情况下非常方便。

考虑到预测汽车价格的问题,可能会有 SUV 或轿车等汽车。有时可以通过这两个特征来确定价格。因此,当使用响应编码转换此分类特征(汽车类型)时,响应编码会很有用。我们仅取 SUV 和轿车的平均价格。如果车型为 SUV,我们将其替换为 SUV 车型细分市场的平均价格。如果车型为轿车,我们将其替换为轿车车型细分市场的平均价格。

处理异常值

异常值是被视为数据异常的数据点。但是,还需要注意的是,数据中的某些异常值对于模型正确确定结果非常有用且重要。如果我们发现数据中存在大量异常值,则可能会使模型无法对异常值做出正确的预测,而无法很好地概括实时数据。因此,我们必须采取正确的步骤,确保在训练模型并将其投入生产之前将其移除。

有多种方法可以去除数据中的异常值。其中一些方法包括找到每个特征的标准差。如果数据点高于或低于平均值 3 个标准差,我们可以自动将它们归类为异常值并将其移除,这样它们就不会影响机器学习模型的预测。

考虑到一个人是否会拖欠贷款,可能会有关于此人工资的信息。薪资信息可能并不总是准确的,并且这个特征中可能存在相当多的异常值。使用这些数据训练我们的 ML 模型通常会导致它在测试集或未见过的数据上表现不佳。因此,最好的方法是在将数据提供给 ML 模型之前从数据中删除异常值。这可以通过了解薪资的标准差来实现,并且高于或低于 3 个标准差的值会自动被删除,以便模型做出可靠的预测。

对数转换

当我们发现数据中存在严重偏差时,可以使用这种技术。如果存在大量偏差,即数据包含大量集中在特定区域的值,而一些异常值和数据点远离平均值,则我们的模型更有可能无法理解这种复杂的关系。

因此,我们将使用对数变换来转换这些数据并减少偏差,以便模型对异常值更具鲁棒性,并且能够很好地概括实时数据。对数变换可以是一种方便的特征工程技术,可以分别提高 ML 模型的性能。

与上述预测一个人是否会拖欠贷款的问题类似,我们也可以将对数变换应用于工资,因为我们看到工资信息中普遍存在很多偏差。大量人(约 80%)获得基本工资,而一小部分人(约 20%)获得大量工资。数据中存在相当大的偏差,实际上可以通过使用对数变换来消除。

结论

读完这篇文章后,我相信您能够理解对您的机器学习模型很重要的各种特征工程技术。在正确的时间使用最佳的特征工程技术确实非常方便,并且可以通过使用人工智能为公司生成有价值的预测。

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 关于java中Excel的导入导出
  • Python自动化办公2.0 课程更新
  • 非阻塞轮询
  • C++第四十二弹---C++11新特性深度解析:让你的代码更现代、更高效(中)
  • 【conda】导出和重建 Conda 环境
  • mysql 一主一从数据库的配置文件
  • GPS北斗授时服务器(网络时钟系统)助力金融领域
  • windows权限维持汇总
  • 【ubuntu24.04】AX210/MT9621/USB网络共享访问无线网络
  • 深入解析Node.js中的new URL()构造函数:功能、属性、方法与使用技巧
  • OpenStack——keystone认证服务
  • Linux 流式DMA映射(DMA Streaming Mapping)
  • 【Qt笔记】QToolButton控件详解
  • 有哪些内部知识库类似钉钉,满足企业多样化需求?
  • 服务器(百度云)部署项目(jar包)
  • 78. Subsets
  • android图片蒙层
  • C++11: atomic 头文件
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • es的写入过程
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • JavaScript 基本功--面试宝典
  • JavaWeb(学习笔记二)
  • Linux快速复制或删除大量小文件
  • log4j2输出到kafka
  • MQ框架的比较
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • scala基础语法(二)
  • spring security oauth2 password授权模式
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 如何在 Tornado 中实现 Middleware
  • 我从编程教室毕业
  • 用 Swift 编写面向协议的视图
  • 智能合约开发环境搭建及Hello World合约
  • 1.Ext JS 建立web开发工程
  • HanLP分词命名实体提取详解
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • (1)bark-ml
  • (C++哈希表01)
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (二)windows配置JDK环境
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (十二)Flink Table API
  • (转)jQuery 基础
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (轉)JSON.stringify 语法实例讲解
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net core 依赖注入的基本用发
  • .NET Core 中的路径问题
  • .NET Core中Emit的使用