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

Support vector machines 支持向量机,简称SVM

  • 分类算法的目的是学会一个分类函数或者分类模型(分类器),能够把数据库中的数据项映射给定类别中的某一个,从而可以预测未知类别。
  • SVM是一种监督式学习的方法。
  • 支持向量:支持或支撑平面上把两类类别划分开来的超平面的向量点
  • 机:就是算法,机器学习常把一些算法看作是一个机器
  • SVM 其实就是一种很有用的二分类方法。
  • 超平面:

     n维空间中, 满足n元一次方程a1x1+a2x2+...+anxn=b的点(x1,x2,...,xn)的全体就叫空间的一张超平面(即广义平面)。

     具体到2维空间,就是一条直线,3维空间,就是一个平面。

 

原理概况:

  1. 线性可分:超平面分割(超平面是分割两类数据的最优的一个平面,下图的红线表示)

      

      2. 最大化间隔

      3. 线性问题求解:

      求解对偶问题得到最优解。(Lagrange 函数的对偶因子)

      4. 非线性问题

          

      通过选择一个核函数,将数据映射到高维空间(线性可分),从而来解决原有空间的线性不可分。

      核方法: 除了支持向量机外,任何把计算表示为数据点的内积的方法,都可以用核方法进行非线性扩展。

 

例子:

import org.apache.spark.mllib.classification.{SVMModel, SVMWithSGD}
import org.apache.spark.mllib.evaluation.BinaryClassificationMetrics
import org.apache.spark.mllib.util.MLUtils

// Load training data in LIBSVM format.
val data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")
// Split data into training (60%) and test (40%).
val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)
val training = splits(0).cache()
val test = splits(1)

// Run training algorithm to build the model
val numIterations = 100
val model = SVMWithSGD.train(training, numIterations)

// Clear the default threshold.
model.clearThreshold()

// Compute raw scores on the test set.
val scoreAndLabels = test.map { point =>
  val score = model.predict(point.features)
  (score, point.label)
}

// Get evaluation metrics.
val metrics = new BinaryClassificationMetrics(scoreAndLabels)
val auROC = metrics.areaUnderROC()
println("Area under ROC = " + auROC)

  

posted on 2016-06-27 15:53  Suckseedeva 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/skyEva/p/5620421.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值