李航机器学习方法3之感知机

0.参考

机器学习方法,作者:李航
感知机与超平面,作者:GRNovmbrain
浅析感知机(一)–模型与学习策略,作者:忆臻

1.待解决问题

1. w T x + b = 0 中 w T 为什么是约束边界的法向量? w^Tx+b=0中w^T为什么是约束边界的法向量? wTx+b=0wT为什么是约束边界的法向量?
2. 从点到超平面的距离推导出 l o s s f u n c t i o n 。 从点到超平面的距离推导出loss function。 从点到超平面的距离推导出lossfunction

也就是需要首先找到损失函数,然后转化为最优化问题。

1.1需要知道的是

思想:错误驱动
感知机解决的是二分类问题且必须线性可分,输入(特征向量) x ∈ R p x\in \mathbb{R}^p xRp,输出 y = { − 1 , + 1 } y=\{-1,+1\} y={1,+1}
决策函数: f ( x ) = s i g n ( w T x + b ) f(x)=sign(w^Tx+b) f(x)=sign(wTx+b)
s i g n ( a ) = { − 1 , a < 0 + 1 , a ≥ 0 sign(a)=\begin{cases}-1,a<0\\+1,a\geq0\end{cases} sign(a)={1,a<0+1,a0
其中 w w w是weight vector, b b b是bias

图示:在这里插入图片描述

1.2补充:什么是线性可分?

给定一个数据集,如果存在某个超平面 S ( w x + b = 0 ) S(wx+b=0) S(wx+b=0),能够将数据集的正实例点和负实例点完全正确的划分到超平面的两侧,即对 y = + 1 y=+1 y=+1的实例点,有 w x + b > 0 wx+b>0 wx+b>0,对 y = − 1 y=-1 y=1的实例点,有 w x + b ≤ 0 wx+b\leq0 wx+b0,则称数据集线性可分,否则线性不可分。

2.一些问题

2.1 w ⃗ \vec w w 是超平面的法向量?

如图在 w T + b = 0 w^T+b=0 wT+b=0上任意取两个点 x 1 , x 2 x_1,x_2 x1,x2
在这里插入图片描述

即得: { w T x 1 + b = 0 w T x 2 + b = 0 → w T ( x 1 − x 2 ) = 0 \begin{cases}w^Tx_1+b=0 \\ w^Tx_2+b=0\end{cases}\rightarrow w^T(x_1-x_2)=0 {wTx1+b=0wTx2+b=0wT(x1x2)=0
即得: w ⃗ ⋅ ( x 1 − x 2 ) ⃗ = 0 → w ⃗ ⊥ ( x 1 − x 2 ) ⃗ \vec w \cdot \vec{(x_1-x_2)}=0 \rightarrow \vec w \bot \vec{(x_1-x_2)} w (x1x2) =0w (x1x2)
所以得到如下图所示:在这里插入图片描述
所以可以推导出 w ⃗ \vec w w 是超平面的法向量。

2.2从点到超平面的距离 → \rightarrow Loss Function

预备知识:点到平面的距离怎么求?
设点为 P P P,在平面上任取一点 A A A,距离就等于 P A ⃗ \vec {PA} PA 往单位法向量上的投影,如图所示:在这里插入图片描述
∣ P Q ∣ = P A ⃗ 在 n ⃗ ( 法向量 ) 的投影 = ∣ P A ⃗ ⋅ n ⃗ ∣ ∣ n ⃗ ∣ |PQ|=\vec{PA}在\vec{n}(法向量)的投影=\frac{|\vec{PA}\cdot\vec{n}|}{|\vec n|} PQ=PA n (法向量)的投影=n PA n ,分子是绝对值,分母是模。

回到问题:求d?
w T x + b = 0 w^Tx+b=0 wTx+b=0上,任取一点 x ′ x^{'} x,则 d = ∣ w T ⋅ ( x − x ′ ) ∣ ∣ ∣ w ∣ ∣ 2 d=\frac{|w^T\cdot (x-x^{'})|}{||w||_2} d=∣∣w2wT(xx),这里 w w w L 2 L2 L2范式就是模长。

{ w T x ′ + b = 0 → b = − w T x ′ d = ∣ w T ⋅ ( x − x ′ ) ∣ ∣ ∣ w ∣ ∣ 2 = ∣ w T x − w T x ′ ∣ ∣ ∣ w ∣ ∣ 2 = ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ 2 \begin{cases} w^Tx^{'}+b=0\rightarrow b=-w^Tx^{'}\\d=\frac{|w^T\cdot (x-x^{'})|}{||w||_2}=\frac{|w^Tx-w^Tx^{'}|}{||w||_2}=\frac{|w^Tx+b|}{||w||_2} \end{cases} {wTx+b=0b=wTxd=∣∣w2wT(xx)=∣∣w2wTxwTx=∣∣w2wTx+b
至此,距离的表达式就推导出来了。

3.loss function推导

很自然的会想到用误分类点的数目来作为损失函数,是误分类点个数越来越少,最终全部分对就可以了,建立如下所示的loss function(这样的损失函数并不是w,b连续可导(无法用可导函数形式来表达出误分类点的个数),无法进行优化。):
l ( w , b ) = ∑ i = 1 N I ( y i ( w T x i + b ) < 0 ) l(w,b)=\sum_{i=1}^N I(y_i(w^Tx_i+b) < 0) l(w,b)=i=1NI(yi(wTxi+b)<0)
对于指示函数的由来:考虑正确分类 ( w T x i + b ) > 0 , y i = + 1 (w^Tx_i+b)>0,y_i=+1 (wTxi+b)>0,yi=+1 y w T x i + b ) < 0 , y i = − 1 yw^Tx_i+b)<0,y_i=-1 ywTxi+b)<0,yi=1,得到正确的 y i ( w T x i + b ) > 0 y_i(w^Tx_i+b)>0 yi(wTxi+b)>0,反之小于0就是错误分类
这个式子的推导过程:
首先思考如果分类错误:
f ( x i ) = s i g n ( w T x i + b ) = + 1 f(x_i)=sign(w^Tx_i+b)=+1 f(xi)=sign(wTxi+b)=+1,而 y i = − 1 y_i=-1 yi=1,所以 w T x i + b > 0 w^Tx_i+b>0 wTxi+b>0,即 y i ( w T x i + b ) < 0 y_i(w^Tx_i+b)<0 yi(wTxi+b)<0
f ( x i ) = s i g n ( w T x i + b ) = − 1 f(x_i)=sign(w^Tx_i+b)=-1 f(xi)=sign(wTxi+b)=1,而 y i = + 1 y_i=+1 yi=+1,所以 w T x i + b < 0 w^Tx_i+b<0 wTxi+b<0,即 y i ( w T x i + b ) < 0 y_i(w^Tx_i+b)<0 yi(wTxi+b)<0
所以可以将这两类情况统一起来,即分错就是 y i ( w T x i + b ) < 0 y_i(w^Tx_i+b)<0 yi(wTxi+b)<0,最后得到 l ( w , b ) = ∑ i = 1 N I ( y i ( w T x i + b ) < 0 ) l(w,b)=\sum_{i=1}^N I(y_i(w^Tx_i+b) < 0) l(w,b)=i=1NI(yi(wTxi+b)<0) I I I为指示函数不可导(原因就是w变化,I就会从0变到1或者1变到0),所以需要将它换一种形式,转变为点到超平面的距离,即: L ( w , b ) = ∑ x i ∈ M ∣ w T x + b ∣ ∣ ∣ w ∣ ∣ 2 L(w,b)=\sum_{x_i \in M}\frac{|w^Tx+b|}{||w||_2} L(w,b)=xiM∣∣w2wTx+b M M M是所有误分类点的集合,后面是距离和。
进一步,因为 ∣ w T x + b ∣ |w^Tx+b| wTx+b还是有点不可导,所以由误分类的点都有 y i ( w T x i + b ) < 0 y_i(w^Tx_i+b)<0 yi(wTxi+b)<0,且 y i = − 1 , + 1 y_i={-1,+1} yi=1,+1,不影响数值,所以就可以将绝对值去掉,再往前面加个负号,让距离变成正数,即实现了最终的loss function: L ( w , b ) = ∑ x i ∈ M − y i ( w T x i + b ) ∣ ∣ w ∣ ∣ 2 L(w,b)=\sum_{x_i \in M}\frac{-y_i(w^Tx_i+b)}{||w||_2} L(w,b)=xiM∣∣w2yi(wTxi+b)

4.学习策略(最优化)

梯度下降(用的SGD)
m i n L ( w , b ) = m i n ∑ x i ∈ M − y i ( w T x i + b ) ∣ ∣ w ∣ ∣ 2 ∝ m i n − ∑ x i ∈ M y i ( w T x i + b ) min L(w,b)=min \sum_{x_i \in M}\frac{-y_i(w^Tx_i+b)}{||w||_2} \propto min -\sum_{x_i \in M}y_i(w^Tx_i+b) minL(w,b)=minxiM∣∣w2yi(wTxi+b)minxiMyi(wTxi+b)
这里最终的loss变成了 L ( w , b ) = ∑ x i ∈ M − y i ( w T x i + b ) L(w,b)=\sum_{x_i \in M}-y_i(w^Tx_i+b) L(w,b)=xiMyi(wTxi+b)
{ ∇ w L ( w , b ) = − ∑ y i x i ∇ b L ( w , b ) = − ∑ y i \begin{cases}\nabla_w L(w,b)=-\sum y_ix_i \\ \nabla_b L(w,b)=-\sum y_i\end{cases} {wL(w,b)=yixibL(w,b)=yi
对每个误分类 ( x i , y i ) (x_i,y_i) (xi,yi) w , b w,b w,b更新, w ← w + ∑ x i ∈ M y i x i ⋅ η w \leftarrow w+\sum_{x_i \in M}y_ix_i\cdot \eta ww+xiMyixiη b ← b + ∑ x i ∈ M y i ⋅ η b \leftarrow b+\sum_{x_i \in M}y_i\cdot \eta bb+xiMyiη

为什么用SGD?
1.因为偏导为0,不一定是全局极值点,但全局极值点的偏导一定为0。
2.计算过于复杂(有可能要求逆矩阵)。
3.偏导=0没有解析解。

5.遗留问题,最终loss function为什么舍去 1 ∣ ∣ w ∣ ∣ 2 \frac{1}{||w||_2} ∣∣w21?

感知机的任务是进行二分类工作,它最终并不关心得到的超平面离各点的距离有多少(所以我们最后才可以不考虑 w w w的范式),只是关心最后是否已经分类正确(也就是考虑误分类点的个数),比如说下面两条线,对于感知机来说,效果任务是一样的。
请添加图片描述

6.感知机的实现代码

代码一:

train_set = [[(3, 3), 1], [(4, 3), 1], [(1, 1), -1]]
# 初始化w参数
w = [0, 0]
# 初始化b参数
b = 0
# 学习率
n = 1

# 数据格式测试
# item = train_set[0]
# s1 = item[1]*item[0][0]
# s2 = 1* item[1]*item[0][0]
# print(s1, s2)

# 更新参数
def update(item):
    global w,b
    # w更新
    for i in range(len(w)):
        w[i] += n * item[1] * item[0][i]
    # b更新
    b += n * item[1]
    print('w = ', w, 'b = ', b)


# 判断yi*(w*xi+b),来说明是否误判
def judge(item):
    
    res = 0
    # 其实用numpy更好
    # w*x
    for i in range(len(w)):
        res += item[0][i] * w[i]
    # w*x+b
    res += b
    # y*(w*x+b)
    res *= item[1]
    return res

def check():
    flag = False
    for item in train_set:
        # 判断是否误分
        if judge(item) <= 0:
            # True就是误分类
            flag = True
            update(item)
    return flag

if __name__ == '__main__':
    flag = False
    count = 1000
    for i in range(count):
        if not check():  # 假如分类正确,跳出当前,进行下一次
            flag = True
            break
    if flag:
        print("分对了")
    else:
        print('没分对')

结果:

w =  [3, 3] b =  1
w =  [2, 2] b =  0
w =  [1, 1] b =  -1
w =  [0, 0] b =  -2
w =  [3, 3] b =  -1
w =  [2, 2] b =  -2
w =  [1, 1] b =  -3

代码二:
jupyter文件链接

# 1.必要的包
import pandas as pd  # 读取数据集
from sklearn.datasets import load_iris  # 用到鸢尾花数据集,注意它是3个种类,所以后面要处理一下
import numpy as np
import matplotlib.pyplot as plt  # 画图用

# 2.加载数据
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df.head(5)   # 查看前5行数据
df['label'] = iris.target
df.head(5)
# 去掉特征名的单位
df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']

# 3.画出原始数据离散图
# 这里用前50个,是因为我们已知数据是这样分布的,0-100才是线性可分的,不能用100-150
plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')
plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.title('orignal data')
plt.legend()
plt.show()

# 在这里我们只保留sepal两个属性,petal舍去,只做简单的线性模型
data = np.array(df.iloc[:100, [0, 1, -1]])  # 另外加上标签项 -1
X, y = data[:, :-1], data[:, -1]  # 再从data中分离出属性和标签

X, y

y = [1 if i== 1 else -1 for i in y]  # 变成感知机所需要的-1和1两种
# y = np.array(y, dtype=X[0][0].dtype)
# 测试一下
np.zeros(len(X[0]), dtype=X[0][0].dtype)

# 4.建立感知机模型
class Model:
    def __init__(self) -> None:
        # 初始化w和b
        self.w = np.zeros(len(X[0]), dtype=X[0][0].dtype)  # w
        self.b = 0  # b
        self.l_rate = 0.1  # 学习率


    # 判断yi*(w*xi+b),来说明是否误判
    def judge(self, x, w, b, y):
        # y*(w*x+b)
        res = np.dot(x, w) + b
        res *= y
        # print('1: ', res)
        return res

    # 更新参数
    def update(self, x, y):
        # w更新
        self.w = self.w + self.l_rate * np.dot(y, x)
        # b更新
        self.b = self.b + self.l_rate * y

    def fit(self, X_train, y_train):
        wrong_flag = False
        while not wrong_flag:
            wrong_count = 0
            for i in range(len(X_train)):
                X, y = X_train[i], y_train[i]

                if self.judge(X, self.w, self.b, y) <= 0:
                    # 说明误分类了,需要更新参数w,b
                    self.update(X, y)
                    wrong_count += 1
            if wrong_count == 0:
                wrong_flag = True
        return 'Perceptron Model'

perceptron = Model()
perceptron.fit(X, y)

perceptron.w, perceptron.b

# 5.训练结果
# 先画线
x_points = np.linspace(4, 7, 10)
y_ = -(perceptron.w[0] * x_points + perceptron.b) / perceptron.w[1]
plt.plot(x_points, y_)
plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.title('result')
plt.legend()
plt.show()

7.收敛证明

我们需要证明经过有限次迭代可以得到一个将训练数据集完全正确划分的分离超平面及感知机模型。
首先将 b b b并入权重向量 w w w,记为: w ^ = ( w T , b ) T , x ^ = ( x T , 1 ) T , x ^ ∈ R n + 1 , w ^ ∈ R n + 1 , w ^ ⋅ x ^ = w ⋅ x + b \hat w = (w^T, b)^T, \hat x = (x^T, 1)^T, \hat x \in \mathbb{R}^{n+1},\hat w\in \mathbb{R}^{n+1},\hat w \cdot \hat x = w\cdot x + b w^=(wT,b)T,x^=(xT,1)T,x^Rn+1,w^Rn+1,w^x^=wx+b,设训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) , } T=\{(x_1, y_1), (x_2, y_2),...,(x_n, y_n),\} T={(x1,y1),(x2,y2),...,(xn,yn),}是线性可分的,则下面两个定理成立(感知机收敛定理):
(1)存在满足条件 ∣ ∣ w ^ o p t ∣ ∣ = 1 ||\hat w_{opt}||=1 ∣∣w^opt∣∣=1的超平面 w ^ o p t = w o p t ⋅ x + b o p t = 0 \hat w_{opt}=w_{opt}\cdot x + b_{opt}=0 w^opt=woptx+bopt=0;且存在 γ \gamma γ,对所有 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 ) ≥ γ y_i(\hat w_{opt} \cdot \hat x_i)=y_i(w_{opt} \cdot x_i + b_{opt}) \geq \gamma yi(w^optx^i)=yi(woptxi+bopt)γ
(2)令 R = m a x 1 ≤ i ≤ N ∣ ∣ x ^ i ∣ ∣ R=max_{1 \leq i \leq N} ||\hat x_i|| R=max1iN∣∣x^i∣∣,感知机算法在训练集的误分类次数 k k k满足不等式, k ≤ ( R γ ) 2 k \leq \left(\frac{R}{\gamma}\right)^2 k(γR)2

定理一的证明:

由线性可分,存在超平面 w ^ o p t = w o p t ⋅ x + b o p t = 0 \hat w_{opt}=w_{opt}\cdot x + b_{opt}=0 w^opt=woptx+bopt=0使得 ∣ ∣ w ^ o p t ∣ ∣ = 1 ||\hat w_{opt}||=1 ∣∣w^opt∣∣=1(当 ∣ ∣ w ^ o p t ∣ ∣ ||\hat w_{opt}|| ∣∣w^opt∣∣为任意值时,都可以使得 w o p t ⋅ x + b o p t = 0 w_{opt} \cdot x + b_{opt}=0 woptx+bopt=0 w o p t 与 b o p t w_{opt}与b_{opt} woptbopt同时放缩不改变超平面,如 2 x + 2 = 0 和 x + 1 = 0 2x+2=0和x+1=0 2x+2=0x+1=0是同一条直线),由有限个点,均有 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} \cdot \hat x_i)=y_i(w_{opt} \cdot x_i + b_{opt}) >0 yi(w^optx^i)=yi(woptxi+bopt)>0,此时超平面已经确定,将所有的点分对了,所以所有的训练集数据点均满足 y i ( w o p t ⋅ x i + b o p t ) > 0 y_i(w_{opt} \cdot x_i + b_{opt}) >0 yi(woptxi+bopt)>0,那么必然 ∃ r = min ⁡ y i ( w o p t ⋅ x i + b o p t ) ,且 r > 0 \exist r=\min y_i(w_{opt}\cdot x_i+b_{opt}),且r>0 r=minyi(woptxi+bopt),且r>0,则 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} \cdot \hat x_i)=y_i(w_{opt} \cdot x_i + b_{opt}) \geq \gamma yi(w^optx^i)=yi(woptxi+bopt)γ

