Spark-机器学习(7)分类学习之决策树

在之前的文章中,我们学习了分类学习之支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。

Spark-机器学习(6)分类学习之支持向量机-CSDN博客文章浏览阅读1.5k次,点赞28次,收藏25次。今天的文章,我们来学习分类学习之支持向量机,并带来简单案例,学习用法。希望大家能有所收获。同时,希望我的文章能帮助到每一个正在学习的你们。也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/138260328今天的文章,我们来学习分类学习之决策树,并带来简单案例,学习用法。希望大家能有所收获。

目录

一、决策树

什么是决策树

spark决策树

二、示例代码 

完整代码 

方法解析

代码效果  

代码输出 

拓展-spark决策树


一、决策树

什么是决策树

决策树模型 

决策树是一种基本的分类与回归方法。它主要被用于分类问题,但也可以用于回归问题。决策树模型呈树形结构,其中每个内部节点表示一个属性上的判断条件,每个分支代表一个判断条件的输出,每个叶节点代表一个类别。

决策树学习的目的是根据给定的训练数据集构建一个决策树模型,以便能够对新样本进行正确的分类。决策树学习通常包括三个步骤:特征选择、决策树的生成和决策树的剪枝。

  1. 特征选择:选择对训练数据具有分类能力的特征。特征选择的目的是决定用哪个特征来划分空间。常用的选择准则有信息增益、增益率和基尼指数。
  2. 决策树的生成:基于特征选择的结果,递归地构建决策树。从根节点开始,对每个特征进行测试,根据测试结果将样本分配到子节点,直到满足停止条件(例如,所有样本属于同一类,或没有剩余特征可用)为止。
  3. 决策树的剪枝:为了避免过拟合,通常需要对决策树进行剪枝。剪枝的主要目的是简化模型,提高模型的泛化能力。剪枝可以通过预剪枝(在决策树生成过程中进行剪枝)或后剪枝(在决策树生成完成后进行剪枝)来实现。

决策树具有直观、易于理解和实现的优点。然而,它也可能导致过拟合,特别是在处理具有复杂关系的数据集时。此外,决策树对输入数据的预处理(如缺失值和异常值的处理)和参数设置(如停止条件和剪枝策略)也比较敏感。

spark决策树

Spark决策树是Apache Spark MLlib库中提供的一种机器学习算法,用于分类和回归问题。Spark决策树基于传统的决策树算法,并结合了Spark的分布式计算能力,以处理大规模数据集。

Spark决策树在构建过程中,通过递归地将数据集分割成子集来创建树形结构。每个内部节点代表一个特征上的判断条件,根据该条件将数据集划分为不同的子集,并分配给子节点。这个过程一直进行到满足停止条件为止,例如所有样本属于同一类或者没有剩余特征可用。

Spark决策树支持多种特征选择准则,如信息增益、增益率和基尼指数,以便根据数据的特性选择最合适的划分策略。同时,为了防止过拟合,Spark决策树也提供了剪枝机制,可以在决策树生成过程中或生成完成后进行剪枝。

由于Spark的分布式计算能力,Spark决策树可以有效地处理大规模数据集,并且具有良好的扩展性。这使得它成为处理大规模机器学习问题的一种有效方法。

二、示例代码 

下面的示例代码的主要作用是训练一个决策树分类模型 ,通过直接在程序中模拟数据来达到我们展示一个决策树的过程,仅作为学习阶段的示例。在工作中,数据往往庞大而复杂,需要我们花费更长的时间来处理数据和优化模型。

完整代码 

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.ml.Pipeline
import org.apache.spark.ml.classification.DecisionTreeClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
import org.apache.spark.ml.feature.{StringIndexer, VectorAssembler}
import org.apache.spark.sql.SparkSession
object p7{def main(args: Array[String]): Unit = {// 初始化Spark  val conf = new SparkConf().setAppName("Peng0426.").setMaster("local[*]")val sc = new SparkContext(conf)val spark = SparkSession.builder().appName("SimpleDecisionTreeExample").getOrCreate()import spark.implicits._// 创建模拟数据  val data = Seq((1.0, 0.0, "A"), (1.5, 1.0, "A"), (5.0, 5.0, "B"), (5.0, 8.0, "B"), (1.0, 4.0, "A"), (1.5, 1.0, "A"), (5.5, 5.0, "B"), (8.0, 7.0, "B"), (1.0, 0.0, "A"), (2.5, 1.0, "A"), (5.5, 5.0, "B"), (8.0, 6.0, "B"),).toDF("feature1", "feature2", "label")// 将标签列从字符串类型转换为数值类型  val labelIndexer = new StringIndexer().setInputCol("label").setOutputCol("indexedLabel").fit(data)// 将特征列组合成一个特征向量  val assembler = new VectorAssembler().setInputCols(Array("feature1", "feature2")).setOutputCol("features")// 创建决策树分类器  val dt = new DecisionTreeClassifier().setLabelCol("indexedLabel").setFeaturesCol("features")// 创建管道  val pipeline = new Pipeline().setStages(Array(labelIndexer, assembler, dt))// 将数据划分为训练集和测试集  val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))// 训练模型  val model = pipeline.fit(trainingData)// 预测测试集  val predictions = model.transform(testData)//计算测试误差val evaluator = new MulticlassClassificationEvaluator().setLabelCol("indexedLabel").setPredictionCol("prediction").setMetricName("accuracy")val accuracy = evaluator.evaluate(predictions)println(s"Test Accuracy = $accuracy")}
}

方法解析

