当前位置:   article > 正文

Spark-机器学习(6)分类学习之支持向量机

Spark-机器学习(6)分类学习之支持向量机

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

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

目录

一、支持向量机

什么是支持向量机

spark支持向量机

二、示例代码 

完整代码 

方法解析

 代码效果 

  代码输出

拓展-spark支持向量机


一、支持向量机

什么是支持向量机

 

支持向量机 

  • 支持向量(Support Vectors):在SVM中,支持向量是那些位于决策边界两侧的最靠近边界的训练样本点。这些点对于确定决策边界的位置至关重要,因为SVM试图找到一个超平面,使得支持向量到该超平面的距离最大化。这些支持向量通常只占训练数据的一小部分,因此SVM是一种稀疏模型,它只依赖于少数关键样本进行决策。

  • SV1、SV2、SV3等:这些通常是对支持向量的标记或引用。在实际应用中,可能会有多个支持向量,它们分布在决策边界的两侧。每个支持向量都对确定决策边界的位置有所贡献。标记为SV1、SV2、SV3等的支持向量只是为了区分不同的支持向量,没有特别的数学或逻辑含义。

  • 超平面与间隔:在SVM中,决策边界是一个超平面,它将数据空间划分为两个区域,每个区域对应一个类别。间隔是指支持向量到决策边界的距离,SVM的目标是最大化这个间隔,以提高分类的鲁棒性和泛化能力。

支持向量机(Support Vector Machine,简称SVM)是一类按监督学习(supervised learning)方式对数据进行二元分类的广义线性分类器(generalized linear classifier)。它的决策边界是对学习样本求解的最大边距超平面(maximum-margin hyperplane)。SVM使用铰链损失函数(hinge loss)计算经验风险(empirical risk)并在求解系统中加入了正则化项以优化结构风险(structural risk),是一个具有稀疏性和稳健性的分类器。

SVM的工作原理可以概括为以下几个步骤:首先,对数据进行预处理,也叫做特征提取,将原始数据转换为可供算法处理的特征向量;然后,建立一个目标函数,该函数能够将数据划分成正类和负类;接着,选择最佳超参数,如kernel函数和正则化参数C,其中kernel函数用于将特征空间映射到高维空间,而正则化参数C是用来控制模型的复杂度的;最后,使用训练数据集训练出最佳SVM模型,再用测试数据集对模型进行测试和评价。

SVM较好地解决了传统学习方法难以处理的小样本、高维、非线性等问题,且具有较好的泛化能力。因此,它已成功应用到人脸识别、遥感图像分析、文本分类等众多模式识别领域。然而

spark支持向量机

Spark支持向量机(SVM)算法,是Spark机器学习库(MLlib)中的一个重要组成部分。Spark MLlib提供了SVM的实现,允许用户在大规模数据集上应用SVM算法进行分类任务。

SVM是一种监督学习算法,特别适用于高维空间,并且在数据维度大于样本点数时依然有效。它使用训练数据的一个子集(称为支持向量)来做出决策,因此具有内存效率高的特点。

在Spark中使用SVM时,首先需要创建一个Spark会话(SparkSession),然后可以从各种数据源(如文件、数据库、HDFS等)加载数据。数据加载后,可以将其转换为DataFrame格式,以便在MLlib中使用。然后,可以利用MLlib中的SVM算法对数据进行训练,得到一个SVM模型。这个模型可以用于对新数据进行分类预测。

此外,Spark还支持对向量和矩阵进行各种统计计算,这对于机器学习任务中的特征处理和模型评估非常有用。这些统计计算主要通过MLlib中的Statistics类库来实现。

二、示例代码 

下面的示例代码的主要作用是展示如何使用Spark MLlib的SVM分类器对多分类问题进行建模和评估。通过读取CSV文件中的数据,转换数据类型,训练模型,并评估模型的性能,这对于我们来学习机器学习来说是一个很好的例子。

