SparkMlib 之随机森林及其案例

news2024/11/30 0:41:37

文章目录

    • 什么是随机森林?
    • 随机森林的优缺点
    • 随机森林示例——鸢尾花分类

什么是随机森林?

随机森林算法是机器学习、计算机视觉等领域内应用极为广泛的一个算法,它不仅可以用来做分类,也可用来做回归即预测,随机森林机由多个决策树构成,相比于单个决策树算法,它分类、预测效果更好,不容易出现过度拟合的情况。

常应用于以下类型的场景:

  1. 预测用户贷款是否能够按时还款;
  2. 预测用户是否会购买某件商品等等

官网:分类和回归

随机森林的优缺点

优点:

  1. 可以处理高纬度的数据;

  2. 训练之前不需要特意的做特征选择;

  3. 建立很多树,预防了过拟合风险;

缺点:

  1. 计算量相对于决策树很大,性能开销很大。

  2. 可能会导致有些数据集没有训练到,但这种几率很小。

  3. 分裂的时候,偏向于选择取值较多的特征。

随机森林示例——鸢尾花分类

数据集下载:

链接:
https://pan.baidu.com/s/1AshgNxx1wOWhLgKxgjrZww?pwd=lz3l 

提取码:
lz3l

数据集介绍:

iris.scale.txtlibsvm 格式的鸢尾花数据集,共有五个字段。第一个为标签字段,后四个为特征字段。

libsvm 格式参考:机器学习:libsvm数据格式

将数据集中的随机百分之70作为训练集,剩余的作为测试集。

使用 SparkSQL 的方式读取 libsvm 格式的文件会自动生成 labelfeatures 结构的数据,如下所示:

val data: DataFrame = spark.read.format("libsvm").load("iris.scale.txt")

data.show()

需求实现:

import org.apache.spark.ml.classification.{RandomForestClassificationModel, RandomForestClassifier}
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature._
import org.apache.spark.ml.{Pipeline, PipelineModel}
import org.apache.spark.sql.{DataFrame, SparkSession}

object Iris {

    def main(args: Array[String]): Unit = {

        val spark: SparkSession = SparkSession.builder().appName("Iris").master("local[*]").getOrCreate()

        // 加载 libsvm 格式文件的数据
        val data: DataFrame = spark.read.format("libsvm").load("C:\\Users\\Administrator\\Desktop\\iris.scale.txt")

        data.show()

        // 1.构建标签列转换对象
        val labelIndexer: StringIndexerModel = new StringIndexer()
                .setInputCol("label")
                .setOutputCol("indexedLabel")
                .fit(data)

        // 2.构建特征列转换对象,设置特征列数量
        val featureIndexer: VectorIndexerModel = new VectorIndexer()
                .setInputCol("features")
                .setOutputCol("indexedFeatures")
                .setMaxCategories(4)
                .fit(data)

        // 3.将随机百分之70作为训练集,其余为测试集
        val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))

        // 4.创建随机森林对象,设置标签列与特征列以及决策树的个数
        val rf: RandomForestClassifier = new RandomForestClassifier()
                .setLabelCol("indexedLabel")
                .setFeaturesCol("indexedFeatures")
                .setNumTrees(10)

        // 5.设置预测列标签
        val labelConverter: IndexToString = new IndexToString()
                .setInputCol("prediction")
                .setOutputCol("predictedLabel")
                .setLabels(labelIndexer.labelsArray(0))

        // 6.管道组装
        val pipeline: Pipeline = new Pipeline().setStages(Array(labelIndexer, featureIndexer, rf, labelConverter))

        // 7.模型训练
        val model: PipelineModel = pipeline.fit(trainingData)

        // 8.模型预测
        val predictions: DataFrame = model.transform(testData)

        // 9.模型评估
        predictions.select("predictedLabel", "label", "features").show()

        // 10.创建错误率的计算对象
        val evaluator: MulticlassClassificationEvaluator = new MulticlassClassificationEvaluator()
                .setLabelCol("indexedLabel")
                .setPredictionCol("prediction")
                .setMetricName("accuracy")

        // 11.计算错误率
        val accuracy: Double = evaluator.evaluate(predictions)
        println(s"Test Error = ${(1.0 - accuracy)}")

        // 12.打印随机森林模型
        val rfModel: RandomForestClassificationModel = model.stages(2).asInstanceOf[RandomForestClassificationModel]
        println(s"Learned classification forest model:\n ${rfModel.toDebugString}")

    }

}

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

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

相关文章

RabbitMQ之可靠性分析

在使用任何消息中间件的过程中,难免会出现消息丢失等异常情况,这个时候就需要有一个良好的机制来跟踪记录消息的过程(轨迹溯源),帮助我们排查问题。在RabbitMQ 中可以使用Firehose 功能来实现消息追踪,Fire…

艾美捷MTT细胞增殖检测试剂盒结果示例引用文献

艾美捷MTT细胞增殖检测试剂盒测定原理: 该试剂盒提供了比色形式测量和监测细胞增殖,含有足够的试剂用于评估在96孔板中进行960次测定或在24孔板中进行192次测定。细胞可以被镀,然后用影响增殖的化合物或药剂。然后用增殖试剂检测细胞&#x…

3.矩阵计算及导数基础

1. 梯度 将导数拓展到向量。 1. 标量对向量求导 x是列向量,y是标量,求导之后变成了行向量 ps: x1^2 2x2^2 这个函数可以画成等高线,对于(x1,x2)这个点,可以做等高线的切线,再做出…

Spark Streaming(二)

