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.mzph.cn/news/830008.shtml

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

相关文章

C++证道之路第十三章类继承

一、一个简单的基类 从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。 派生类对象储存了基类的数据成员(派生类继承了基类的实现)。 派生类对象可以使用基类的方法(派生类继承了基类的接口)…

PY32F040单片机产品介绍,LQFP封装,带LCD 驱动器

PY32F040单片机搭载了 Arm Cortex-M0内核,最高主频可达72 MHz,专为高性价比、高可靠性的系统而设计,符合消费市场的基本设计需求。可广泛应用于电机控制、手持设备、PC 外设、以及复杂的数字控制应用等领域。 PY32F040片内集成 UART、I2C、S…

手机空号过滤,提高工作效率

手机空号过滤在多个方面都具有重要的作用。 首先,它对于短信群发商和电话营销商来说至关重要。通过空号过滤,他们可以确保手机号码数据库的准确性和有效性。由于每天都有大量人群因各种原因更换手机号码,导致每个号段中的空号率和手机状态都…

Debian 系统设置SSH 连接时长

问题现象: 通过finalshell工具连接Debian系统远程操作时,总是一下断开一下断开,要反复重新连接 ,烦人! 解决办法: 找到ssh安装目录下的配置文件:sshd_config vi sshd_config : 找到…

【喜报】科大睿智为武汉博睿英特科技高质量通过CMMI3级评估咨询工作

武汉博睿英特科技有限公司是信息通信技术产品、建筑智慧工程服务提供商。其拥有专注于航空、政府、教育、金融等多行业领域的资深团队,及时掌握最新信息通信应用技术,深刻理解行业业务流程,擅于整合市场优质资源,积极保持与高校产…

STM32 SPI通信

一、SPI总线简介 1.1 SPI总线 串口外设接口(Serial Peripheral Interface,SPI)总线是一种同步串行外设接口,允许MCU与各种外围设备进行全双工、同步串行通信 SPI总线有四根通信线: ①SCK(Serial Clock&a…

linux的压缩与备份

一、打包 格式&#xff1a;tar -参数 <打包文件名> <打包的目标> 作用&#xff1a;将文件或者目录打包 重要参数&#xff1a;-f 使用归档文件&#xff0c;一定要加上这个参数 -c 新建打包文件 -x 解包文件 -t 可以不用解包就能查看包文件内容 -v 打包和解包时显…

JVM的垃圾回收机制(GC机制)

在Java代码运行的过程中&#xff0c;JVM发现 某些资源不需要再使用的时候&#xff0c;就会自动把资源所占的内存给回收掉&#xff0c;就不需要程序员自行操作了。“自动回收资源”就是JVM的“垃圾回收机制”&#xff0c;“垃圾回收机制”也称"GC机制"。 对于Java代码…

C语言指针进阶_字符指针、指针数组、数组指针、函数指针等的介绍

文章目录 前言一、字符指针二、指针数组三、 数组指针1. 数组名和 & 数组名2. 数组指针3. 数组指针解引用 四、数组指针的使用二维数组的传参说明数组指针使用小测验 五、数组传参和指针传参1. 一维数组传参总结2. 二维数组传参总结3. 一级指针传参4. 二级指针传参 六、函数…

java案例-服务端与客户端(传输对象)

需求 代码 SysUser 用户类Operation 操作类Client 客户端Server 服务端ServerReaderThread 服务端线程类 SysUser 用户类 需要实现Serializable 方便序列化&#xff0c;传输对象 public class SysUser implements Serializable {private String username;private String passwo…

kerberos-hive-dbeaver问题总结

一、kerberos安装windows客户端 1、官方下载地址 http://web.mit.edu/kerberos/dist/ 2、环境变量配置 下载msi安装包&#xff0c;无需重启计算机&#xff0c;调整环境变量在jdk的前面&#xff0c;尽量靠前&#xff0c;因为jdk也带了kinit、klist等命令 C:\Program Files\…

【Node.js工程师养成计划】之原生node开发web服务器

一、使用node创建http服务器 var http require(http);// 获取到服务器实例对象 var server http.createServer() server.listen(8080, function() {console.log(http://127.0.0.1:8080); })server.on(request, function(req, res){console.log(request);res.write(6666666688…

如何利用 GPT 自我提高写作能力

GPT革命&#xff1a;如何用AI技术重新定义写作 介绍 在我们的数字时代&#xff0c;了解自我提高写作的必要性至关重要。 随着 GPT 的兴起&#xff0c;我们正在见证书写的变革时代。 这篇扩展文章深入探讨了 GPT 如何显着提高写作技能。 拥抱未来&#xff1a; 人工智能时代的写…

Maven介绍 主要包括Maven的基本介绍,作用,以及对应的Maven模型,可以对Maven有一个基本的了解

1、Maven介绍 1.1 什么是Maven Maven是Apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 官网&#xff1a;https://maven.apache.org/ Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&…

Elasticsearch实现hotel索引库自动补全、拼音搜索功能

Elasticsearch实现hotel索引库自动补全、拼音搜索功能 在这里边我们有两个字段需要用拼音分词器&#xff0c;一个name字段&#xff0c;一个all字段。 然后我们还需要去实现自动补全&#xff0c;而自动补全对应的字段必须使用completion类型。目前我们酒店里面所有的字段都采用的…

【SpringBoot】00 Maven配置及创建项目

一、Maven配置 1、下载Maven 进入官网下载&#xff1a;Maven – Welcome to Apache MavenMaven – Download Apache Maven 本文以最新版为例&#xff0c;可按需选择版本 Maven – Welcome to Apache Maven 2、解压下载好的安装包 将安装包解压到自己设置的空文件夹中 3、…

AI视频教程下载:构建一个ChatGPT股票配对交易机器人

ChatGPT及其后续版本GPT-4已经开始改变世界。人们对新机会感到兴奋&#xff0c;同时对我们社会可能受到的影响感到恐惧。这门课程结合了两个主题&#xff1a;AI和财务&#xff08;算法交易&#xff09;。 你将会学到的&#xff1a; 使用ChatGPT构建一个Python配对交易机器人 …

(Linux)Centos7.*版本安装配置Java环境、Tomcat、Nginx并打包部署SSM框架web系统

一、准备软件与安装包 (一)、必须的软件 1、点击下载Xshell 2、点击下载FileZilla (二)、准备安装包 1、点击下载JDK1.8Linux版本 2、点击下载Nginx 3、点击下载Tomcat 二、关于FileZilla软件的使用说明 (一)、FileZilla软件的打开和说明 (二)、配置服务器地址去连…

理解ROS2的动作

​ 1. 创建一个动作 目标&#xff1a; 在ROS 2软件包中定义一个动作。 1.1 新建包 设置一个 workspace 并创建一个名为 action_tutorials_interfaces 的包&#xff1a; mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention cd ros2_ws/s…

NLP发展及其详解

一、RNN(循环神经网络) 在这里附上一个很好的笔记 零基础入门深度学习(5) - 循环神经网络 RNN(循环神经网络)的结构特点在于其循环单元的设计,这种设计允许网络在处理序列数据时保持对之前信息的记忆。下面详细解释RNN的结构: 循环单元:RNN的循环单元是网络的核心,它…