  • SparkConf 和 SparkContext: 用于初始化Spark应用程序的配置和上下文。

  • SparkSession: 是Spark 2.0及以上版本中引入的新概念,用于替代SparkContext来创建DataFrame、Dataset和读取数据。

  • Pipeline: 在Spark ML中,Pipeline是一个用于组合多个转换步骤(如特征转换、模型训练等)的框架。

  • StringIndexer: 用于将字符串类型的标签列转换为数值类型,以便用于机器学习模型。

  • VectorAssembler: 将多个特征列组合成一个特征向量,这通常是机器学习模型所需要的输入格式。

  • DecisionTreeClassifier: 决策树分类器,用于训练决策树模型。

  • MulticlassClassificationEvaluator: 用于评估多分类模型性能的评估器。

  • DataFrame API: Spark的DataFrame API用于处理结构化数据。

代码效果  

  • 初始化Spark: 通过设置SparkConfSparkSession来初始化Spark应用程序。

  • 创建模拟数据: 创建一个包含两个特征列和一个标签列的DataFrame。

  • 数据预处理: 使用StringIndexerVectorAssembler进行数据预处理,将标签转换为数值类型,并将特征组合成特征向量。

  • 构建模型管道: 使用Pipeline将预处理步骤和决策树分类器组合在一起。

  • 划分数据集: 将数据随机划分为训练集和测试集。

  • 训练模型: 使用训练数据拟合管道,从而训练决策树模型。

