赞
踩
在之前的文章中,我们学习了分类学习之支持向量机,并带来简单案例,学习用法。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。
Spark-机器学习(6)分类学习之支持向量机-CSDN博客文章浏览阅读1.5k次,点赞28次,收藏25次。今天的文章,我们来学习分类学习之支持向量机,并带来简单案例,学习用法。希望大家能有所收获。同时,希望我的文章能帮助到每一个正在学习的你们。也欢迎大家来我的文章下交流讨论,共同进步。https://blog.csdn.net/qq_49513817/article/details/138260328今天的文章,我们来学习分类学习之决策树,并带来简单案例,学习用法。希望大家能有所收获。
目录
决策树模型
决策树是一种基本的分类与回归方法。它主要被用于分类问题,但也可以用于回归问题。决策树模型呈树形结构,其中每个内部节点表示一个属性上的判断条件,每个分支代表一个判断条件的输出,每个叶节点代表一个类别。
决策树学习的目的是根据给定的训练数据集构建一个决策树模型,以便能够对新样本进行正确的分类。决策树学习通常包括三个步骤:特征选择、决策树的生成和决策树的剪枝。
决策树具有直观、易于理解和实现的优点。然而,它也可能导致过拟合,特别是在处理具有复杂关系的数据集时。此外,决策树对输入数据的预处理(如缺失值和异常值的处理)和参数设置(如停止条件和剪枝策略)也比较敏感。
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: 通过设置SparkConf
和SparkSession
来初始化Spark应用程序。
创建模拟数据: 创建一个包含两个特征列和一个标签列的DataFrame。
数据预处理: 使用StringIndexer
和VectorAssembler
进行数据预处理,将标签转换为数值类型,并将特征组合成特征向量。
构建模型管道: 使用Pipeline
将预处理步骤和决策树分类器组合在一起。
划分数据集: 将数据随机划分为训练集和测试集。
训练模型: 使用训练数据拟合管道,从而训练决策树模型。
预测和评估: 对测试集进行预测,并使用MulticlassClassificationEvaluator
计算准确率。
这段代码最后会输出我们的测试集的准确率,这个值表示模型在测试集上的预测准确率。现在运行代码来看看输出的是多少。
可以看到运行代码后得到了1.0。Accuracy的值只会在0到1之间,越接近1代表我们的模型分类的效果越强,但是我这里的1.0是基于数据集特小,数据不复杂的情况下,在真实的环境中往往很难达到。在实际应用中,我们只需要努力将模型的Accuracy值接近1.0即可。
关键字 | 描述 | 例子 |
---|---|---|
特征列(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数据集,设置上述参数进行训练 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。