SparkMlib 之决策树及其案例

news2024/12/27 15:05:57

文章目录

    • 什么是决策树?
    • 决策树的优缺点
    • 决策树示例——鸢尾花分类

什么是决策树?

决策树及其集成是分类和回归机器学习任务的流行方法。决策树被广泛使用,因为它们易于解释,处理分类特征,扩展到多类分类设置,不需要特征缩放,并且能够捕获非线性和特征相互作用。随机森林和增强算法等树集成算法在分类和回归任务中表现最佳。

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

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

官网:分类和回归

决策树的优缺点

优点:

  1. 决策树算法易理解,机理解释起来简单。

  2. 决策树算法可以用于小数据集。

  3. 决策树算法的时间复杂度较小,为用于训练决策树的数据点的对数。

  4. 相比于其他算法智能分析一种类型变量,决策树算法可处理数字和数据的类别。

  5. 能够处理多输出的问题。

  6. 对缺失值不敏感。

  7. 可以处理不相关特征数据。

  8. 效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。

缺点:

  1. 对连续性的字段比较难预测。

  2. 容易出现过拟合。

  3. 当类别太多时,错误可能就会增加的比较快。

  4. 在处理特征关联性比较强的数据时表现得不是太好。

  5. 对于各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征。

参考博客:决策树算法优缺点

决策树示例——鸢尾花分类

数据集下载:

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

提取码:
lz3l

数据集介绍:

iris.data 数据集中共有五个字段,逗号分隔,前四个为特征字段,最后一个为标签字段。

标签字段列一共有三种值,分别是:Iris-setosaIris-versicolorIris-virginica

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

需求实现:

import org.apache.spark.ml.classification.{DecisionTreeClassificationModel, DecisionTreeClassifier}
import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Row, SparkSession}

object Iris {

    // TODO 鸢尾花种类判断

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

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

        // 1.加载鸢尾花数据
        val train_data: RDD[String] = sc
                .read
                .textFile("iris.data")
                .rdd

        // 2.将随机百分之70的数据设置为训练集,其余为测试集
        val data: Array[RDD[String]] = train_data.randomSplit(Array(0.7, 0.3))

        // 3.向量转换
        import sc.implicits._

        val trainDF: DataFrame = data(0).map(lines => {
            val arr: Array[String] = lines.split(",")
            LabeledPoint(
                if (arr(4).equals("Iris-setosa")) {
                    1D
                } else if (arr(4).equals("Iris-versicolor")) {
                    2D
                } else {
                    3D
                },
                Vectors.dense(arr.take(4).map(_.toDouble))
            )
        }).toDF("label", "features")

        // 4.创建决策树对象
        val classifier = new DecisionTreeClassifier()

        // 设置最大深度、分支、质量、特征列
        classifier.setMaxDepth(5).setMaxBins(32).setImpurity("gini").setFeaturesCol("features")

        // 5.训练模型
        val model: DecisionTreeClassificationModel = classifier.fit(trainDF)

        // 打印模型
        println(model.toDebugString)

        // 6.将测试集转换成向量
        val testDF: DataFrame = data(1).map(lines => {
            val arr: Array[String] = lines.split(",")
            LabeledPoint(
                if (arr(4).equals("Iris-setosa")) {
                    1D
                } else if (arr(4).equals("Iris-versicolor")) {
                    2D
                } else {
                    3D
                },
                Vectors.dense(arr.take(4).map(_.toDouble))
            )
        }).toDF("label", "features")

        // 7.模型预测
        val result: DataFrame = model.transform(testDF.select("label", "features"))

        // 8.模型预测评估
        result.select("label", "features","prediction").show(100)

        // 9.计算错误率
        val error: Double = result.where("label = prediction").count.toDouble/result.count
        println("错误率为:"+(1-error))

    }

}

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

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

相关文章

信号类型(雷达)——连续波雷达(二)

系列文章目录 《信号类型(雷达通信)》 《信号类型(雷达)——雷达波形认识(一)》 文章目录 目录 一、连续波雷达信号 1.1 单频雷达信号 1.2 调频连续波雷达 1.3 相位编码连续波雷达 1.4 多频连续波雷…

【AI学习笔记】TensorFlow GPU版本的安装(超详细)

安装步骤:1. 确认显卡是否支持CUDA2. 安装CUDA3. 安装cuDNN3.1 安装 cudnn3.2 将cudnn64_8.dll存放的位置加入Path环境变量4. 安装TensorFlow GPU版本4.1 在Anaconda建立TensorFlow GPU虚拟环境4.2 安装Tensorflow-gpu4.3 安装Keras总结1. 确认显卡是否支持CUDA 在…

【计算机】可信平台模块Trusted Platform Module - TPM

简述 Brief Introduction TPM内部功能模块示意图: 引述 Trusted Platform Module Technology Overview (Windows) | Microsoft Learn: Trusted Platform Module (TPM) technology is designed to provide hardware-based, security-related functions.…

速锐得解码理想汽车L8方向盘转向角度应用随动大灯照明升级

前日,速锐得解码了理想汽车L8车型,由于理想L8是新款车型,架构和理想L9十分相似,与理想ONE这一代有比较大的差异,这恰恰也是我们很好的一次学习机会,也让我们重新认识了理想汽车。 我这里,只挑有…

PCL 点云的法向量