  • 预测和评估: 对测试集进行预测,并使用MulticlassClassificationEvaluator计算准确率。

代码输出 

这段代码最后会输出我们的测试集的准确率,这个值表示模型在测试集上的预测准确率。现在运行代码来看看输出的是多少。

可以看到运行代码后得到了1.0。Accuracy的值只会在0到1之间,越接近1代表我们的模型分类的效果越强,但是我这里的1.0是基于数据集特小,数据不复杂的情况下,在真实的环境中往往很难达到。在实际应用中,我们只需要努力将模型的Accuracy值接近1.0即可。

拓展-spark决策树

关键字描述例子
特征列(featuresCol)指定输入数据中的特征列名featuresCol="features"
标签列(labelCol)指定输入数据中的标签列名labelCol="label"
不纯度度量(impurity)选择不纯度度量方式,如基尼不纯度或熵impurity="gini"
最大深度(maxDepth)设置决策树的最大深度maxDepth=5
最小信息增益(minInfoGain)设置分裂节点时所需的最小信息增益minInfoGain=0.01
最小实例数(minInstancesPerNode)设置分裂后每个节点至少包含的实例数量minInstancesPerNode=2
预测列(predictionCol)指定输出数据中的预测结果列名predictionCol="prediction"
概率列(probabilityCol)指定输出数据中的类别概率预测结果列名probabilityCol="probability"
阈值(thresholds)用于多分类问题的阈值设置thresholds=[0.3, 0.7]
示例数据集使用iris数据集进行分类任务加载iris数据集,设置上述参数进行训练

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium在Pycharm中结合python的基本使用、交互、无界面访问

下载 下载与浏览器匹配的浏览器驱动文件,这里一定注意的是,要选择和浏览器版本号相同的驱动程序,否则后面会有很多问题。 (1)浏览器(以google为例)版本号的查询: 我这里的版本号是1…

MySQL数据库安装——zip压缩包形式

安装压缩包zip形式的 MySQL 8数据库 一 、先进入官网下载 https://dev.mysql.com/downloads/mysql/ 二、解压到某个文件夹 我解压到了D:\mysql\mysql8 下面 然后在这个文件夹下手动创建 my.ini 文件和 data 文件夹 my.ini 内容如下: 注意 basedir 和 datadi…

vue做导入导出excel文档

系统中经常会遇到要实现批量导入/导出数据的功能,导入就需要先下载一个模板,然后在模板文件中填写内容,最后导入模板,导出就可能是下载一个excel文件。 1、导出 新建一个export.js文件如下: import {MessageBox,Mes…

文件摆渡:安全、高效的摆渡系统助力提升效率

很多组织和企业都会通过网络隔离的方式来保护内部的数据,网络隔离可以是物理隔离,也可以是逻辑隔离,如使用防火墙、VPN、DMZ等技术手段来实现,隔离之后还会去寻找文件摆渡方式,来保障日常的业务和经营需求。 进行网络隔…

线上社交app的搭建,圈子社交系统,小程序+app+H5三端,源码交付,支持二开!

在科技飞速发展的大背景下,年轻人社交不再局限于面对面,线上社交app已深入各大年轻人的手机中。相比于传统交友方式,线上社交app为用户提供了更加新奇的交友体验。同时,它还可以吸引更多的朋友,提高用户的整体交友体验…

Spring Boot整合Redisson的两种方式

项目场景 Spring Boot整合Redisson的两种方式,方式一直接使用yml配置,方式二创建RedissonConfig配置类。 前言 redisson和redis区别: Redis是一个开源的内存数据库,支持多种数据类型,如字符串、哈希、列表、集合和有序…

python-pytorch 如何使用python库Netron查看模型结构(以pytorch官网模型为例)0.9.2

Netron查看模型结构 参照模型安装Netron写netron代码运行查看结果需要关注的地方 2024年4月27日14:32:30----0.9.2 参照模型 以pytorch官网的tutorial为观察对象,链接是https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html 模型代…

数码摄影色彩构成,数码相机色彩管理

一、资料描述 本套摄影色彩资料,大小58.54M,共有6个文件。 二、资料目录 《抽象彩色摄影集》.阿瑟.pdf 《色彩构成》.pdf 《色彩学》.星云.扫描版.pdf 《摄影色彩构成》.pdf 《数码相机色彩管理》.pdf 数码摄影进阶之4《色彩篇》.pdf 三、资料下…

Qt 把.exe打包成安装文件形式

目录 1.下载工具 Qt Installer Framework2.将bin文件添加到环境变量3.拷贝startmenu示例-备用4.准备Qt Release打包好的程序5.把Release打包好的程序放到packages\org.qtproject.ifw.example\data文件夹下6.生成安装包7.修改安装包图标8.修改主程序程序安装引导-创建快捷键9.添…

FFmpeg下载教程(Windows版)

文章目录 下载地址步骤 下载地址 https://ffmpeg.org/download.html 步骤

win c++使用lua环境配置 5.3.5版本

编译lua 下载lua源码,github仓库 使用vs编译源码,新建一个静态库项目(只会生成lib文件),想要dll的话就新建dll项目(有一个lib文件和dll文件) 把lua源码下面的文件夹都是,复制到vs项目中 lib目录是我手动…

iOS - 多线程-读写安全

文章目录 iOS - 多线程-读写安全1. 多读单写1.1 场景1.2 实现方案1.2.1 pthread_rwlock:读写锁1.2.1.1 示例 1.2.2 dispatch_barrier_async:异步栅栏调用1.2.2.1 示例 iOS - 多线程-读写安全 假设有一个文件,A线程进行读取操作,B…

牛客社区帖子分页显示实现

下图是前端分页的组件: 下面是对应的静态html页面,每一个方块,都是一个a标签,可以点击,执行的链接是/community/index,GET请求,拼接的参数是current,也就是pageNum,只需…

ACE框架学习3

ACE Acceptor-Connector框架 该框架实现 Acceptor-Connector 模式,该模式解除了“网络化应用中的协作对端服务的连接和初始化”与“连接和初始化之后它们所执行的处理”的耦合。Acceptor-Connector 框架允许成用独立于它们所提供的服务来配置其连接布局的关键属性。…

【idea】idea 中 git 分支多个提交合并一个提交到新的分支

一、方法原理讲解 我们在 dev 分支对不同的代码文件做了多次提交。现在我们想要把这些提交都合并到 test 分支。首先我们要明白四个 git 操作, commit:命令用于将你的代码变更保存到本地代码仓库中,它创建了一个新的提交(commit…

ubuntu 复制文件路径

前言 我打算搞一个ubuntu右键复制文件路径的插件,但是找不到,只能平替 这个配置,可以把文件拖拽到cmd窗口,然后就直接cmd输出文件路径 配置 cd ~ vim .bashrc 在文件结尾添加 cdd () { ddirname "$1"; echo …

通过filebeat实现对docker服务的通用日志收集

平台 依赖 linux docker docker-compose 或者 docker compose 镜像 docker.elastic.co/beats/filebeat:8.12.2 docker.elastic.co/beats/kibana:8.12.2 docker.elastic.co/beats/elasticsearch:8.12.2 正文 背景 对于有自建机房的公司来说,如果公司的运维技术…

应用实战 | 别踩白块小游戏,邀请大家来PK挑战~

“踩白块会输”是一个简单的微信小程序游戏,灵感来自当年火热的别踩白块游戏,程序内分成三个模块:手残模式、经典模式和极速模式,分别对应由易到难的三种玩法,可以查看游戏排名。动画效果采用JS实现,小程序…

opencv可视化图片-----c++

可视化图片 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>// 将数据类型转换为字符串 std::string opencvTool::type2str(int type) {std::string r;uchar depth type & CV_MAT_DEPTH_MASK;uchar chans 1 (typ…

java开发之路——用户管理中心_简单初始化

用户管理中心_简单初始化 (一) 初始化项目1. 使用 Ant Design Pro(现成的管理系统) 进行前端初始化2. 后端初始化三种初始化java项目 (二) 遇到的问题【问题1】Ant design pro页面打不开&#xff0c;一直在budiling控制台出现错误error-./src/components/index.ts【问题2】初始…