1. 概述
支持向量機(jī)(Support Vector Machines)是一種二分類模型,它的目的是尋找一個超平面來對樣本進(jìn)行分割,分割的原則是間隔最大化,最終轉(zhuǎn)化為一個凸二次規(guī)劃問題來求解。
間隔最大化,就是所有樣本點(diǎn)中,離我們分類界限超平面最近的樣本點(diǎn),盡可能的遠(yuǎn)離超平面。這種思想在于,不關(guān)心遠(yuǎn)離超平面的樣本點(diǎn),即分類很明確的樣本,不作考慮,更關(guān)心離超平面近的樣本點(diǎn)。這些離超平面較近的點(diǎn)對超平面的位置有著至關(guān)重要的影響,抓住這個主要矛盾來分析問題。從個體與整體的角度來看,當(dāng)兩邊的離超平面較近的樣本點(diǎn)都里超平面足夠遠(yuǎn)時,那么其余的樣本點(diǎn)也離超平面足夠遠(yuǎn)。這時,滿足間隔最大化的超平面,泛化能力最好。
2. 標(biāo)題數(shù)學(xué)推導(dǎo)
所謂支持向量機(jī),就是通過計(jì)算支持向量的最大間隔來確定唯一且泛化能力最好的超平面。
2.1 函數(shù)間隔
在分離超平面固定為
w
T
x
+
b
=
0
w^Tx+b=0
wTx+b=0的時候,
∣
w
T
x
+
b
∣
|w^Tx+b|
∣wTx+b∣表示點(diǎn)
x
x
x到超平面的相對距離。通過觀察
w
T
x
+
b
w^Tx+b
wTx+b和
y
y
y是否同號,我們判斷分類是否正確。這里我們引入函數(shù)間隔的概念,這個函數(shù)間隔就是我們樣本的確信度,定義函數(shù)間隔
γ
′
\gamma^{\prime}
γ′為:
γ
′
=
y
(
w
T
x
+
b
)
\gamma^{\prime}=y(w^Tx+b)
γ′=y(wTx+b)
2.2 幾何間隔
函數(shù)間隔并不能正常反應(yīng)點(diǎn)到超平面的距離,當(dāng)分子成比例的增長時,分母也是成倍增長。為了統(tǒng)一度量,我們需要對法向量
w
w
w加上約束條件,這樣我們就得到了幾何間隔
γ
\gamma
γ ,這個幾何間隔在二維空間的理解,就是點(diǎn)到線的距離,幾何間隔定義為:
γ
=
y
(
w
T
x
+
b
)
∣
∣
w
∣
∣
2
=
γ
′
∣
∣
w
∣
∣
2
\gamma=\frac{y(w^Tx+b)}{||w||_2}=\frac{ \gamma^{\prime}}{||w||_2}
γ=∣∣w∣∣2?y(wTx+b)?=∣∣w∣∣2?γ′?
2.3 支持向量機(jī)
分離超平面為 w T x + b = 0 w^Tx+b=0 wTx+b=0 ,如果所有的樣本不光可以被超平面分開,還和超平面保持一定的函數(shù)距離。和超平面平行的保持一定的函數(shù)距離的這兩個超平面對應(yīng)的向量,我們定義為支持向量。
3 原理
3.1 硬間隔最大化
SVM的模型是讓所有點(diǎn)到超平面的距離大于一定的距離,也就是所有的分類點(diǎn)要在各自類別的支持向量兩邊。用數(shù)學(xué)式子表示為:
max
?
γ
=
y
(
ω
T
x
+
b
)
∥
ω
∥
2
?
?s.t.?
?
y
i
(
ω
T
x
i
+
b
)
=
γ
′
(
i
)
≥
γ
′
(
i
=
1
,
2
…
,
m
)
\max \gamma=\frac{y\left(\omega^{T} x+b\right)}{\|\omega\|_{2}} \cdots \text { s.t. } \cdot y_{i}\left(\omega^{T} x_{i}+b\right)=\gamma^{\prime(i)} \geq \gamma^{\prime}(i=1,2 \ldots, m)
maxγ=∥ω∥2?y(ωTx+b)???s.t.??yi?(ωTxi?+b)=γ′(i)≥γ′(i=1,2…,m)
m
m
m為訓(xùn)練數(shù)據(jù)集中樣本個數(shù)。
經(jīng)推到,得到SVM優(yōu)化函數(shù):
min
?
1
2
∥
ω
∥
2
2
?
?s.t.?
?
y
i
(
ω
T
x
i
+
b
)
≥
1
(
i
=
1
,
2
,
…
,
m
)
\min \frac{1}{2}\|\omega\|_{2}^{2} \cdot \text { s.t. } \cdot y_{i}\left(\omega^{T} x_{i}+b\right) \geq 1(i=1,2, \ldots, m)
min21?∥ω∥22???s.t.??yi?(ωTxi?+b)≥1(i=1,2,…,m)
由拉格朗日乘子法推導(dǎo),得到最終約束優(yōu)化函數(shù):
min
?
1
2
∑
i
=
1
m
∑
j
=
1
m
α
i
α
j
y
i
y
j
x
i
T
x
j
?
∑
i
=
1
m
α
i
\min \frac{1}{2} \sum_{i=1}^{m} \sum_{j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j}-\sum_{i=1}^{m} \alpha_{i}
min21?i=1∑m?j=1∑m?αi?αj?yi?yj?xiT?xj??i=1∑m?αi?
?s.t.?
∑
i
=
1
m
α
i
y
i
=
0
\text { s.t. } \sum_{i=1}^{m} \alpha_{i} y_{i}=0
?s.t.?i=1∑m?αi?yi?=0
α
i
≥
0
,
i
=
1
,
2
,
…
,
m
\alpha_{i} \geq 0, i=1,2, \ldots, m
αi?≥0,i=1,2,…,m
由序列最小化(sequential minimal optimization,SMO)算法求解 ,并求解法向量
w
w
w和偏置
b
b
b。由此得到最終分類超平面
w
?
x
+
b
?
=
0
w^{*} x+b^{*}=0
w?x+b?=0和決策函數(shù)
f
(
x
)
=
s
i
g
n
(
w
?
x
+
b
?
=
0
)
f(x)=sign(w^{*} x+b^{*}=0)
f(x)=sign(w?x+b?=0)。
3.2 軟間隔最大化
與硬間隔最大化不同的是,軟間隔最大化允許某些樣本不滿足約束條件,即SVM對訓(xùn)練集里面的每個樣本
(
x
i
,
y
i
)
(x_{i},y_{i})
(xi?,yi?)引入了一個松弛變量
ξ
i
≥
0
\xi_{i} \geq 0
ξi?≥0 ,使函數(shù)間隔加上松弛變量大于等于1。得到軟間隔最大化SVM優(yōu)化函數(shù):
min
?
1
2
∥
ω
∥
2
2
+
C
∑
i
=
1
m
ξ
i
\min \frac{1}{2}\|\omega\|_{2}^{2}+C \sum_{i=1}^{m} \xi_{i}
min21?∥ω∥22?+Ci=1∑m?ξi?
?s.t.?
y
i
(
ω
T
x
i
+
b
)
≥
1
?
ξ
i
(
i
=
1
,
2
,
…
,
m
)
\text { s.t. } y_{i}\left(\omega^{T} x_{i}+b\right) \geq 1-\xi_{i}(i=1,2, \ldots, m)
?s.t.?yi?(ωTxi?+b)≥1?ξi?(i=1,2,…,m)
ξ
i
≥
0
(
i
=
1
,
2
,
…
,
m
)
\xi_{i} \geq 0(i=1,2, \ldots, m)
ξi?≥0(i=1,2,…,m)
這里,C>0為懲罰參數(shù),可以理解為我們一般回歸和分類問題正則化時候的參數(shù)。C越大,對誤分類的懲罰越大,C越小,對誤分類的懲罰越小。
3.3 核函數(shù)
存在線性不可分的樣本,將樣本從原始空間映射到一個更高維的特征空間,使得樣本這個特征空間內(nèi)線性可分。再通過間隔最大化的方式得到SVM,成為非線性SVM。
令φ(x)表示將x映射后的特征向量,在特征空間中劃分超平面所對應(yīng)的模型可表示為:
min
?
1
2
∑
i
=
1
,
j
=
1
m
α
i
α
j
y
i
y
j
?
(
x
i
)
T
?
(
x
j
)
?
∑
i
=
1
m
α
i
\min \frac{1}{2} \sum_{i=1, j=1}^{m} \alpha_{i} \alpha_{j} y_{i} y_{j} \phi\left(x_{i}\right)^{T} \phi\left(x_{j}\right)-\sum_{i=1}^{m} \alpha_{i}
min21?i=1,j=1∑m?αi?αj?yi?yj??(xi?)T?(xj?)?i=1∑m?αi?
在高維空間直接計(jì)算
?
(
x
i
)
T
?
(
x
j
)
\phi\left(x_{i}\right)^{T} \phi\left(x_{j}\right)
?(xi?)T?(xj?)通常是困難的,為了避開這個障礙,設(shè)想一個函數(shù):
K
(
x
i
,
x
j
)
=
?
?
(
x
i
)
,
?
(
x
j
)
?
=
?
(
x
i
)
T
?
(
x
j
)
K\left(x_{i}, x_{j}\right)=\left\langle\phi\left(x_{i}\right), \phi\left(x_{j}\right)\right\rangle=\phi\left(x_{i}\right)^{T} \phi\left(x_{j}\right)
K(xi?,xj?)=??(xi?),?(xj?)?=?(xi?)T?(xj?)
函數(shù)
K
(
x
i
,
x
j
)
K\left(x_{i}, x_{j}\right)
K(xi?,xj?)就是核函數(shù)。
4. python實(shí)現(xiàn)
采用breast cancer二分類數(shù)據(jù)集,在sklearn庫中調(diào)用svc函數(shù)svm分類??梢钥闯鰏vm測試準(zhǔn)確率優(yōu)于感知機(jī)。文章來源:http://www.zghlxwxcb.cn/news/detail-438140.html
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 10 22:15:53 2020
@author: HP
"""
'''
breast cancer data ---- 569
data = 9個屬性
target = 陰性----0,陽性-----1
'''
# 導(dǎo)入基本庫
from sklearn.svm import SVC
from sklearn.linear_model import Perceptron
from sklearn import datasets
from sklearn.model_selection import train_test_split
#導(dǎo)入乳腺癌數(shù)據(jù)集
cancer = datasets.load_breast_cancer()
cancer_X = cancer.data#得到乳腺癌樣本集
cancer_y = cancer.target#得到乳腺癌標(biāo)簽集
X_train,X_test,y_train, y_test=train_test_split(
cancer_X,cancer_y,test_size=0.2)#按照比例劃分?jǐn)?shù)據(jù)集為訓(xùn)練集與測試集
# 創(chuàng)建一個SVM分類器并進(jìn)行預(yù)測
clf = SVC(kernel='linear', C=1)#創(chuàng)建SVM訓(xùn)練模型
clf.fit(X_train,y_train)#對訓(xùn)練集數(shù)據(jù)進(jìn)行訓(xùn)練
clf_y_predict=clf.predict(X_test)#通過測試數(shù)據(jù),得到測試標(biāo)簽
scores = clf.score(X_test,y_test)#測試結(jié)果打分
#創(chuàng)建一個感知機(jī)分類器并進(jìn)行預(yù)測
clf1 = Perceptron()#創(chuàng)建感知機(jī)訓(xùn)練模型
clf1.fit(X_train,y_train)#隊(duì)訓(xùn)練集數(shù)據(jù)進(jìn)行訓(xùn)練
clf1_y_predict=clf1.predict(X_test)#通過測試集數(shù)據(jù),得到測試標(biāo)簽
scores1 = clf1.score(X_test,y_test)#測試結(jié)果打分
#打印
print('SVM準(zhǔn)確率:',scores)
print('感知機(jī)準(zhǔn)確率:',scores1)
運(yùn)行結(jié)果文章來源地址http://www.zghlxwxcb.cn/news/detail-438140.html
到了這里,關(guān)于機(jī)器學(xué)習(xí)之支持向量機(jī)(SVM)對乳腺癌數(shù)據(jù)二分類python實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!