一,点的法向量 点云法线 法向量的概念是很小的时候我们就已经说的,法向量是我们点云中一个非常重要的属性,诸如饿哦们常说的三维重建、点云分割,点云去噪 以及特种描述算法等。 特性: 点云中每一点的法向量夹角和曲率…

【即将开源】⽤于3D激光雷达SLAM闭环检测的词袋模型BoW3D

​以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文# BoW3D: Bag of Words for Real-time Loop Closing in 3D LiDAR SLAM 论文地址:https://arxiv.org/abs/2208.07473 作者单位:中国沈阳自动…

C++基础语法

cout输出 cin是键盘输入 //i input 输入 o output输出 stream流 输入输出流头文件&#xff08;类似stdio.h&#xff09; 2 #include <iostream> 3 4 //std(标准) 使用标准的命名空间using namespace std;//命名空间,此标识符作为此组群的名字 5 using namespace std; 6…

A*算法-Python实现

好久没有在CSDN上发文章了&#xff0c;快一年了吧。这两天重新登录了一下&#xff0c;不看不知道&#xff0c;一看吓一跳&#xff0c;没想到访问量快13万了。 之前写博客的时候&#xff0c;想着把一些有用的东西写下来&#xff0c;一方面是当做笔记了&#xff0c;免得以后忘记…

小程序数据请求的方式和注意事项

1.小程序中网络数据请求的限制 出于安全性方面的考虑&#xff0c;小程序官方对数据接口的请求做出了如下两个限制&#xff1a; ① 只能请求HTTPS类型的接口 ② 必须将接口的域名添加到信任列表中 2.配置request合法域名 假设要在自己的微信小程序中&#xff0c;希望请求某…

Mysql 索引基数与选择性

这篇文章主要介绍 MySQL 索引的 Cardinality 值&#xff08;基数&#xff09;以及索引的可选择性。 什么是索引&#xff1f; 先看一下 wiki 定义&#xff1a; 索引&#xff08;英语&#xff1a;Index&#xff09;&#xff0c;是一本书籍的重要组成部分&#xff0c;它把书中的…

微信小程序中基础入门

一、数据绑定 1.数据绑定的基本原则 ① 在data中定义数据&#xff08;在.js文件&#xff09; ② 在wxml中使用数据 2.Mustache语法的格式 把data中的数据绑定到页面中进行渲染&#xff0c;使用MUstache语法&#xff08;双大括号&#xff0c;可以理解为vue中的插值表达式&…

Redis——》数据类型:List(列表)

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型&#xff1a;List&#xff08;列表&#xff09;一、简介…

Linux02——操作系统接口

一、前言 OS是软硬件之前的桥梁&#xff1a;操作系统管理硬件&#xff0c;最终以服务的形式提供给用户。如用户读取磁盘数据&#xff0c;OS设备管理将读出来的数据通过文件系统交给用户。OS管理员对CPU&#xff08;进程&#xff09;管理&#xff0c;对内存管理&#xff0c;对设…

PyCharm中鼠标悬停在函数上时显示函数和帮助

一、问题 1.1 鼠标放上去不显示文档的提示 鼠标放在随意一个函数上面不显示他的说明了 我也不知道是咋了 二、解决 2.1 首先我只记得有一个侧边栏叫document 经典的解决办法 2.2 在setting中查看这是干嘛的 很多东西都可以在setting中查看到具体的功能 还可以查看到从哪里能…

Redis高级篇——持久化

Redis持久化 1.RDB 1.1RDB简介 RDB全称Redis Database Backup file &#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做Redis数据快照。把内存中的数据都记录到磁盘中&#xff0c;当Redis实例故障重启后&#xff0c;从磁盘中读取快照文件&#xff0c;恢复数据。…

蓝海创意云接受【看苏州】独家专访:助力苏州数字文化行业全方位发展

近日&#xff0c;由蓝海创意云提供渲染服务的动漫电影《老鹰抓小鸡》获金鸡奖最佳美术片提名&#xff0c;位列获奖名单的《长津湖》《独行月球》也由蓝海创意云渲染提供了后期服务。 就此&#xff0c;苏州广播电视总台旗下的苏州权威热点新闻和视频平台【看苏州】对蓝海彤翔执…

# Vue 中 JSON 编辑器使用

Vue 中 JSON 编辑器使用 文章目录Vue 中 JSON 编辑器使用背景描述vue-json-edit安装依赖测试页面效果图bin-code-editor安装依赖测试页面效果图CodeMirror安装依赖测试页面效果图vue-json-views安装依赖属性说明测试页面效果图vue-json-pretty安装依赖属性说明测试页面效果图码…

【CSS3】重点知识内容,快速上手

推荐前端学习路线如下&#xff1a; HTML、CSS、JavaScript、noodJS、组件库、JQuery、前端框架&#xff08;Vue、React&#xff09;、微信小程序和uniapp、TypeScript、webpack 和 vite、Vue 和 React 码源、NextJS、React Native、后端内容。。。。。。 层级选择器 a>b …

Kotlin高仿微信-第3篇-主页

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

Matlab图像处理基础(2):区域处理,边沿检测

目录 0. 概要 2. 卷积和相关 2.1 卷积 2.2 相关 2.3 卷积与相关的关系 2.4 Matlab函数 2.5 2-D卷积/相关的分解 3. 高通滤波&#xff0c;edge detection 3.1 matlab edge()函数 3.2 各种算子简介 3.2.1 Robert算子 3.2.2 Prewitt算子 3.2.3 Sobel算子 3.4 Cann…