完整代码 

  1. import org.apache.spark.ml.classification.SVM
  2. import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
  3. import org.apache.spark.ml.feature.{StringIndexer, VectorIndexer}
  4. import org.apache.spark.sql.SparkSession
  5. object SimpleSVMExample {
  6. def main(args: Array[String]): Unit = {
  7. // 创建Spark会话
  8. val spark = SparkSession.builder()
  9. .appName("Peng0426.")
  10. .master("local[*]") // 使用本地模式,并尽可能使用所有可用的CPU核心
  11. .getOrCreate()
  12. import spark.implicits._
  13. // 加载数据,这里假设你有一个CSV文件,其中包含标签和特征
  14. val data = spark.read.option("header", "true").csv("path_to_your_data.csv")
  15. // 将标签列从字符串转换为数值型
  16. val labelIndexer = new StringIndexer()
  17. .setInputCol("label")
  18. .setOutputCol("indexedLabel")
  19. .fit(data)
  20. // 自动识别分类特征,并对它们进行索引
  21. val featureIndexer = new VectorIndexer()
  22. .setInputCol("features")
  23. .setOutputCol("indexedFeatures")
  24. .setMaxCategories(4) // 假设我们的特征是分类的,并且最多有4个不同的值
  25. .fit(data)
  26. // 分割数据集为训练集和测试集
  27. val Array(trainingData, testData) = data.randomSplit(Array(0.7, 0.3))
  28. // 训练SVM模型
  29. val svm = new SVM()
  30. .setLabelCol("indexedLabel")
  31. .setFeaturesCol("indexedFeatures")
  32. // 使用训练数据拟合模型
  33. val svmModel = svm.fit(trainingData)
  34. // 对测试数据进行预测
  35. val predictions = svmModel.transform(testData)
  36. // 选择 (prediction, true label) 和计算测试误差
  37. val evaluator = new MulticlassClassificationEvaluator()
  38. .setLabelCol("indexedLabel")
  39. .setPredictionCol("prediction")
  40. .setMetricName("accuracy")
  41. val accuracy = evaluator.evaluate(predictions)
  42. println(s"Test Error = ${(1.0 - accuracy)}")
  43. }
  44. }

data03数据格式 

方法解析

  • SparkSession:这是Spark MLlib的入口点,用于创建DataFrame和读取数据。
  • SVM:Spark MLlib中的支持向量机分类器。
  • StringIndexer:用于将字符串标签列转换为数值型标签列,因为SVM需要数值型输入。
  • VectorIndexer:用于识别分类特征,并对它们进行索引。这通常用于处理包含分类特征的数据集。
  • MulticlassClassificationEvaluator:用于评估多分类模型的性能。
  • DataFrame:Spark中的分布式数据集合,用于存储和处理数据。

 代码效果 

  • 读取一个CSV文件,该文件包含标签和特征。
  • 将标签列从字符串转换为数值型。
  • 对特征进行索引(如果需要)。
  • 将数据集分割为训练集和测试集。
  • 使用训练集训练一个SVM模型。
  • 使用测试集评估模型的准确性。

  代码输出

代码会输出测试集上的分类错误率(1减去准确率)。错误率越低,模型的性能越好。 

拓展-spark支持向量机

关键字描述例子
SVM支持向量机,一种有监督学习模型,用于分类和回归分析使用Spark MLlib的SVM算法对鸢尾花数据集进行分类
分隔超平面SVM算法的核心,用于将数据划分为不同类别在二维平面上,分隔超平面可能是一条直线
支持向量距离分隔超平面最近的点,对分类决策有决定性影响在训练过程中,支持向量用于确定分隔超平面的位置
间隔(Margin)分隔超平面到最近的支持向量的距离,SVM的目标是最大化间隔通过最大化间隔,SVM算法提高泛化能力,降低对噪声的敏感性
线性可分与非线性可分SVM可处理线性可分和非线性可分的数据对于线性可分数据,SVM可以直接找到分隔超平面;对于非线性可分数据,SVM可以通过核函数将数据映射到高维空间进行线性分割
核函数用于将数据从原始空间映射到高维空间的函数,使非线性可分数据变得线性可分常见的核函数包括线性核、多项式核、径向基函数(RBF)核等
硬间隔与软间隔硬间隔要求所有样本点都被正确分类,软间隔允许部分样本点被错误分类在实际应用中,软间隔SVM更为常见,因为它具有更强的泛化能力
多类分类SVM原本用于二分类问题,但可以通过“一对一”或“一对多”策略扩展到多类分类问题对于一个具有多个类别的数据集,可以使用SVM的多类分类策略进行分类

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/501390
推荐阅读
相关标签
  

闽ICP备14008679号