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文件中的数据,转换数据类型,训练模型,并评估模型的性能,这对于我们来学习机器学习来说是一个很好的例子。

完整代码 

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

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的多类分类策略进行分类

 

  • 31
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peng0426.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值