声明: 文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。 By luoyepiaoxue2014 B站&#xff…

动态规划算法(2)最长回文子串详解

文章目录最长回文字串动态规划代码示例前篇: (1)初识动态规划 最长回文字串 传送门: https://leetcode.cn/problems/longest-palindromic-substring/description/ 给你一个字符串 s,找到 s 中最长的回文子串。 s &qu…

大数据学习:使用Java API操作HDFS

文章目录一、创建Maven项目二、添加依赖三、创建日志属性文件四、在HDFS上创建文件五、写入HDFS文件1、将数据直接写入HDFS文件2、将本地文件写入HDFS文件六、读取HDFS文件1、读取HDFS文件直接在控制台显示2、读取HDFS文件,保存为本地文件一、创建Maven项目 二、添加…

Spring Security 中重要对象汇总

前言 已经写了好几篇关于 Spring Security 的文章了,相信很多读者还是对 Spring Security 的云里雾里的。这是因为对 Spring Security 中的对象还不了解。本文就来介绍介绍一下常用对象。 认证流程 SecurityContextHolder 用户认证通过后,为了避免用…

【JavaWeb】Servlet系列 --- HttpServlet【底层源码分析】

HttpServlet一、什么是协议?什么是HTTP协议?二、HTTP的请求协议(B -- > S)1. HTTP的请求协议包括4部分(记住)2. HTTP请求协议的具体报文:GET请求3. HTTP请求协议的具体报文:POST请…

生成式模型和判别式模型

决策函数Yf(x)Y f(x)Yf(x)或者条件概率分布 P(Y∣X)P(Y|X)P(Y∣X) 监督学习的任务都是从数据中学习一个模型(也叫做分类器),应用这一模型,对给定的输入xxx预测相应的输出YYY,这个模型的一般形式为:决策函数Yf(x)Y f(x)Yf(x)&…

java 每日一练(6)

java 每日一练(6) 文章目录单选不定项选择题编程题单选 1.关于抽象类与最终类,下列说法错误的是?   A 抽象类能被继承,最终类只能被实例化。   B 抽象类和最终类都可以被声明使用   C 抽象类中可以没有抽象方法,最终类中可以没…

Bean 管理(工厂bean)

IOC操作Bean 管理(FactoryBean) 下面是在Bean 管理(工厂bean)之前的学习,基于xml方式注入集合并实现 基于xml方式注入集合并实现 :http://t.csdn.cn/H0ipR Spring 有两种类型bean,一种普通bean…

第五章. 可视化数据分析分析图表—图表的常用设置2

第五章. 可视化数据分析分析图 5.2 图表的常用设置2 本节主要介绍图表的常用设置,设置标题和图例,添加注释文本,调整图表与画布边缘间距以及其他设置。 7.设置标题(title) 1).语法: matplotlib.pyplot.ti…

iOS15适配 UINavigationBar和UITabBar设置无效,变成黑色

今天更新了xcode13,运行项目发现iOS15以上的手机导航栏和状态栏之前设置的颜色等属性都不起作用了,都变成了黑色,滚动的时候才能变成正常的颜色,经确认得用UINavigationBarAppearance和UITabBarAppearance这两个属性对导航栏和状态…

开发SpringBoot+Jwt+Vue的前后端分离后台管理系统VueAdmin - 前端笔记

一个spring security jwt vue的前后端分离项目!综合运用! 关注公众号 MarkerHub,回复【 VueAdmin 】可以加群讨论学习、另外还会不定时安排B站视频直播答疑! 首发公众号:MarkerHub 作者:吕一明 视频讲解&…

半年卖8万吨辣条,卫龙再闯IPO

“辣条大王”卫龙美味全球控股有限公司(下称“卫龙”)于11月23日重新递表,继续冲刺“辣条第一股”。 作为千禧一代撑起的童年“神话”,卫龙的上市之路却波折重重;它曾于2021年5月、2021年11月及此次重启IPO。 卫龙是…

线程池ThreadPoolExecutor

线程池的生命周期 private final AtomicInteger ctl new AtomicInteger(ctlOf(RUNNING, 0)); ThreadPoolExecutor使用一个ctl变量代表两个信息,线程池的运行状态 (runState) 和 线程池内有效线程的数量 (workerCount),高三位表示状态。 workerCount&am…

MySQL 数据库存储引擎

目录 一、存储引擎简介 二、MyISAM存储引擎 1、MylSAM介绍 2、MyISAM表支持3种不同的存储格式 3、MylSAM的特点 4、MyISAM使用的生产场景 三、InnoDB存储引擎 1、InnoDB介绍 2、InnoDB的特点 3、InnoDB适用生产场景 4、MyISAM和InnoDB的区别 四、查看和修改存储引擎…

CloudAlibaba - Nacos服务注册与配置中心

文章目录一.CloudAlibaba简介1. 介绍2. 依赖3. 主要组件4. 资料文档二.Nacos服务注册与发现1. 简介2. Nacos安装3. Nacos服务注册3.1 注册服务生产者3.2 服务消费者注册和负载4. Nacos服务中心对比三.Nacos配置中心1. 基础配置搭建2. Nacos中添加配置信息2.1 Nacos中的匹配规则…

单商户商城系统功能拆解40—分销应用—分销设置

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

前端js传入Long类型精度丢失解决办法

目录 问题背景 解决过程 1.对比数据库数据 2.查询资料 解决方法 问题背景 在进行业务开发的 时候发现更新数据库中的一条数据没有成功,查看SQL日志发现SQL正常执行无错误信息,但是受影响行数为0,但是数据是从前端传过来的 ,一…