第二章 感知機
感知機是二分類的線性分類模型,分爲原始形式和對偶形式。是神經網絡和支持向量機的基礎。
介紹感知機模型
敘述感知機的學習策略(特別是損失函數)
介紹感知機學習算法(包括原始形式和對偶形式),並驗證算法收斂性。
2.1 感知機模型
定義 2.1(感知機) 假設輸入空間(特徵空間)是 χ ⊆ R n \,\chi\subseteq R^n\, χ ⊆ R n ,輸出空間是 Y = { + 1 , − 1 } \,Y=\{+1,-1\}\, Y = { + 1 , − 1 } 。輸入 x ∈ χ \,x\in \chi\, x ∈ χ ,表示實例的特徵向量,對應於輸入空間(特徵空間)的點,輸出 y ∈ Y \,y\in Y\, y ∈ Y 表示實例的類別。由輸入空間到輸出空間的如下函數稱爲感知機:
f ( x ) = s i g n ( w ⋅ x + b ) 其 中 , w 和 b 是 感 知 機 模 型 的 參 數 . w ∈ R n 叫 做 權 值 , b 叫 做 偏 置 . w ⋅ x 表 示 w 和 x 的 內 積 . s i g n 是 符 號 函 數 , 即 : s i g n ( x ) = { + 1 x ≥ 0 − 1 x < 0
f(x)=sign(w·x+b)\\
其中,w和b是感知機模型的參數.
w\in R^n 叫做權值,b叫做偏置.\\
w·x表示w和x的內積.
sign是符號函數,即:\\
sign(x)=\begin{cases} +1 & x\geq0 \\ -1 & x<0 \end{cases}
f ( x ) = s i g n ( w ⋅ x + b ) 其 中 , w 和 b 是 感 知 機 模 型 的 參 數 . w ∈ R n 叫 做 權 值 , b 叫 做 偏 置 . w ⋅ x 表 示 w 和 x 的 內 積 . s i g n 是 符 號 函 數 , 即 : s i g n ( x ) = { + 1 − 1 x ≥ 0 x < 0
幾何解釋:
線性方程
w ⋅ x + b = 0
w·x+b=0
w ⋅ x + b = 0
對應於特徵空間 R n \, R^n\, R n 中的一個超平面S。其中 w , \, w, w , 是超平面的法向量, b \, b\, b 是超平面的截距,該超平面將特徵空間劃分爲兩部分。因此超平面S成爲分離超平面。
存在的問題:爲什麼加負號?
對− b ∣ ∣ w ∣ ∣ -\frac{b}{\mid\mid w\mid\mid} − ∣ ∣ w ∣ ∣ b 的理解:
三維平面下,點到面的距離公式:
平 面 Π : A x + B y + C z + D = 0 , 法 向 量 爲 n ⃗ = ( A , B , C ) 平 面 外 一 點 M 1 ( x 1 , y 1 , z 1 ) 平 面 上 取 一 點 M 0 則 點 M 1 到 Π 的 距 離 : d = ∣ ∣ M 0 M 1 ⃗ ∣ ∣ cos α 其 中 α 是 n ⃗ 與 M 0 M 1 ⃗ 的 夾 角 M 0 M 1 ⃗ ⋅ n ⃗ = ∣ ∣ M 0 M 1 ⃗ ∣ ∣ ⋅ ∣ ∣ n ⃗ ∣ ∣ cos α 因 此 : cos α = M 0 M 1 ⃗ ⋅ n ⃗ ∣ ∣ M 0 M 1 ⃗ ∣ ∣ ⋅ ∣ ∣ n ⃗ ∣ ∣ 故 : d = M 0 M 1 ⃗ ⋅ n ⃗ ∣ ∣ n ⃗ ∣ ∣ 而 : M 0 M 1 ⃗ ⋅ n ⃗ = ∣ A ( x 1 − x 0 ) + B ( y 1 − y 0 ) + C ( z 1 − z 0 ) ∣ 點 M 0 在 平 面 上 , 所 以 M 0 M 1 ⃗ ⋅ n ⃗ = ∣ A x 1 + B y 1 + C z 1 + D ∣ 所 以 : d = ∣ A x 1 + B y 1 + C z 1 + D ∣ ∣ ∣ n ⃗ ∣ ∣
平面\Pi :Ax+By+Cz+D=0,法向量爲\vec{n}=(A,B,C)\\
平面外一點M_1(x_1,y_1,z_1)\\
平面上取一點M_0\\
則點M_1到\Pi 的距離:d=\mid\mid\vec{M_0M_1}\mid\mid\cos \alpha\\
其中\alpha是\vec{n}與\vec{M_0M_1}的夾角\\
\vec{M_0M_1}·\vec{n}=\mid\mid\vec{M_0M_1}\mid\mid·\mid\mid\vec{n}\mid\mid\cos \alpha\\
因此:\cos \alpha=\frac{\vec{M_0M_1}·\vec{n}}{\mid\mid\vec{M_0M_1}\mid\mid·\mid\mid\vec{n}\mid\mid}\\
故:d=\frac{\vec{M_0M_1}·\vec{n}}{\mid\mid\vec{n}\mid\mid}\\
而:\vec{M_0M_1}·\vec{n}=\mid A(x_1-x_0)+B(y_1-y_0)+C(z_1-z_0)\mid\\
點M_0在平面上,所以\vec{M_0M_1}·\vec{n}=\mid Ax_1+By_1+Cz_1+D\mid\\
所以:d=\frac{\mid Ax_1+By_1+Cz_1+D\mid}{\mid\mid\vec{n}\mid\mid}\\
平 面 Π : A x + B y + C z + D = 0 , 法 向 量 爲 n = ( A , B , C ) 平 面 外 一 點 M 1 ( x 1 , y 1 , z 1 ) 平 面 上 取 一 點 M 0 則 點 M 1 到 Π 的 距 離 : d = ∣ ∣ M 0 M 1 ∣ ∣ cos α 其 中 α 是 n 與 M 0 M 1 的 夾 角 M 0 M 1 ⋅ n = ∣ ∣ M 0 M 1 ∣ ∣ ⋅ ∣ ∣ n ∣ ∣ cos α 因 此 : cos α = ∣ ∣ M 0 M 1 ∣ ∣ ⋅ ∣ ∣ n ∣ ∣ M 0 M 1 ⋅ n 故 : d = ∣ ∣ n ∣ ∣ M 0 M 1 ⋅ n 而 : M 0 M 1 ⋅ n = ∣ A ( x 1 − x 0 ) + B ( y 1 − y 0 ) + C ( z 1 − z 0 ) ∣ 點 M 0 在 平 面 上 , 所 以 M 0 M 1 ⋅ n = ∣ A x 1 + B y 1 + C z 1 + D ∣ 所 以 : d = ∣ ∣ n ∣ ∣ ∣ A x 1 + B y 1 + C z 1 + D ∣
其次:
y = w ⋅ x + b 法 向 量 n ⃗ = w D = b 原 點 : x 1 = 0 , y 1 = 0 , z 1 = 0
y=w·x+b\\
法向量\vec{n}=w\\
D=b
原點:x_1=0,y_1=0,z_1=0
y = w ⋅ x + b 法 向 量 n = w D = b 原 點 : x 1 = 0 , y 1 = 0 , z 1 = 0
引申到n維,到原點距離:
d = w x + b ∣ ∣ w ∣ ∣ = ∣ b ∣ ∣ ∣ w ∣ ∣
d=\frac{wx+b}{\mid\mid w\mid\mid}=\frac{\mid b \mid}{\mid\mid w\mid\mid}
d = ∣ ∣ w ∣ ∣ w x + b = ∣ ∣ w ∣ ∣ ∣ b ∣
2.2 感知機學習策略
2.2.1 數據集的線性可分性
定義 2.2 (數據集線性可分性) :給定一個數據集,如果存在一個超平面,能將數據集中的正實例點和負實例點完全正確的劃分在超平面兩側,則稱該數據集爲線性可分數據集。
2.2.2 感知機學習策略
由上可知,輸入空間任一點x 0 x_0 x 0 到超平面S的距離:
d = 1 ∣ ∣ w ∣ ∣ ∣ w ⋅ x 0 + b ∣
d=\frac{1}{\mid\mid w \mid \mid}\mid w·x_0+b\mid
d = ∣ ∣ w ∣ ∣ 1 ∣ w ⋅ x 0 + b ∣
假定y i = + 1 y_i=+1 y i = + 1 時,有w ⋅ x + b > 0 w·x+b>0 w ⋅ x + b > 0 .
故,對於誤分類點,有
− y i ( w ⋅ x i + b ) > 0
-y_i(w·x_i+b)>0
− y i ( w ⋅ x i + b ) > 0
− 1 ∣ ∣ w ∣ ∣ y i ( w ⋅ x i + b )
-\frac{1}{\mid\mid w\mid\mid}y_i(w·x_i+b)
− ∣ ∣ w ∣ ∣ 1 y i ( w ⋅ x i + b )
假設所有誤分類的點集合爲M M M ,那麼所有誤分類點到超平面S距離是
− 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M y i ( w ⋅ x i + b )
-\frac{1}{\mid\mid w\mid\mid}\sum _{x_i \in M}y_i(w·x_i+b)
− ∣ ∣ w ∣ ∣ 1 x i ∈ M ∑ y i ( w ⋅ x i + b )
L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b )
L(w,b)=-\sum _{x_i \in M}y_i(w·x_i+b)
L ( w , b ) = − x i ∈ M ∑ y i ( w ⋅ x i + b )
該損失函數即感知機學習的經驗風險函數 。
顯然損失函數非負。
對一個特定的樣本點的損失函數,在誤分類時是參數w , b w,b w , b 的線性函數,正確分類時是0,因此給定數據集T T T ,損失函數L ( w , b ) L(w,b) L ( w , b ) 是w , b w,b w , b 的可導函數。
2.3 感知機學習算法
2.3.1 感知機學習算法的原始形式
min w , b L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b )
\min _{w,b}L(w,b)=-\sum _{x_i \in M}y_i (w·x_i+b)
w , b min L ( w , b ) = − x i ∈ M ∑ y i ( w ⋅ x i + b )
採用隨機梯度下降法。首先,任意選取超平面w 0 , b 0 w_0,b_0 w 0 , b 0 ,然後用梯度下降法不斷極小化目標函數。極小化的過程不是一次使M M M 中的所有誤分類點梯度下降,而是一次隨機選取一個誤分類點使其梯度下降。
損失函數L ( w , b ) L(w,b) L ( w , b ) 梯度:
∇ w L ( w , b ) = − ∑ x i ∈ M y i x i ∇ b L ( w , b ) = − ∑ x i ∈ M y i
\nabla_wL(w,b)=-\sum _{x_i \in M}y_ix_i\\
\nabla_bL(w,b)=-\sum _{x_i \in M}y_i
∇ w L ( w , b ) = − x i ∈ M ∑ y i x i ∇ b L ( w , b ) = − x i ∈ M ∑ y i
隨機選取誤分類點( x i , y i ) (x_i,y_i) ( x i , y i ) ,對w , b w,b w , b 更新:
w ← w + η y i x i b ← b + η y i 其 中 , η 是 步 長 .
w\leftarrow w+\eta y_ix_i\\
b\leftarrow b+\eta y_i\\
其中,\eta 是步長.
w ← w + η y i x i b ← b + η y i 其 中 , η 是 步 長 .
"""
正實例點:(3,3),(4,3)
負實例點:(1,1)
"""
import numpy as np
x = np. array( [ [ 3 , 3 ] , [ 4 , 3 ] , [ 1 , 1 ] ] )
y = [ 1 , 1 , - 1 ]
eta = 1
w = [ 0 , 0 ]
b = 0
def is_correct ( _x, _y, _w, _b) :
"""
判斷是否有分類錯誤的點
:param _x: 點集座標
:param _y: 真實分類結果
:param _w: 權重
:param _b: 偏置
:return: 是否有錯,錯誤的點的座標,錯誤點的序號
"""
flag = - 1
_wrong = False
a = 0
for _i in range ( 0 , len ( _y) ) :
if _y[ _i] * ( np. dot( _x[ _i] , _w) + _b) <= 0 :
flag = _i
_wrong = True
a = _i
break
return _wrong, x[ flag] , a + 1
def update ( _w, _b, _point, _yi) :
"""
更新參數
:param _w: 待更新權重
:param _b: 待更新偏置
:param _point: 分類錯誤點座標
:param _yi: 分類錯誤點的真實對應結果
:return: 更新後的w,b
"""
_w = _w + eta * _yi * _point
_b = _b + eta * _yi
return _w, _b
if __name__ == '__main__' :
while True :
wrong, point, i = is_correct( x, y, w, b)
if not wrong:
print ( 'over' )
break
print ( 'find the ' , i, 'point error: ' , point)
w, b = update( w, b, point, y[ ( i - 1 ) ] )
print ( 'update w, b: ' , w, b)
print ( 'result: ' , w, b)
find the 1 point error: [ 3 3 ]
update w, b: [ 3 3 ] 1
find the 3 point error: [ 1 1 ]
update w, b: [ 2 2 ] 0
find the 3 point error: [ 1 1 ]
update w, b: [ 1 1 ] - 1
find the 3 point error: [ 1 1 ]
update w, b: [ 0 0 ] - 2
find the 1 point error: [ 3 3 ]
update w, b: [ 3 3 ] - 1
find the 3 point error: [ 1 1 ]
update w, b: [ 2 2 ] - 2
find the 3 point error: [ 1 1 ]
update w, b: [ 1 1 ] - 3
over
result: [ 1 1 ] - 3
2.3.2 算法的收斂性
即證明:對於線性可分的數據集,感知機學習原始形式收斂。即經過有限次迭代可以得到一個將數據集完全正確劃分的分離超平面及感知機模型。
定理 2.1 (Novikoff)
爲方便推導,將偏置b b b 併入權重w w w ,即:w ^ = ( w T , b T ) T \hat{w}=(w^T,b^T)^T w ^ = ( w T , b T ) T ,同時將輸入向量加以擴充,加進常數1,記作:x ^ = ( x T , 1 ) T \hat{x}=(x^T,1)^T x ^ = ( x T , 1 ) T .顯然(點乘),w ^ ⋅ x ^ = w ⋅ x + b \hat{w}·\hat{x}=w·x+b w ^ ⋅ x ^ = w ⋅ x + b
(1) 由於數據集線性可分,所以存在超平面將數據集完全正確分開,取此超平面爲w ^ o p t ⋅ x ^ = w o p t ⋅ x + b o p t = 0 \hat{w}_{opt}·\hat{x}=w_{opt}·x+b_{opt}=0 w ^ o p t ⋅ x ^ = w o p t ⋅ x + b o p t = 0 ,使得(單位化)∣ ∣ w ^ o p t ∣ ∣ = 1 \mid\mid\hat{w}_{opt}\mid\mid =1 ∣ ∣ w ^ o p t ∣ ∣ = 1 。
對於有限的i = 1 , 2 , . . . , N i=1,2,...,N i = 1 , 2 , . . . , N ,均有(意思是分類正確):
y i ( w ^ o p t ⋅ x ^ i ) = y i ( w o p t ⋅ x i + b o p t ) > 0
y_i(\hat{w}_{opt}·\hat{x}_i)=y_i(w_{opt}·x_i+b_{opt})>0
y i ( w ^ o p t ⋅ x ^ i ) = y i ( w o p t ⋅ x i + b o p t ) > 0
所以存在(離直線最近的點):
γ = min i { y i ( w o p t ⋅ x i + b o p t }
\gamma=\min _i \{y_i(w_{opt}·x_i+b_{opt}\}
γ = i min { y i ( w o p t ⋅ x i + b o p t }
使得:
y i ( w ^ o p t ⋅ x ^ i ) = y i ( w o p t ⋅ x i + b o p t ) ≥ γ
y_i(\hat{w}_{opt}·\hat{x}_i)=y_i(w_{opt}·x_i+b_{opt})\geq\gamma
y i ( w ^ o p t ⋅ x ^ i ) = y i ( w o p t ⋅ x i + b o p t ) ≥ γ
(2) 感知機算法從w ^ 0 = 0 \hat{w}_0=0 w ^ 0 = 0 開始,如果被誤分類,就更新權重。令w ^ k − 1 \hat{w}_{k-1} w ^ k − 1 是第k k k 個誤分類實例之前的擴充權重向量,即:
w ^ k − 1 = ( w k − 1 T , b k − 1 ) T
\hat{w}_{k-1}=(w_{k-1}^T,b_{k-1})^T\\
w ^ k − 1 = ( w k − 1 T , b k − 1 ) T
第k個誤分類實例的條件是:
y i ( w ^ o p t ⋅ x ^ i ) = y i ( w o p t ⋅ x i + b o p t ) ≤ 0
y_i(\hat{w}_{opt}·\hat{x}_i)=y_i(w_{opt}·x_i+b_{opt})\leq 0\\
y i ( w ^ o p t ⋅ x ^ i ) = y i ( w o p t ⋅ x i + b o p t ) ≤ 0
若( x i , y i ) (x_i,y_i) ( x i , y i ) 是誤分類點,則w w w 和b b b 的更新是:
w k ← w k − 1 + η y i x i b k ← b k − 1 + η y i
w_k\leftarrow w_{k-1}+\eta y_ix_i\\
b_k\leftarrow b_{k-1}+\eta y_i\\
w k ← w k − 1 + η y i x i b k ← b k − 1 + η y i
即:
w ^ k = w ^ k − 1 + η y i x ^ i
\hat{w}_k=\hat{w}_{k-1}+\eta y_i\hat{x}_i
w ^ k = w ^ k − 1 + η y i x ^ i
不等式1: w ^ k ⋅ w ^ o p t ≥ k η γ \,\,\hat{w}_k·\hat{w}_{opt}\geq k\eta\gamma w ^ k ⋅ w ^ o p t ≥ k η γ
w ^ k ⋅ w ^ o p t = w ^ k − 1 ⋅ w ^ o p t + η y i w ^ o p t ⋅ x ^ i ≥ w ^ k − 1 ⋅ w ^ o p t + η γ
\hat{w}_k·\hat{w}_{opt}=\hat{w}_{k-1}·\hat{w}_{opt}+\eta y_i\hat{w}_{opt}·\hat{x}_i \geq \hat{w}_{k-1}·\hat{w}_{opt}+\eta\gamma\\
w ^ k ⋅ w ^ o p t = w ^ k − 1 ⋅ w ^ o p t + η y i w ^ o p t ⋅ x ^ i ≥ w ^ k − 1 ⋅ w ^ o p t + η γ
遞推得:
w ^ k ⋅ w ^ o p t ≥ w ^ k − 1 ⋅ w ^ o p t + η γ ≥ w ^ k − 2 ⋅ w ^ o p t + 2 η γ ≥ . . . ≥ k η γ
\hat{w}_k·\hat{w}_{opt}\geq \hat{w}_{k-1}·\hat{w}_{opt}+\eta\gamma \geq \hat{w}_{k-2}·\hat{w}_{opt}+2\eta\gamma \geq ...\geq k\eta\gamma
w ^ k ⋅ w ^ o p t ≥ w ^ k − 1 ⋅ w ^ o p t + η γ ≥ w ^ k − 2 ⋅ w ^ o p t + 2 η γ ≥ . . . ≥ k η γ
不等式2: 令 R = max ( 1 ≤ i ≤ N ) ∣ ∣ x ^ i ∣ ∣ , ∣ ∣ w ^ k ∣ ∣ 2 ≤ k η 2 R 2 \,\,令R=\max _{(1\leq i\leq N)} \mid\mid \hat{x}_i\mid\mid,\mid\mid\hat{w}_k\mid\mid^2 \leq k\eta^2R^2 令 R = max ( 1 ≤ i ≤ N ) ∣ ∣ x ^ i ∣ ∣ , ∣ ∣ w ^ k ∣ ∣ 2 ≤ k η 2 R 2
∣ ∣ w ^ k ∣ ∣ 2 = ∣ ∣ w ^ k − 1 ∣ ∣ 2 + 2 η y i w ^ k − 1 ⋅ x ^ i + η 2 ∣ ∣ x ^ i ∣ ∣ 2 ≤ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 ∣ ∣ x ^ i ∣ ∣ 2 ≤ ∣ ∣ w ^ k − 2 ∣ ∣ 2 + 2 η 2 ∣ ∣ x ^ i ∣ ∣ 2 ≤ . . . ≤ k η 2 R 2
\mid\mid\hat{w}_k\mid\mid^2=\mid\mid\hat{w}_{k-1}\mid\mid^2+2\eta y_i\hat{w}_{k-1}·\hat{x}_i+\eta^2\mid\mid \hat{x}_i\mid\mid^2\\
\leq \mid\mid\hat{w}_{k-1}\mid\mid^2+\eta^2\mid\mid \hat{x}_i\mid\mid^2\\
\leq \mid\mid\hat{w}_{k-2}\mid\mid^2+2\eta^2\mid\mid \hat{x}_i\mid\mid^2\\
\leq ...
\leq k\eta^2 R^2
∣ ∣ w ^ k ∣ ∣ 2 = ∣ ∣ w ^ k − 1 ∣ ∣ 2 + 2 η y i w ^ k − 1 ⋅ x ^ i + η 2 ∣ ∣ x ^ i ∣ ∣ 2 ≤ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 ∣ ∣ x ^ i ∣ ∣ 2 ≤ ∣ ∣ w ^ k − 2 ∣ ∣ 2 + 2 η 2 ∣ ∣ x ^ i ∣ ∣ 2 ≤ . . . ≤ k η 2 R 2
結合兩個不等式:
k η γ ≤ w ^ k ⋅ w ^ o p t ≤ ∣ ∣ w ^ k ∣ ∣ ∣ ∣ w ^ o p t ∣ ∣ ⏞ 柯 西 不 等 式 ≤ k η R
k\eta\gamma\leq \overbrace{\hat{w}_k·\hat{w}_{opt}\leq \mid\mid\hat{w}_k\mid\mid \mid\mid\hat{w}_{opt}\mid\mid }^{柯西不等式}\leq \sqrt{k}\eta R
k η γ ≤ w ^ k ⋅ w ^ o p t ≤ ∣ ∣ w ^ k ∣ ∣ ∣ ∣ w ^ o p t ∣ ∣ 柯 西 不 等 式 ≤ k η R
∣ ∣ w ^ o p t ∣ ∣ = 1 \mid\mid\hat{w}_{opt}\mid\mid=1 ∣ ∣ w ^ o p t ∣ ∣ = 1 是爲了:
2.3.2 感知機學習算法的對偶形式
對偶形式基本想法:將w w w 和b b b 表示爲實例x i x_i x i 和標記y i y_i y i 的線性組合的形式。
對於( x i , y i ) (x_i,y_i) ( x i , y i ) :
w ← w + η y i x i b ← b + η y i
w\leftarrow w+\eta y_ix_i\\
b\leftarrow b+\eta y_i\\
w ← w + η y i x i b ← b + η y i
逐步修改w w w 和b b b ,修改n次,則w , b w,b w , b 關於( x i , y i ) (x_i,y_i) ( x i , y i ) 的增量分別是n i η y i x i n_i\eta y_ix_i n i η y i x i 和n i η y i n_i\eta y_i n i η y i 。
最終學到的w w w 和b b b 是
w = ∑ i = 1 N n i η y i x i b = ∑ i = 1 N n i η y i
w=\sum _{i=1}^N n_i\eta y_ix_i\\
b=\sum _{i=1}^N n_i\eta y_i\\
w = i = 1 ∑ N n i η y i x i b = i = 1 ∑ N n i η y i
y i ( w ⋅ x i + b ) ≤ 0
y_i(w·x_i+b)\leq 0
y i ( w ⋅ x i + b ) ≤ 0
y i ( ∑ j = 1 N n j η y j x j ⋅ x i + b ) ≤ 0
y_i(\sum _{j=1}^N n_j\eta y_jx_j·x_i+b)\leq 0
y i ( j = 1 ∑ N n j η y j x j ⋅ x i + b ) ≤ 0
"""
正實例點:(3,3),(4,3)
負實例點:(1,1)
"""
import numpy as np
x = np. array( [ [ 3 , 3 ] , [ 4 , 3 ] , [ 1 , 1 ] ] )
n = len ( x)
y = [ 1 , 1 , - 1 ]
eta = 1
w = [ 0 , 0 ]
b = 0
alpha = np. zeros( n, dtype= np. int )
def is_correct ( _point, _label, _row, _g) :
"""
判斷是否分類正確
:param _point: 判斷點
:param _label: 該點真實標籤
:param _row: 該點序號
:param _g: Gram矩陣
:return: 對偶形式計算結果
"""
global b
_wrong = False
temp = 0
for _j in range ( n) :
temp += eta * alpha[ _j] * _label[ _j] * _g[ _j] [ _row]
temp += b
temp *= _label[ _row]
return temp
def update ( _i, _y) :
"""
更新參數
:param _i: 序號
:param _y: 真實標籤
:return: None
"""
global b, alpha
alpha[ _i] += eta
b += eta * _y[ _i]
def main ( ) :
ok = False
G = np. zeros( ( n, n) , dtype= np. int )
for i in range ( 0 , 3 ) :
for j in range ( 0 , 3 ) :
G[ i] [ j] = x[ i] [ 0 ] * x[ j] [ 0 ] + x[ i] [ 1 ] * x[ j] [ 1 ]
while not ok:
for i in range ( n) :
if is_correct( x[ i] , y, i, G) <= 0 :
update( i, y)
print ( alpha, b)
break
elif i == n - 1 :
ok = True
print ( alpha, b)
if __name__ == '__main__' :
main( )
[ 1 0 0 ] 1
[ 1 0 1 ] 0
[ 1 0 2 ] - 1
[ 1 0 3 ] - 2
[ 2 0 3 ] - 1
[ 2 0 4 ] - 2
[ 2 0 5 ] - 3
[ 2 0 5 ] - 3