零基础入门 Spark
吴磊
前 FreeWheel 机器学习研发经理
19171 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
零基础入门 Spark
15
15
1.0x
00:00/00:00
登录|注册

24 | 特征工程(上):有哪些常用的特征处理函数?

你好,我是吴磊。
在上一讲,我们一起构建了一个简单的线性回归模型,来预测美国爱荷华州的房价。从模型效果来看,模型的预测能力非常差。不过,事出有因,一方面线性回归的拟合能力有限,再者,我们使用的特征也是少的可怜。
要想提升模型效果,具体到我们“房价预测”的案例里就是把房价预测得更准,我们需要从特征和模型两个方面着手,逐步对模型进行优化。
在机器学习领域,有一条尽人皆知的“潜规则”:Garbage in,garbage out。它的意思是说,当我们喂给模型的数据是“垃圾”的时候,模型“吐出”的预测结果也是“垃圾”。垃圾是一句玩笑话,实际上,它指的是不完善的特征工程。
特征工程不完善的成因有很多,比如数据质量参差不齐、特征字段区分度不高,还有特征选择不到位、不合理,等等。
作为初学者,我们必须要牢记一点:特征工程制约着模型效果,它决定了模型效果的上限,也就是“天花板”。而模型调优,仅仅是在不停地逼近这个“天花板”而已。因此,提升模型效果的第一步,就是要做好特征工程。
为了减轻你的学习负担,我把特征工程拆成了上、下两篇。我会用两讲的内容,带你了解在 Spark MLlib 的开发框架下,都有哪些完善特征工程的方法。总的来说,我们需要学习 6 大类特征处理方法,今天这一讲,我们先来学习前 3 类,下一讲再学习另外 3 类。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了机器学习中特征工程的重要性以及在Spark MLlib开发框架下常用的特征处理函数。作者首先强调了特征工程对模型预测效果的直接影响,并将特征处理函数分为预处理、特征选择、归一化、离散化、Embedding和向量计算六大类,并介绍了每个类别的代表性函数。文章以“房价预测”项目为例,深入探讨了特征工程在实际项目中的应用,通过对原始数据的处理提取出可用于模型训练的训练样本,从而提升模型的预测能力。特别强调了机器学习的任务是找出“决定性”因素,并用模型参数来量化它们对房价的影响。整体而言,本文以清晰的结构和实际案例,系统地介绍了特征工程在机器学习中的重要性和应用方法,对于想要深入了解特征工程的读者具有很高的参考价值。文章内容详实,通过具体的代码示例和图示,读者可以快速了解特征选择的原理和在Spark MLlib框架中的实际操作方法。特别是介绍了ChiSqSelector的用法和注意事项,为读者提供了实际操作的指导。整体而言,本文对特征工程的重要性和在实际项目中的应用进行了全面而深入的介绍,对于从事机器学习和数据分析的专业人士具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《零基础入门 Spark》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(6)

  • 最新
  • 精选
  • Abigail
    仅从机器学习的角度来看:卡方检验主要是检验“类别型变量”对“类别型变量”的相关性,也就是说用于分类问题比较合适,当目标连续数值时,其实还是要考虑其他的特征选择方法。

    作者回复: 同意~ 卡方检验,实际上仅仅是众多特征选择方法中的一种,篇幅所限,只好选一些代表性的方法。如老弟所说,卡方检验确实更适合计算“类别型变量”对“类别型变量”的 之间的相关性。 不过,其实这也不绝对,连续值其实很容易离散化,实际上Spark MLlib把卡方检验用在连续值,背后其实也是先做离散化,再算卡方值。 还是那句话,Spark MLlib这个模块,咱们更多地介绍它提供的能力,不管是特征处理能力,还是模型训练能力。而至于不同use case下具体应该选取的最佳方法,没有一定之规,都是在一定的理论指导之下,结合实践自然选择出来的。

    2021-11-10
    2
  • pythonbug
    候选的特征字段中可能会有null存在,会报错,加个 new VectorAssembler() .setInputCols(numericFeatures) .setOutputCol("features") .setHandleInvalid("skip") 就好了,嘿嘿嘿,百度的

    作者回复: 666,赞👍,自驱型(Self-driven)选手~

    2021-11-21
    1
  • bian
    磊哥会讲graphx的案例么

    作者回复: 正课暂时不会哈,后面如果需求比较大,可以考虑加餐的形式跟大家聊聊GraphX

    2021-11-27
    2
  • qinsi
    不知道StringIndexer有什么实际的使用场景?因为像文中提到的车库类型等类别特征,通常是要做one-hot encoding的

    作者回复: 你说的对,离散特征,需要做Embedding,当然,OHE是用的比较多的一种方法;不过呢,在Spark MLlib框架里,你是不能直接拿字符串做Embedding的,得先做Label Encoding,也就是先把字符串转换为索引,这个时候,StringIndexer就派上用场了~

    2021-11-07
  • 嬴梦川
    文中代码里面的"engineeringData"似乎应该为"engineeringDF"
    2023-10-10归属地:江苏
    1
  • 吴横淼
    老师,想问下在spark下,模型的怎么训练的呢,这里的分布式是怎么体现呢,模型的参数进行广播,然后各个executor都进行更新么
    2022-06-27
    1
收起评论
显示
设置
留言
6
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部