關(guān)于SVM
可以做線性分類、非線性分類、線性回歸等,相比邏輯回歸、線性回歸、決策樹等模型(非神經(jīng)網(wǎng)絡(luò))功效最好
傳統(tǒng)線性分類:選出兩堆數(shù)據(jù)的質(zhì)心,并做中垂線(準(zhǔn)確性低)——上圖左
SVM:擬合的不是一條線,而是兩條平行線,且這兩條平行線寬度盡量大,主要關(guān)注距離車道近的邊緣數(shù)據(jù)點(diǎn)(支撐向量support vector),即large margin classification——上圖右
使用前,需要對數(shù)據(jù)集做一個scaling,以做出更好的決策邊界(decision boundary)
但需要容忍一些點(diǎn)跨越分割界限,提高泛化性,即softmax classification
在sklearn中,有一個超參數(shù)c,控制模型復(fù)雜度,c越大,容忍度越小,c越小,容忍度越高。c添加一個新的正則量,可以控制SVM泛化能力,防止過擬合。(一般使用gradsearch)
SVM特有損失函數(shù)Hinge Loss
(liblinear庫,不支持kernel函數(shù),但是相對簡單,復(fù)雜度O(m*n))
同SVM特點(diǎn)吻合,僅考慮落在分類面附近和越過分類面到對方領(lǐng)域的向量,給于一個線性懲罰(l1),或者平方項(xiàng)(l2)
importnumpyasnpfromsklearnimportdatasetsfromsklearn.pipelineimportPipelinefromsklearn.preprocessingimportStandardScalerfromsklearn.svmimportLinearSVCiris = datasets.load_iris()X = iris["data"][:,(2,3)]y = (iris["target"]==2).astype(np.float64)svm_clf = Pipeline(( ("scaler",StandardScaler()), ("Linear_svc",LinearSVC(C=1,loss="hinge")), ))svm_clf.fit(X,y)print(svm_clf.predit([[5.5,1.7]]))
對于nonlinear數(shù)據(jù)的分類
有兩種方法,構(gòu)造高維特征,構(gòu)造相似度特征
使用高維空間特征(即kernel的思想),將數(shù)據(jù)平方、三次方。。映射到高維空間上
fromsklearn.preprocessingimportPolynomialFeaturespolynomial_svm_clf = Pipeline(( ("poly_features", PolynomialFeatures(degree=3)), ("scaler", StandardScaler()), ("svm_clf", LinearSVC(C=10, loss="hinge")) ))polynomial_svm_clf.fit(X, y)
這種kernel trick可以極大地簡化模型,不需要顯示的處理高維特征,可以計(jì)算出比較復(fù)雜的情況
但模型復(fù)雜度越強(qiáng),過擬合風(fēng)險越大
SVC(基于libsvm庫,支持kernel函數(shù),但是相對復(fù)雜,不能用太大規(guī)模數(shù)據(jù),復(fù)雜度O(m^2 *n)-O(m^3 *n))
可以直接使用SVC(coef0:高次與低次權(quán)重)
fromsklearn.svmimportSVCpoly_kernel_svm_clf = Pipeline(( ("scaler", StandardScaler()), ("svm_clf", SVC(kernel="poly", degree=3, coef0=1, C=5)) ))poly_kernel_svm_clf.fit(X, y)
添加相似度特征(similarity features)
例如,下圖分別創(chuàng)造x1,x2兩點(diǎn)的高斯分布,再創(chuàng)建新的坐標(biāo)系統(tǒng),計(jì)算高斯距離(Gaussian RBF Kernel徑向基函數(shù))
gamma(γ)控制高斯曲線形狀胖瘦,數(shù)據(jù)點(diǎn)之間的距離發(fā)揮更強(qiáng)作用
rbf_kernel_svm_clf= Pipeline(( ("scaler", StandardScaler()), ("svm_clf", SVC(kernel="rbf", gamma=5, C=0.001)) ))rbf_kernel_svm_clf.fit(X, y)
如下是不同gamma和C的取值影響
SGDClassifier(支持海量數(shù)據(jù),時間復(fù)雜度O(m*n))
SVM Regression(SVM回歸)
盡量讓所用instance都fit到車道上,車道寬度使用超參數(shù)控制,越大越寬
使用LinearSVR
fromsklearn.svmimportLinearSVRsvm_reg = LinearSVR(epsilon=1.5)svm_reg.fit(X, y)
使用SVR
fromsklearn.svmimportSVRsvm_poly_reg = SVR(kernel="poly", degree=2, C=100, epsilon=0.1)svm_poly_reg.fit(X, y)
數(shù)學(xué)原理
w通過控制h傾斜的角度,控制車道的寬度,越小越寬,并且使得違反分類的數(shù)據(jù)點(diǎn)更少
hard margin linear SVM
優(yōu)化目標(biāo):,并且保證
soft margin linear SVM
增加一個新的松弛變量(slack variable),起正則化作用
優(yōu)化目標(biāo):,并且保證
放寬條件,即使有個別實(shí)例違反條件,也懲罰不大
使用拉格朗日乘子法進(jìn)行計(jì)算,α是松弛項(xiàng)后的結(jié)果
計(jì)算結(jié)果:取平均值
KernelizedSVM
由于
故可先在低位空間里做點(diǎn)積計(jì)算,再映射到高維空間中。
下列公式表示,在高維空間計(jì)算可用kernel trick方式,直接在低維上面計(jì)算
幾個常見的kernal及其function
-
SVM
+關(guān)注
關(guān)注
0文章
154瀏覽量
32552 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8442瀏覽量
133110
原文標(biāo)題:【機(jī)器學(xué)習(xí)】支持向量機(jī)(SVM)
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
機(jī)器學(xué)習(xí)分類算法之支持向量機(jī)SVM
軟件測試工作流程圖
![軟件測試<b class='flag-5'>工作流程圖</b>](https://file1.elecfans.com//web2/M00/A4/6D/wKgZomUMNCeADvxVAAJN5SMKwrE541.jpg)
基于支持向量機(jī)SVM引入雷達(dá)故障預(yù)診斷
基于支持向量機(jī)的噪聲分類與補(bǔ)償
![基于<b class='flag-5'>支持</b><b class='flag-5'>向量</b><b class='flag-5'>機(jī)</b>的噪聲<b class='flag-5'>分類</b>與補(bǔ)償](https://file.elecfans.com/web1/M00/46/09/o4YBAFqPhvSAI0XxAAB0dxr3imE203.jpg)
人工智能之機(jī)器學(xué)習(xí)Analogizer算法-支持向量機(jī)(SVM)
OpenCV機(jī)器學(xué)習(xí)SVM支持向量機(jī)的分類程序免費(fèi)下載
什么是支持向量機(jī) 什么是支持向量
![什么是<b class='flag-5'>支持</b><b class='flag-5'>向量</b><b class='flag-5'>機(jī)</b> 什么是<b class='flag-5'>支持</b><b class='flag-5'>向量</b>](https://file.elecfans.com/web1/M00/B1/09/o4YBAF33OXaAQ1J3AAEEMv6BbwI705.png)
評論