定理二的证明:

w ^ k − 1 \hat w_{k-1} w^k1是第 k k k个误分类的点(实例)之前的扩充权值向量(就是将b加进去了),即 w ^ k − 1 = ( w k − 1 T , b k − 1 ) T \hat w_{k-1}=\left(w_{k-1}^T, b_{k-1}\right)^T w^k1=(wk1T,bk1)T

现在第 k k k个实例,被误分了,所以它满足: y i ( w ^ k − 1 ⋅ x ^ i ) = y i ( w k − 1 x i + b i − 1 ) ≤ 0 y_i\left(\hat w_{k-1}\cdot \hat x_i\right)=y_i \left(w_{k-1}x_i+b_{i-1}\right)\leq 0 yi(w^k1x^i)=yi(wk1xi+bi1)0,也就是代码里误分的判断条件,所以需要更新参数: { w k ← w k − 1 + η ⋅ y i x i b k ← b k − 1 + η ⋅ y i \begin{cases} w_k \leftarrow w_{k-1}+\eta\cdot y_ix_i \\ b_k \leftarrow b_{k-1}+\eta\cdot y_i \end{cases} {wkwk1+ηyixibkbk1+ηyi则得到一个重要的式子 w ^ k = w ^ k − 1 + η ⋅ y i x ^ i \hat w_k = \hat w_{k-1}+\eta \cdot y_i\hat x_i w^k=w^k1+ηyix^i,这里一定要注意维度。

接下来需要证明两个结论: { ( 1 ) w ^ k ⋅ w ^ o p t ≥ k η γ ( 2 ) ∣ ∣ w ^ k − 1 ∣ ∣ 2 ≤ k η 2 R 2 \begin{cases} (1)\hat w_k \cdot \hat w_{opt}\geq k\eta\gamma \\ (2)||\hat w_{k-1}||^2 \leq k\eta^2R^2 \end{cases} {(1)w^kw^optkηγ(2)∣∣w^k12kη2R2

先证明 ( 1 ) (1) (1) w ^ k ⋅ w ^ o p t = ( w ^ k − 1 + η ⋅ y i x ^ i ) w ^ o p t , 这一步用了上面的式子 w ^ k = w ^ k − 1 + η ⋅ y i x ^ i ≥ w ^ k − 1 ⋅ w ^ o p t + η ⋅ r , 这一步用到了定理 1 : y i ( w ^ o p t ⋅ x ^ i ) ≥ γ \begin{aligned}\hat w_k \cdot \hat w_{opt} &= (\hat w_{k-1}+\eta \cdot y_i\hat x_i)\hat w_{opt},这一步用了上面的式子\hat w_k = \hat w_{k-1}+\eta \cdot y_i\hat x_i \\&\geq \hat w_{k-1}\cdot \hat w_{opt} + \eta \cdot r,这一步用到了定理1:y_i(\hat w_{opt} \cdot \hat x_i) \geq \gamma \end{aligned} w^kw^opt=(w^k1+ηyix^i)w^opt,这一步用了上面的式子w^k=w^k1+ηyix^iw^k1w^opt+ηr,这一步用到了定理1:yi(w^optx^i)γ

至此,得到 w ^ k ⋅ w ^ o p t ≥ w ^ k − 1 ⋅ w ^ o p t + η ⋅ r ≥ w ^ k − 2 ⋅ w ^ o p t + 2 η ⋅ r , 这一步 w ^ k − 1 ⋅ w ^ o p t ≥ w ^ k − 2 ⋅ w ^ o p t + η ⋅ r ≥ ⋯ ≥ k η γ \begin{aligned}\hat w_k \cdot \hat w_{opt} &\geq \hat w_{k-1}\cdot \hat w_{opt} + \eta \cdot r \\&\geq \hat w_{k-2}\cdot \hat w_{opt} + 2\eta \cdot r,这一步\hat w_{k-1}\cdot \hat w_{opt} \geq \hat w_{k-2}\cdot \hat w_{opt} + \eta \cdot r \\& \geq \cdots \\& \geq k\eta\gamma\end{aligned} w^kw^optw^k1w^opt+ηrw^k2w^opt+2ηr,这一步w^k1w^optw^k2w^opt+ηrkηγ

证毕。

再证明(2):

条件: R = max ⁡ 1 ≤ i ≤ N ∣ ∣ x ^ i ∣ ∣ R=\max_{1\leq i \leq N}||\hat x_i|| R=max1iN∣∣x^i∣∣

∣ ∣ w ^ k ∣ ∣ 2 = ∣ ∣ w ^ k − 1 + η y i x ^ i ∣ ∣ 2 = ∣ ∣ w ^ k − 1 ∣ ∣ 2 + 2 η y i w ^ k − 1 x ^ i + η 2 ∣ ∣ y i x ^ i ∣ ∣ 2 , 这一步: 2 η y i w ^ k − 1 x ^ i = C , 所以不需要模长 ≤ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 ∣ ∣ y i x ^ i ∣ ∣ 2 , 这一步是因为我们之前令第 k 个点误分类所以 y i w ^ k − 1 x ^ i < 0 ≤ ∣ ∣ w ^ k − 1 ∣ ∣ 2 + η 2 R 2 , 这一步是因为条件 R = max ⁡ 1 ≤ i ≤ N ∣ ∣ x ^ i ∣ ∣ ≤ ∣ ∣ w ^ k − 2 ∣ ∣ 2 + 2 η 2 R 2 ≤ ⋯ ≤ k η 2 R 2 \begin{aligned}||\hat w_k||^2 &=||\hat w_{k-1}+\eta y_i\hat x_i||^2 \\&=||\hat w_{k-1}||^2+2\eta y_i \hat w_{k-1}\hat x_i+\eta^2||y_i\hat x_i||^2,这一步:2\eta y_i \hat w_{k-1}\hat x_i=C,所以不需要模长 \\ &\leq ||\hat w_{k-1}||^2+\eta^2||y_i\hat x_i||^2,这一步是因为我们之前令第k个点误分类所以y_i \hat w_{k-1}\hat x_i < 0\\ &\leq ||\hat w_{k-1}||^2+\eta^2 R^2,这一步是因为条件R=\max_{1\leq i \leq N}||\hat x_i||\\ &\leq ||\hat w_{k-2}||^2+2\eta^2 R^2\\ &\leq \cdots \\ &\leq k\eta^2R^2\end{aligned} ∣∣w^k2=∣∣w^k1+ηyix^i2=∣∣w^k12+2ηyiw^k1x^i+η2∣∣yix^i2,这一步:2ηyiw^k1x^i=C,所以不需要模长∣∣w^k12+η2∣∣yix^i2,这一步是因为我们之前令第k个点误分类所以yiw^k1x^i<0∣∣w^k12+η2R2,这一步是因为条件R=1iNmax∣∣x^i∣∣∣∣w^k22+2η2R2kη2R2

最后由两个结论: { ( 1 ) w ^ k ⋅ w ^ o p t ≥ k η γ ( 2 ) ∣ ∣ w ^ k − 1 ∣ ∣ 2 ≤ k η 2 R 2 \begin{cases} (1)\hat w_k \cdot \hat w_{opt}\geq k\eta\gamma \\ (2)||\hat w_{k-1}||^2 \leq k\eta^2R^2 \end{cases} {(1)w^kw^optkηγ(2)∣∣w^k12kη2R2得: k η γ ≤ w ^ k w ^ o p t ≤ ∣ ∣ w ^ k ∣ ∣ ⋅ ∣ ∣ w ^ o p t ∣ ∣ ≤ k η R k\eta\gamma \leq \hat w_k \hat w_{opt}\leq ||\hat w_k||\cdot ||\hat w_{opt}|| \leq \sqrt{k}\eta R kηγw^kw^opt∣∣w^k∣∣∣∣w^opt∣∣k ηR,第二个 ≤ \leq a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ⋅ ∣ b ⃗ ∣ cos ⁡ θ ≤ ∣ a ⃗ ∣ ⋅ ∣ b ⃗ ∣ \vec{a}\cdot\vec{b}=|\vec{a}|\cdot|\vec{b}|\cos\theta\leq |\vec{a}|\cdot|\vec{b}| a b =a b cosθa b ,第三个 ≤ \leq 是定理1条件 ∣ ∣ w ^ o p t ∣ ∣ = 1 ||\hat w_{opt}||=1 ∣∣w^opt∣∣=1,即 k η γ ≤ k η R → k γ 2 ≤ R 2 → k ≤ ( R γ ) 2 k\eta \gamma \leq \sqrt{k}\eta R \rightarrow k\gamma^2 \leq R^2 \rightarrow k \leq \left(\frac{R}{\gamma}\right)^2 kηγk ηRkγ2R2k(γR)2,

至此,即证 k k k有上界,为有限集。

8.对偶

根据查阅资料,普遍的观点是以下俩点:

1.从对偶形式学习算法过程可以看出,样本点的特征向量以内积的形式存在于感知机对偶形式的训练算法中,凡是涉及到矩阵,向量内积的运算量就非常大(现实中特征维度很高),这里我们如果事先计算好所有的内积,存储于Gram矩阵中,以后碰到更新的点,直接从Gram矩阵中查找即可,相当于我就初始化运算一遍Gram矩阵,以后都是查询,大大加快了计算速度。

2.跟SVM的对偶形式其实有类似之处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值