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

27 | 模型训练(中):回归、分类和聚类算法详解

你好,我是吴磊。
在上一讲,我们学习了决策树系列算法,包括决策树、GBDT 和随机森林。今天这一讲,我们来看看在 Spark MLlib 框架下,如何将这些算法应用到实际的场景中。
你还记得我们给出的 Spark MLlib 模型算法“全景图”么?对于这张“全景图”,我们会时常回顾它。一方面,它能为我们提供“全局视角”,再者,有了它,我们就能够轻松地把学习过的内容对号入座,从而对于学习的进展,做到心中有数。
Spark MLlib支持的模型算法
今天这一讲,我们会结合房屋预测场景,一起学习回归、分类与聚类中的典型算法在 Spark MLlib 框架下的具体用法。掌握这些用法之后,针对同一类机器学习问题(回归、分类或是聚类),你就可以在其算法集合中,灵活、高效地做算法选型。

房屋预测场景

在这个场景中,我们有 3 个实例,分别是房价预测、房屋分类和房屋聚类。房价预测我们并不陌生,在前面的学习中,我们一直在尝试把房价预测得更准。
房屋分类,它指的是,给定离散标签(Label),如“OverallQual”(房屋质量),结合房屋属性特征,将所有房屋分类到相应的标签取值,如房屋质量的“好、中、差”三类。
而房屋聚类,它指的是,在不存在标签的情况下,根据房屋特征向量,结合“物以类聚”的思想,将相似的房屋聚集到一起,形成聚类。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在Spark MLlib框架下,如何应用回归、分类和聚类算法到实际场景中。作者以房屋预测为例,分别讨论了房价预测、房屋分类和房屋聚类三个实例。在房价预测中,作者介绍了使用GBDT算法拟合房价的过程,特别强调了VectorIndexer的作用和GBDT模型的参数设置。在房屋分类中,作者将房屋质量作为标签,使用RandomForestClassifier进行模型训练,并介绍了模型效果的验证。在房屋聚类中,作者介绍了K-means算法的基本原理和模型效果的评估。整体而言,本文通过具体的代码实现,帮助读者了解了在Spark MLlib框架下应用回归、分类和聚类算法的方法和技巧。读者可以从中学习到GBTRegressor和RandomForestClassifier的一般用法,以及K-means算法的基本原理和应用。

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

全部留言(4)

  • 最新
  • 精选
  • pythonbug
    老师好,房价预测那个例子,我用GBDT试了一下,结果发现比咱们一开始入门那个例子计算出来的rmse还要大。。没有明显变小,树的深度和最大棵数以及阈值都是和您一样的。 其中,预测对比我用的是: val predictions: DataFrame = gbtModel.transform(testData).select("SalePriceInt", "prediction") import org.apache.spark.ml.evaluation.RegressionEvaluator val evaluator = new RegressionEvaluator().setLabelCol("SalePriceInt").setPredictionCol("prediction").setMetricName("rmse") val rmse = evaluator.evaluate(predictions) println("Root Mean Squared Error (RMSE) on test data = " + rmse) 然后代码中我还设置了一个maxBins,不设置会报错。修改后的如下: val gbt = new GBTRegressor() .setLabelCol("SalePriceInt") .setFeaturesCol("indexedFeatures") // 限定每棵树的最大深度 .setMaxDepth(5) // 限定决策树的最大棵树 .setMaxIter(10) .setMaxBins(113) 就是很头疼,怎么用了好的模型,表现还变的糟糕了呢。 非常有兴趣的一直看到这里,突然觉得没有兴趣了。。。麻烦老师看看能不能帮忙指点一下。 全部代码比较长,贴不过来

    作者回复: 老弟不必沮丧哈,机器学习就是这样,高级玩法试了一圈,发现效果并没有显著提升,有的时候,甚至更差,这个不必郁闷,大家一开始都是这样的~ 根本原因在于,我们对于数据、特征、模型(学习器)之间的本质区别,并没有从根儿上理解到位。咱们这门入门课,机器学习部分,受课程要求所限,篇章太少了,实际上机器学习涉及的方方面面非常多。机器学习,并不是跑个模型,调调参数那么简单,否则的话,算法工程师的工资不会那么高~ 模型效果,80%依赖特征,20%依赖模型选择、调优、调参,等等,我们从线性模型介绍到树模型,实际上,更多的是课程上的需要,为了给大家介绍更多种类型的模型,让大家知道,当需要类似模型和算法的时候,Spark都支持哪些,不支持哪些,从哪里选,怎么用。 但严格来说,并不是复杂模型,就一定比简单模型效果更好,在同一个假设空间,能够完美拟合训练数据的假设有多个,并不是复杂的模型,就是更好的。对于房价预测的例子,其实重中之重还是特征,老弟不妨去文中Kaggle对应的项目,聊一下排名靠前的那些项目,他们大部分都是使用各种“骚操作”来处理、生成特征,反而模型并不复杂。 由于咱们课程定位是入门,所以特征工程的部分,其实更得的,也是介绍方法,Spark MLlib支持哪些,不支持哪些,怎么用,真要用到的时候,怎么选。其实,咱们并没有针对这个项目,去仔细地做特征选择、特征生成,等等,这些非常必要的工作。 所以说,老弟不必气馁,咱们这里效果不好,主要是很多事情其实没多到位,并不是机器学习本身不给力,或是过于缥缈,一起加油哈~

    2021-11-22
    1
  • 小新
    老师后面可以出一个详细的ML的课程吗?也是这样的讲解方式。

    作者回复: 最开始,其实是想出一门Spark MLlib + 机器学习的课程,但是后来跟极客时间商量之后,大家觉得Spark + 机器学习,受众面更小,所以后来改成了基础入门课,也就是咱们现在这门课程《零基础入门Spark》,后面找机会写一些专门针对机器学习的东西吧~

    2021-12-05
  • 六月的余晖
    老师后续有计划出Flink的课程吗

    作者回复: 暂时还没有哈,杂务缠身,时间精力确实有限,等忙过这段时间再说吧,对不住老弟

    2021-11-12
  • liangyu
    .setInputCols(numericFields ++ indexFields) 这里一个typo , numericfields 是没有转换成int的 ,前文用的是numeric features
    2022-12-15归属地:美国
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部