spark算法实现——svm支持向量机

svm是一种分类算法,一般先分为两类,再向多类推广一生二,二生三,三生。。。

大致可分为:

线性可分支持向量机
? 硬间隔最大化hard margin maximization
? 硬间隔支持向量机
? 线性支持向量机
? 软间隔最大化soft margin maximization
? 软间隔支持向量机
? 非线性支持向量机
? 核函数kernel function

基本概念:

分割超平面

设C和D为两不相交的凸集,则存在超平面P,
P可以将C和D分离。

线性可分支持向量机

SVM从线性可分情况下的最优分类面发展而来。最优分类面就是要求分类线不但能将两类正确分开(训练错误率为0),且使分类间隔最大

? 给定线性可分训练数据集,通过
间隔最大化得到的分离超平面为
相应的分类决策函数
该决策函数称为线性可分支持向量机。
? φ(x)是某个确定的特征空间转换函数,它的作用是
将x映射到(更高的)维度。

线性支持向量机

分类线能将两类分开(训练错误率大于0,存在个别样本点分错),且使分类间隔最大

非线性支持向量机

存在非线性分割超平面,讲样本分开

sparkmllib代码实现

package mllib

import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD}
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkContext, SparkConf}

//二分类
object SVMwithSGD {
    def main(args: Array[String]) {
        val conf = new SparkConf().setAppName("test").setMaster("local")
        val sc = new SparkContext(conf)
        val sql  = new SQLContext(sc);
        val data: RDD[LabeledPoint] = MLUtils.loadLibSVMFile(sc, "svm.txt")
        val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
        val training = splits(0).cache()
        val test = splits(1)
//        data.foreach( x => println(x.toString()))
//        data.foreach( x => println(x.label))
        data.foreach( x => println(x.features))
        val numIterations = 100
        val model: SVMModel = SVMWithSGD.train(training, numIterations)
        model.clearThreshold()//为了模型拿到评分 不是处理过之后的分类结果

        val scoreAndLabels: RDD[(Double, Double)] = test.map { point =>
//                大于0 小于0 两类
            val score = model.predict(point.features)
            (score, point.label)
        }
        scoreAndLabels.foreach(println)

    }

}

评分>0表示样本点在分割面之上,<0表示在分割面之下

时间: 2024-08-26 15:29:13

spark算法实现——svm支持向量机的相关文章

[分类算法] :SVM支持向量机

Support vector machines 支持向量机,简称SVM 分类算法的目的是学会一个分类函数或者分类模型(分类器),能够把数据库中的数据项映射给定类别中的某一个,从而可以预测未知类别. SVM是一种监督式学习的方法. 支持向量:支持或支撑平面上把两类类别划分开来的超平面的向量点 机:就是算法,机器学习常把一些算法看作是一个机器 超平面: n维空间中, 满足n元一次方程a1x1+a2x2+...+anxn=b的点(x1,x2,...,xn)的全体就叫空间的一张超平面(即广义平面). 具

SVM支持向量机算法

参考资料:http://www.cppblog.com/sunrise/archive/2012/08/06/186474.html                   http://blog.csdn.net/sunanger_wang/article/details/7887218 我的数据挖掘算法代码:https://github.com/linyiqun/DataMiningAlgorithm 介绍 svm(support vector machine)是一种用来进行模式识别,模式分类的

【机器学习算法-python实现】svm支持向量机(2)—简化版SMO算法

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识 通过上一节我们通过引入拉格朗日乗子得到支持向量机变形公式.详细变法可以参考这位大神的博客--地址 参照拉格朗日公式F(x1,x2,...λ)=f(x1,x2,...)-λg(x1,x2...).我们把上面的式子变型为: 约束条件就变成了: 下面就根据最小优化算法SMO(Sequential Minimal Optimization).找出距离分隔面最近的点,也就是支持向量集.如下图的蓝色点所示.

【机器学习算法-python实现】svm支持向量机(3)—核函数

(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.背景知识 前面我们提到的数据集都是线性可分的,这样我们可以用SMO等方法找到支持向量的集合.然而当我们遇到线性不可分的数据集时候,是不是svm就不起作用了呢?这里用到了一种方法叫做核函数,它将低维度的数据转换成高纬度的从而实现线性可分. 可能有的人不明白为什么低维度的数据集转换成高维度的就可以实现线性可分,下面摘抄一个网上的例子解释一下.看下面这个图,我们设红色的区域是一组数据 ,而直线ab除了红色区域以

SVM -支持向量机原理详解与实践之四

SVM -支持向量机原理详解与实践之四 SVM原理分析 SMO算法分析 SMO即Sequential minmal optimization, 是最快的二次规划的优化算法,特使对线性SVM和稀疏数据性能更优.在正式介绍SMO算法之前,首先要了解坐标上升法. 坐标上升法(Coordinate ascent) 坐标上升法(Coordinate Ascent)简单点说就是它每次通过更新函数中的一维,通过多次的迭代以达到优化函数的目的. 坐标上升法原理讲解 为了更加通用的表示算法的求解过程,我们将算法表

SVM -支持向量机原理详解与实践之二

SVM -支持向量机原理详解与实践之二 SVM原理分析 以下内容接上篇. 拉格朗日对偶性(Largrange duality)深入分析 前面提到了支持向量机的凸优化问题中拉格朗日对偶性的重要性. 因为通过应用拉格朗日对偶性我们可以寻找到最优超平面的二次最优化, 所以以下可以将寻找最优超平面二次最优化(原问题),总结为以下几个步骤: 在原始权重空间的带约束的优化问题.(注意带约束) 对优化问题建立拉格朗日函数 推导出机器的最优化条件 最后就是在对偶空间解决带拉格朗日乘子的优化问题. 注:以上这个四

SVM -支持向量机原理详解与实践之三

SVM -支持向量机原理详解与实践之三 什么是核 什么是核,核其实就是一种特殊的函数,更确切的说是核技巧(Kernel trick),清楚的明白这一点很重要. 为什么说是核技巧呢?回顾到我们的对偶问题:     映射到特征空间后约束条件不变,则为:     在原始特征空间中主要是求,也就是和的内积(Inner Product),也称数量积(Scalar Product)或是点积(Dot Product),映射到特征空间后就变成了求,也就是和的映射到特征空间之后的内积,就如我前面所提到的在原始空间

学习Opencv2.4.9(四)---SVM支持向量机

作者:咕唧咕唧liukun321 来自:http://blog.csdn.net/liukun321 先来看一下什么是SVM(支持向量机) SVM是一种训练机器学习的算法,可以用于解决分类和回归问题,同时还使用了一种称之为kernel trick(支持向量机的核函数)的技术进行数据的转换,然后再根据这些转换信息,在可能的输出之中找到一个最优的边界(超平面).简单来说,就是做一些非常复杂的数据转换工作,然后根据预定义的标签或者输出进而计算出如何分离用户的数据. 支持向量机方法是建立在统计学习理论的

SVM 支持向量机

(支持向量机)support vector machine是一种二分类模型,是寻求结构风险最小,实现经验和置信范围最小化. 它的基本模型是定义在特征空间上的间隔最大化的线性分类器,间隔最大化使得它有区别于感知机,并且是唯一的. 学习策略:间隔最大化(解凸二次规划的问题) 线性分类器也叫感知机,就是在N维的数据空间找到一个分类超平面.然后svm其实就是寻找间隔最大化的线性分类器. 首先说他在线性可分的数据集上的: 超平面就是在n维空间上可以将数据线性分类的平面. 超平面: WTX+b=0  W为向