Spark機器學習 5 SVM演算法

2021-09-09 02:34:51 字數 1241 閱讀 9424

svm(support vector machine)是乙個類分類器,能夠將不同類的樣本在樣本空間中進行分隔,分隔使用的面叫做分隔超平面。

比如對於二維樣本,分布在二維平面上,此時超平面實際上是一條直線,直線上面是一類,下面是另一類。定義超平面為:

f(x)=w0+wtx

可以想象出,這樣的直線可以有很多條,到底哪一條是超平面呢?規定超平面應該是距離兩類的最近距離之和最大,因為只有這樣才是最優的分類。

假設超平面是w0+wtx=0,那麼經過上面這一類距離超平面最近點的直線是w0+wtx=1,下面的直線是w0+wtx=-1。其中一類到超平面的距離是

然後採用拉格朗日函式,經過一系列運算以後,得到

這也意味著,只用計算新點x與訓練資料點的內積就可以對新點進行**。

mllib只實現了線性svm,採用分布式隨機梯度下降演算法。將svm二分類的1和-1轉化為1和0,因此y變成了(2y-1),梯度為g=-(2y-1)x,梯度更新公式

直接上**:

import

org.apache.log4j.

import

org.apache.spark.

import

org.apache.spark.mllib.classification.svmwithsgd

import

org.apache.spark.mllib.util.mlutils

object svmtest

val showpredict = predictionandlabel.take(50)

println("prediction" + "\t" + "label" + "\t" + "data")

for (i

//誤差計算

val accuracy = 1.0 * predictionandlabel.filter(x => x._1 == x._2).count() /testrdd.count()

println("accuracy = " +accuracy)

}}

執行結果:

機器學習實戰 5 (SVM 支援向量機)

本部落格記錄 機器學習實戰 machinelearninginaction 的學習過程,包括演算法介紹和python實現。svm是一種分類演算法,通過對訓練集資料的分析找到最好的分隔平面,然後用該平面對新資料進行分類。本篇文章介紹svm的總體思路,通過一些數學推導把初始問題不斷簡化,最後轉化為乙個比...

機器學習 SVM演算法

經常遇到或用到svm演算法,不過都是用的別人的 並沒有深入的研究理解過。感覺很不應該,今天記錄一下自己的感受和理解。之前對svm的理解就是將資料對映到高維空間從而找到最優的分割平面。處理二維資料時,為一條分割線,三維時就是乙個超平面。當維度上公升,那就是尋找更高維的超平面。如何確定哪條分割線是最優的...

機器學習演算法療程(SVM)

svm處方清單 libsvm在matlab下的使用 libsvm3.2.0中的matlab文件說明 解密svm系列 一 關於拉格朗日乘子法和kkt條件 解密svm系列 二 svm的理論基礎 解密svm系列 三 smo演算法原理與實戰求解 解密svm系列 四 svm非線性分類原理實驗 解密svm系列 ...