感知机(perceptron)是Rosenblatt在60年代提出的第一个机器学习模型。尽管比较简单,而且有局限性,但它是后续学习“支持向量机”的基础。本章有两个值得注意的地方:一是对偶形式的理解,二是算法收敛性的理解,这些地方都能和“支持向量机”联系起来。

一、模型的数学形式与图像表示

  1. 数学形式
    感知机模型非常简单,输入空间(特征空间) 为 X⊆Rn,\mathscr{X} \subseteq R^{n},X⊆Rn, 输出空间为 Y={+1,−1}\mathscr{Y}=\{+1,-1\}Y={+1,−1}
    决策函数为 f(x)=sign⁡(w⋅x+b),f(x)=\operatorname{sign}(w \cdot x+b),f(x)=sign(w⋅x+b), 其中 w∈Rn,bw \in R^{n}, \quad bw∈Rn,b 为常数
    符号函数 sign⁡(x)={+1,x⩾0−1,x<0\operatorname{sign}(x)=\left\{\begin{array}{ll}+1, & x \geqslant 0 \\ -1, & x<0\end{array}\right.sign(x)={+1,−1,​x⩾0x<0​
  2. 图像表示

上图为 X⊆R2\mathscr{X} \subseteq R^{2}X⊆R2 时的模型图像。图中的直线为 w⋅x+b=0w \cdot x+b=0w⋅x+b=0, 即 w1x(1)+w2x(2)+b=0w_{1} x^{(1)}+w_{2} x^{(2)}+b=0w1​x(1)+w2​x(2)+b=0 。注意不要和直线函数 y=ax+b\mathrm{y}=\mathrm{ax}+\mathrm{b}y=ax+b 混淆, ,,, 因为上图是三维图像在二 维平面上的表示,其输出为离散值, 因此用 “圆点” 和 “交叉” 表示。

感知机的作用是在输入空间中找到一个 “分离超平面" (在上图退化为直线wX+b=0wX+b=0wX+b=0),将 “线性 可分” 数据集一分为二,此超平面又称 “分界面”

下面看看如何表示输入空间中任一点 x0x_{0}x0​ 到超平面 w⋅x+b=0w \cdot x+b=0w⋅x+b=0 的距离:

先看输入空间为平面的情况, 其中点 x0x_{0}x0​ 位于直线法向量 www 的另一侧(图中红点),设 x0x_{0}x0​ 在 直线上的投影为 x,∥x0−x∥x, \quad\left\|x_{0}-x\right\|x,∥x0​−x∥ 记作 DDD

x0=x−Dw∥w∥,x_{0}=x-D \frac{w}{\|w\|},x0​=x−D∥w∥w​, 两边同时点乘www

w⋅x0=w⋅x−Dw⋅w∥w∥=w⋅x−D∥w∥2∥w∥,w \cdot x_{0}=w \cdot x-D \frac{w \cdot w}{\|w\|}=w \cdot x-D \frac{\|w\|^{2}}{\|w\|},w⋅x0​=w⋅x−D∥w∥w⋅w​=w⋅x−D∥w∥∥w∥2​, 由于 w⋅x+b=0w \cdot x+b=0w⋅x+b=0

w⋅x0+b=−D∥w∥w \cdot x_{0}+b=-D\|w\| \quadw⋅x0​+b=−D∥w∥ 即 D=−w⋅x0+b∥w∥D=-\frac{w \cdot x_{0}+b}{\|w\|}D=−∥w∥w⋅x0​+b​

因此图中 x=(0,0)Tx=(0,0)^{T}x=(0,0)T 到 w⋅x+b=0w \cdot x+b=0w⋅x+b=0 的距离为 D0=−b∥w∥D_{0}=-\frac{b}{\|w\|}D0​=−∥w∥b​

在不考虑点与法向量位置的情况下, 也可以记作 D=∣w⋅x0+b∣∥w∥D=\frac{\left|w \cdot x_{0}+b\right|}{\|w\|}D=∥w∥∣w⋅x0​+b∣​

  1. 线性可分与线性不可分

以上述二维的输入空间为例,线性可分的数据集是十分罕见的,只要稍微加入一个“异常点”,例如图中的红色“圆点”,就无法用线性模型进行分类了。

更有甚者,不同类型的点以椭圆或三次曲线为边界都是有可能的,这样的数据集都是“非线性可分的”。

对于非线性可分数据集的分类问题,我们在第7章“支持向量机(SVM)”进行深入讨论。

二、策略与算法

  1. 风险函数

如何验证样本点 (xi,yi)\left(x_{i}, y_{i}\right)(xi​,yi​) 是否分类正确? 对于某分离超平面 w⋅x+b=0w \cdot x+b=0w⋅x+b=0
分类正确: yi(w⋅xi+b)>0\quad y_{i}\left(w \cdot x_{i}+b\right)>0yi​(w⋅xi​+b)>0

设超平面S的误分类点集合为M,则误分类点到超平面的总距离为(误分类点需增加负号表示距 离 )−1∥w∥∑xi∈Myi(w⋅xi+b),)-\frac{1}{\|w\|} \sum_{x_{i} \in M} y_{i}\left(w \cdot x_{i}+b\right),)−∥w∥1​∑xi​∈M​yi​(w⋅xi​+b), 我们的目标是使得误分类点总距离最小, 由于 ∥w∥\|w\|∥w∥ 为常 数, 对求最小值没有影响, 因此不考虑 1∥w∥\frac{1}{\|w\|}∥w∥1​

于是将感知机 “经验风险函数" \quad 定义为 L(w,b)=−∑xi∈Myi(w⋅xi+b)\quad L(w, b)=-\sum_{x_{i} \in M} y_{i}\left(w \cdot x_{i}+b\right)L(w,b)=−∑xi​∈M​yi​(w⋅xi​+b)

  1. 算法 Nabla算子

∇=(∂∂x,∂∂y,∂∂z)T,\nabla=\left(\frac{\partial}{\partial x}, \frac{\partial}{\partial y}, \frac{\partial}{\partial z}\right)^{T},∇=(∂x∂​,∂y∂​,∂z∂​)T, 相当于求 “梯度”

∇w=∂∂w∇b=∂∂b\nabla_{w}=\frac{\partial}{\partial w} \nabla_{b}=\frac{\partial}{\partial b}∇w​=∂w∂​∇b​=∂b∂​

注意: 由于 w∈Rn,w \in R^{n},w∈Rn, 因此

∇w=∂∂w=(∂∂w1,∂∂w2,…∂∂wn)T\nabla_{w}=\frac{\partial}{\partial w}=\left(\frac{\partial}{\partial w_{1}}, \frac{\partial}{\partial w_{2}}, \ldots \frac{\partial}{\partial w_{n}}\right)^{T}∇w​=∂w∂​=(∂w1​∂​,∂w2​∂​,…∂wn​∂​)T

设误分类点的集合M固定, 经验风险函数的梯度为

∇wL(w,b)=−∑xi∈Myixi\nabla_{w} L(w, b)=-\sum_{x_{i} \in M} y_{i} x_{i}∇w​L(w,b)=−∑xi​∈M​yi​xi​

∇bL(w,b)=−∑xi∈Myi\nabla_{b} L(w, b)=-\sum_{x_{i} \in M} y_{i}∇b​L(w,b)=−∑xi​∈M​yi​

算法的原始形式

对于训练集T, 输入空间 (特征空间) 为 X⊆Rn,\mathscr{X} \subseteq R^{n},X⊆Rn, 输出空间为 Y={+1,−1}\mathscr{Y}=\{+1,-1\}Y={+1,−1}, 学习率 为 η(0≤η≤1),\eta(0 \leq \eta \leq 1),η(0≤η≤1), 感知机模型 f(x)=sign⁡(w⋅x+b)f(x)=\operatorname{sign}(w \cdot x+b)f(x)=sign(w⋅x+b)

(1) 选取初值 w0,b0w_{0}, b_{0}w0​,b0​
(2) 在训练集中选取一个数据 (xi,yi)\left(x_{i}, y_{i}\right)(xi​,yi​)
(3) 如果 yi(w⋅xi+b)≤0,y_{i}\left(w \cdot x_{i}+b\right) \leq 0,yi​(w⋅xi​+b)≤0, 即分类错误, 则将参数更新为
w←w+ηyixib←b+ηyi\begin{array}{c} w \leftarrow w+\eta y_{i} x_{i} \\ b \leftarrow b+\eta y_{i} \end{array} w←w+ηyi​xi​b←b+ηyi​​
(4) 转至 (2) 直至训练集中没有误分类点

算法的对偶形式
关于为什么要有对偶形式可以参考:如何理解感知机学习算法的对偶形式?希望能解答大家疑惑。

对偶形式的目的是,将参数 w和b 表示为 xix_{i}xi​ 和 yiy_{i}yi​ 的线性组合, 即
w=∑i=1Nαiyixib=∑i=1Nαiyi\begin{aligned} w &=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ b &=\sum_{i=1}^{N} \alpha_{i} y_{i} \end{aligned} wb​=i=1∑N​αi​yi​xi​=i=1∑N​αi​yi​​
注意(关于对偶形式的理解):

此时参数 www 和 b(b\left(\right.b( 共n+1个变量) 被 α1,α2,…αN(\alpha_{1}, \alpha_{2}, \ldots \alpha_{N} \quad(α1​,α2​,…αN​( 共N个变量) 取代。当n+1>N时, 对 偶模型的复杂度变低了,实现了对 “参数空间” 的降维。

另外, 在SVM中 α\alphaα 是参数 www 和 bbb 的约束条件, 如果建立起 α\alphaα 与参数 www 和 bbb 的线性关系, 则可以将多重极值转化为单重极值求解。这可以说是SVM的关键一步。

感知机的对偶模型: f(x)=sign⁡(∑j=1Nαiyixi⋅x+b)\quad f(x)=\operatorname{sign}\left(\sum_{j=1}^{N} \alpha_{i} y_{i} x_{i} \cdot x+b\right)f(x)=sign(∑j=1N​αi​yi​xi​⋅x+b)

步骤:

(1) α←0,b←0\quad \alpha \leftarrow 0, \quad b \leftarrow 0α←0,b←0 即 α1,α2,…αN\alpha_{1}, \alpha_{2}, \ldots \alpha_{N}α1​,α2​,…αN​ 均为0

(2) 在训练集中选取数据 (xi,yi)\left(x_{i}, y_{i}\right)(xi​,yi​)

(3) 如果 yi(∑j=1Nαiyixi⋅xj+b)≤0,y_{i}\left(\sum_{j=1}^{N} \alpha_{i} y_{i} x_{i} \cdot x_{j}+b\right) \leq 0,yi​(∑j=1N​αi​yi​xi​⋅xj​+b)≤0, 或 yi[∑j=1Nαiyi(xi⋅xj+1)]≤0y_{i}\left[\sum_{j=1}^{N} \alpha_{i} y_{i}\left(x_{i} \cdot x_{j}+1\right)\right] \leq 0yi​[∑j=1N​αi​yi​(xi​⋅xj​+1)]≤0
其中 xi⋅xjx_{i} \cdot x_{j}xi​⋅xj​ 为一个实数, 可预先在Gram矩阵中算好 (对应 GijG_{i j}Gij​ ) 。因此判别式至取决于
α1,α2,…αN\alpha_{1}, \alpha_{2}, \ldots \alpha_{N}α1​,α2​,…αN​
通过上述判别式发现训练集中第i个点为 “误分类" ,则更新对应的系数 αi\alpha_{i}αi​
αi←αi+ηb←b+ηyi\begin{array}{l} \alpha_{i} \leftarrow \alpha_{i}+\eta \\ b \leftarrow b+\eta y_{i} \end{array} αi​←αi​+ηb←b+ηyi​​
(4) 转至 (2) 直到没有误分类点

(5) 求w 和 b,\mathrm{b},b, 得到原始模型 f(x)=sign⁡(w⋅x+b)f(x)=\operatorname{sign}(w \cdot x+b)f(x)=sign(w⋅x+b)
w=∑i=1Nαiyixib=∑i=1Nαiyi\begin{aligned} w &=\sum_{i=1}^{N} \alpha_{i} y_{i} x_{i} \\ b &=\sum_{i=1}^{N} \alpha_{i} y_{i} \end{aligned} wb​=i=1∑N​αi​yi​xi​=i=1∑N​αi​yi​​

三、算法收签性

书中定理2.1(Novikoff) 证明了“线性可分" 数据集在感知机算法作用下的收剑性, 书中已给出 十分详细的推导过程。我们看看如何理解最后的结论:

k≤(Rγ)2k \leq\left(\frac{R}{\gamma}\right)^{2}k≤(γR​)2
其中, kkk 为误分类次数, 即感知机算法的迭代次数。上式给出了迭代次数的上界。

γ\gammaγ 和 RRR 表示什么?

γ=min⁡i{yi(wopt⋅xi+bopt)},\gamma=\min _{i}\left\{y_{i}\left(w_{o p t} \cdot x_{i}+b_{o p t}\right)\right\},γ=mini​{yi​(wopt​⋅xi​+bopt​)}, 由于 wopt⋅x+bopt=0w_{o p t} \cdot x+b_{o p t}=0wopt​⋅x+bopt​=0 为已知 “分界面” ,,,

因此yi(wopt⋅xi+bopt)=∣wopt⋅xi+bopt∣=∣wopt⋅xi+bopt∣∥wopt∥,y_{i}\left(w_{o p t} \cdot x_{i}+b_{o p t}\right)=\left|w_{o p t} \cdot x_{i}+b_{o p t}\right|=\frac{\left|w_{o p t} \cdot x_{i}+b_{o p t}\right|}{\left\|w_{o p t}\right\|},yi​(wopt​⋅xi​+bopt​)=∣wopt​⋅xi​+bopt​∣=∥wopt​∥∣wopt​⋅xi​+bopt​∣​, 根据点到超平面的距
离公式, γ\quad \gammaγ 实际上是数据点 xix_{i}xi​ 到 “分界面" 的最短距离。

R=max⁡1≤i≤N∥x^i∥,R=\max _{1 \leq i \leq N}\left\|\hat{x}_{i}\right\|,R=max1≤i≤N​∥x^i​∥, 表示离原点最远的数据点 xix_{i}xi​ 的距离。

RRR 表示数据越分散, 找到 “分界面" 的难度越大, 需要的迭代次数就越多; 而 γ\gammaγ 则表示, 离 “分界面” 最近的点对于迭代次数影响最大, 也就是数据集里最重要的点, 此结论推广后形成了 “支持向量” 的概念。

四、code实例

拿出 iris 数据集中两个分类的数据和[sepal length,sepal width]作为特征

import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
%matplotlib inline# load data
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.targetdf.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label'
]
df.label.value_counts()
'''
2    50
1    50
0    50
Name: label, dtype: int64
'''

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.legend()

data = np.array(df.iloc[:100, [0, 1, -1]])X, y = data[:,:-1], data[:,-1]y = np.array([1 if i == 1 else -1 for i in y])

感知机


# 数据线性可分,二分类数据
# 此处为一元一次线性方程
class Model:def __init__(self):self.w = np.ones(len(data[0]) - 1, dtype=np.float32)self.b = 0self.l_rate = 0.1# self.data = datadef sign(self, x, w, b):y = np.dot(x, w) + breturn y# 随机梯度下降法def fit(self, X_train, y_train):is_wrong = Falsewhile not is_wrong:wrong_count = 0for d in range(len(X_train)):X = X_train[d]y = y_train[d]if y * self.sign(X, self.w, self.b) <= 0:self.w = self.w + self.l_rate * np.dot(y, X)self.b = self.b + self.l_rate * ywrong_count += 1if wrong_count == 0:is_wrong = Truereturn 'Perceptron Model!'def score(self):pass
perceptron = Model()
perceptron.fit(X, y)
#'Perceptron Model!'
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.legend()

scikit-learn 实例

from sklearn.linear_model import Perceptronclf = Perceptron(fit_intercept=False, max_iter=1000, shuffle=False)
clf.fit(X, y)
'''
Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,fit_intercept=False, max_iter=1000, n_iter_no_change=5, n_jobs=None,penalty=None, random_state=0, shuffle=False, tol=0.001,validation_fraction=0.1, verbose=0, warm_start=False)
'''
# Weights assigned to the features.
print(clf.coef_)
#[[ 16.3 -24.2]]# 截距 Constants in decision function.
print(clf.intercept_)
#[0.]
x_ponits = np.arange(4, 8)
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, 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.legend()

习题

习题2.1
 Minsky 与 Papert 指出:感知机因为是线性模型,所以不能表示复杂的函数,如异或 (XOR)。验证感知机为什么不能表示异或。

解答:

对于异或函数XOR,全部的输入与对应的输出如下:

x(1)x(2)y11−11−11−111−1−1−1\begin{array}{|c|c|c|} \hline \mathrm{x}^{(1)} & \mathrm{x}^{(2)} & \mathrm{y} \\ \hline 1 & 1 & -1 \\ \hline 1 & -1 & 1 \\ \hline-1 & 1 & 1 \\ \hline-1 & -1 & -1 \\ \hline \end{array}x(1)11−1−1​x(2)1−11−1​y−111−1​​

import matplotlib.pyplot as plt
import numpy as np
import pandas as pdx1 = [1, 1, -1, -1]
x2 = [1, -1, 1, -1]
y = [-1, 1, 1, -1]
x1 = np.array(x1)
x2 = np.array(x2)
y = np.array(y)
data = np.c_[x1, x2, y]
data = pd.DataFrame(data, index=None, columns=['x1', 'x2', 'y'])
data.head()positive = data.loc[data['y'] == 1]
negative = data.loc[data['y'] == -1]plt.xlim(-2, 2)
plt.ylim(-2, 2)
plt.xticks([-2, -1, 0, 1, 2])
plt.yticks([-2, -1, 0, 1, 2])
plt.xlabel("x1")
plt.ylabel("x2")
plt.plot(positive['x1'], positive['x2'], "ro")
plt.plot(negative['x1'], negative['x2'], "gx")
plt.show()


显然感知机无法使用一条直线将两类样本划分,异或问题是线性不可分的。

习题2.2
  模仿例题 2.1,构建从训练数据求解感知机模型的例子

from sklearn.linear_model import Perceptron
import numpy as npX_train = np.array([[3, 3], [4, 3], [1, 1]])
y = np.array([1, 1, -1])perceptron_model = Perceptron()
perceptron_model.fit(X_train, y)
print("w:", perceptron_model.coef_, "\nb:", perceptron_model.intercept_, "\n")result = perceptron_model.predict(X_train)
print(result)
'''
w: [[1. 0.]]
b: [-2.] [ 1  1 -1]
'''

习题2.3

证明以下定理:样本集线性可分的充分必要条件是正实例点所构成的凸壳与负实例点所构成的凸壳互不相交。

解答:

  • 第1步:首先给出凸壳与线性可分的定义,定义如下:

凸壳

定义1:设集合S ⊂Rn,\subset \mathrm{R}^{\mathrm{n}},⊂Rn, 是由R n^{\mathrm{n}}n 中的k个点所组成的集合, 即S ={x1,x2,⋯,xk}∘=\left\{\mathrm{x}_{1}, \mathrm{x}_{2}, \cdots, \mathrm{x}_{\mathrm{k}}\right\}_{\circ}={x1​,x2​,⋯,xk​}∘​ 定义S的凸壳conv (S)(\mathrm{S})(S) 为 :
conv⁡(S)={x=∑i=1kλixi∣∑i=1kλi=1,λi⩾0,i=1,2,⋯,k}\operatorname{conv}(\mathrm{S})=\left\{\mathrm{x}=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \mathrm{x}_{\mathrm{i}} \mid \sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}}=1, \lambda_{\mathrm{i}} \geqslant 0, \mathrm{i}=1,2, \cdots, \mathrm{k}\right\} conv(S)={x=i=1∑k​λi​xi​∣i=1∑k​λi​=1,λi​⩾0,i=1,2,⋯,k}
说明:凸壳是一个集合, 对于所有可能的 λi,i=1,2,⋯,k\lambda_{\mathrm{i}}, \mathrm{i}=1,2, \cdots, \mathrm{k}λi​,i=1,2,⋯,k 只要满足 ∑i=1kλi=1,\sum_{i=1}^{\mathrm{k}} \lambda_{\mathrm{i}}=1,∑i=1k​λi​=1, 那么 x=∑i=1k\mathrm{x}=\sum_{\mathrm{i}=1}^{\mathrm{k}}x=∑i=1k​ 即为凸壳中的元素, \quad 凸壳可以用二维的图形表
示如下:

线性可分
定义2:给定一个数据集
T={(x1,y1),(x2,y2),⋯,(xn,yn)}\mathrm{T}=\left\{\left(\mathrm{x}_{1}, \mathrm{y}_{1}\right),\left(\mathrm{x}_{2}, \mathrm{y}_{2}\right), \cdots,\left(\mathrm{x}_{\mathrm{n}}, \mathrm{y}_{\mathrm{n}}\right)\right\} T={(x1​,y1​),(x2​,y2​),⋯,(xn​,yn​)}
其中 xi∈X=Rn,yi∈Y={+1,−1},i=1,2,⋯,n,\mathrm{x}_{\mathrm{i}} \in \mathcal{X}=\mathrm{R}_{\mathrm{n}}, \mathrm{y}_{\mathrm{i}} \in \mathcal{Y}=\{+1,-1\}, \mathrm{i}=1,2, \cdots, \mathrm{n},xi​∈X=Rn​,yi​∈Y={+1,−1},i=1,2,⋯,n, 如果存在某个超平面S :w⋅x+b=0,: \quad \mathrm{w} \cdot \mathrm{x}+\mathrm{b}=0,:w⋅x+b=0, 能够将数据集的正实例点和负实例点完全正确划分到超平面的两侧,即对所有的正实例点即yi=+1y_i=+1yi​=+1的实例i,有w⋅xi+b>0w \cdot x_i + b > 0w⋅xi​+b>0 ,对所有的负实例点即yi=−1yy_i = -1yyi​=−1y的实例i,有w⋅xi+b<0w \cdot x_i + b < 0w⋅xi​+b<0,则称数据集T线性可分, 否则称数据集T 线性不可分。

  • 第2步:证明必要性:线性可分书=>凸壳不相交

假设数据集T 中的正例点集为S+S_{+}S+​,S+S_{+}S+​的凸壳为conv (S+),\left(\mathrm{S}_{+}\right),(S+​), 负实例点集为S−S_{-}S−​, S−S_{-}S−​ 的凸壳为conv (S−),\left(\mathrm{S}_{-}\right),(S−​), 若T 是线性可分的, 则存在一个超平 面:
w⋅x+b=0\mathrm{w} \cdot \mathrm{x}+\mathrm{b}=0 w⋅x+b=0
能够将S+S_{+}S+​和S−S_{-}S−​完全分离。假设对于所有的正例点xix_{i}xi​,有:
w⋅xi+b=εi\mathrm{w} \cdot \mathrm{x}_{\mathrm{i}}+\mathrm{b}=\varepsilon_{\mathrm{i}} w⋅xi​+b=εi​
易知 εi>0,i=1,2,⋯,∣S+∣∘\varepsilon_{\mathrm{i}}>0, \mathrm{i}=1,2, \cdots,\left|\mathrm{S}_{+}\right|_{\circ}εi​>0,i=1,2,⋯,∣S+​∣∘​ 若conv (S+)\left(\mathrm{S}_{+}\right)(S+​) 和conv (S−)\left(\mathrm{S}_{-}\right)(S−​) 相交, 即存在某个元素s, 同时满足 s∈conv⁡(S+)\mathrm{s} \in \operatorname{conv}\left(\mathrm{S}_{+}\right)s∈conv(S+​) 和s ∈conv⁡(S−)∙\in \operatorname{conv}\left(\mathrm{S}_{-}\right)_{\bullet}∈conv(S−​)∙​ 对于conv⁡(S+)\operatorname{conv}\left(\mathrm{S}_{+}\right)conv(S+​) 中的元素 s+\mathrm{s}^{+}s+ 有
w⋅s+=w⋅∑i=1kλixi=∑i=1kλi(εi−b)=∑i=1kλiεi−b\mathrm{w} \cdot \mathrm{s}^{+}=\mathrm{w} \cdot \sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \mathrm{x}_{\mathrm{i}}=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}}\left(\varepsilon_{\mathrm{i}}-\mathrm{b}\right)=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \varepsilon_{\mathrm{i}}-\mathrm{b} w⋅s+=w⋅i=1∑k​λi​xi​=i=1∑k​λi​(εi​−b)=i=1∑k​λi​εi​−b

因此w・ s++b=∑i=1kλiεi>0,\mathrm{s}^{+}+\mathrm{b}=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \varepsilon_{\mathrm{i}}>0,s++b=∑i=1k​λi​εi​>0, 同理对于S_中的元素 s−\mathrm{s}^{-}s− 有w・s −+b=∑i=1kλiεi<0^{-}+\mathrm{b}=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \varepsilon_{\mathrm{i}}<0−+b=∑i=1k​λi​εi​<0

由于s ∈conv⁡(S+)\in \operatorname{conv}\left(\mathrm{S}_{+}\right)∈conv(S+​) 且s ∈conv⁡(S−),\in \operatorname{conv}\left(\mathrm{S}_{-}\right),∈conv(S−​), 则w ⋅s+b=∑i=1kλiεi>0\cdot \mathrm{s}+\mathrm{b}=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \varepsilon_{\mathrm{i}}>0⋅s+b=∑i=1k​λi​εi​>0 且w・s +b=∑i=1kλiεi<0,+\mathrm{b}=\sum_{\mathrm{i}=1}^{\mathrm{k}} \lambda_{\mathrm{i}} \varepsilon_{\mathrm{i}}<0,+b=∑i=1k​λi​εi​<0, 可推出矛盾。

因此, conv⁡(S+)\operatorname{conv}\left(\mathrm{S}_{+}\right)conv(S+​) 和conv (S−)\left(\mathrm{S}_{-}\right)(S−​) 必不相交。从而必要性得证。

  • 第3步:证明充分性=>凸壳不相交刃线性可分

假设数据集T 中的正例点集为S +,S+_{+}, \mathrm{S}_{+}+​,S+​ 的凸壳为conv (S+),\left(\mathrm{S}_{+}\right),(S+​), 负实例点集为S −,S−_{-}, \mathrm{S}_{-}−​,S−​ 的凸壳为 conv⁡(S−),\operatorname{conv}\left(\mathrm{S}_{-}\right),conv(S−​), 且conv (S+)\left(\mathrm{S}_{+}\right)(S+​) 与Conv (S−)\left(\mathrm{S}_{-}\right)(S−​) 不相交。 定义两个点x_, x2的距离为
dist⁡(x1,x2)=∥x1−x2∥2=(x1−x2)2\operatorname{dist}\left(\mathrm{x}_{1}, \mathrm{x}_{2}\right)=\left\|\mathrm{x}_{1}-\mathrm{x}_{2}\right\|_{2}=\sqrt{\left(\mathrm{x}_{1}-\mathrm{x}_{2}\right)^{2}} dist(x1​,x2​)=∥x1​−x2​∥2​=(x1​−x2​)2​
定义conv (S+)\left(\mathrm{S}_{+}\right)(S+​) 和conv (S−)\left(\mathrm{S}_{-}\right)(S−​) 距离为
dist⁡(conv⁡(S+),conv⁡(S−))=min⁡∥s+−s−∥,s+∈conv⁡(S+),s−∈conv⁡(S−)\operatorname{dist}\left(\operatorname{conv}\left(\mathrm{S}_{+}\right), \operatorname{conv}\left(\mathrm{S}_{-}\right)\right)=\min \left\|\mathrm{s}_{+}-\mathrm{s}_{-}\right\|, \mathrm{s}_{+} \in \operatorname{conv}\left(\mathrm{S}_{+}\right), \mathrm{s}_{-} \in \operatorname{conv}\left(\mathrm{S}_{-}\right) dist(conv(S+​),conv(S−​))=min∥s+​−s−​∥,s+​∈conv(S+​),s−​∈conv(S−​)
设 x+∈conv⁡(S+),x−∈conv⁡(S−)\mathrm{x}_{+} \in \operatorname{conv}\left(\mathrm{S}_{+}\right), \mathrm{x}_{-} \in \operatorname{conv}\left(\mathrm{S}_{-}\right)x+​∈conv(S+​),x−​∈conv(S−​) 且dist (x+,x−)=dist⁡(conv⁡(S+),conv⁡(S−))∘\left(\mathrm{x}_{+}, \mathrm{x}_{-}\right)=\operatorname{dist}\left(\operatorname{conv}\left(\mathrm{S}_{+}\right), \operatorname{conv}\left(\mathrm{S}_{-}\right)\right)_{\circ}(x+​,x−​)=dist(conv(S+​),conv(S−​))∘​ 则对于任意正例点x有dist (x,x−)⩾dist⁡(x+,x−)\left(\mathrm{x}, \mathrm{x}_{-}\right) \geqslant \operatorname{dist}\left(\mathrm{x}_{+}, \mathrm{x}_{-}\right)(x,x−​)⩾dist(x+​,x−​)

同理, 对所有的负例点x有dist (x,x+)⩾dist⁡(x,x)\left(\mathrm{x}, \mathrm{x}_{+}\right) \geqslant \operatorname{dist}(\mathrm{x}, \mathrm{x})(x,x+​)⩾dist(x,x) 。 存在超平面
w⋅x+b=0\mathrm{w} \cdot \mathrm{x}+\mathrm{b}=0 w⋅x+b=0
其中
w=x++x−w = x_{+} +x_{-}w=x+​+x−​

b=−x+⋅x+−x−⋅x−2⋅x\begin{array}{c} \mathrm{b}=-\frac{\mathrm{x}_{+} \cdot \mathrm{x}_{+} - \mathrm{x}_{-} \cdot \mathrm{x}_{-}}{2} \cdot \mathrm{x} \end{array}b=−2x+​⋅x+​−x−​⋅x−​​⋅x​
则对于所有的正例点x (易知x・x++b>0,x・x_{+}+ \mathrm{b}>0,x・x+​+b>0, 因此若 x+\mathrm{x}_{+}x+​ 属于正例点, ,,, 则令 x+≠x)\left.\mathrm{x}_{+} \neq \mathrm{x}\right)x+​​=x)
w⋅x+b=(x+−x−)⋅x−x+⋅x+−x−−x−2=x+⋅x−x−⋅x−x+⋅x+−x−−x−2=∥x−−x∥22−∥x+−x∥222=dist⁡(x,x−)2−dist⁡(x,x+)22\begin{aligned} \mathrm{w} \cdot \mathrm{x}+\mathrm{b} &=\left(\mathrm{x}_{+}-\mathrm{x}_{-}\right) \cdot \mathrm{x}-\frac{\mathrm{x}_{+} \cdot \mathrm{x}_{+}-\mathrm{x}_{-}-\mathrm{x}_{-}}{2} \\ &=\mathrm{x}_{+} \cdot \mathrm{x}-\mathrm{x}_{-} \cdot \mathrm{x}-\frac{\mathrm{x}_{+} \cdot \mathrm{x}_{+}-\mathrm{x}_{-}-\mathrm{x}_{-}}{2} \\ &=\frac{\|\mathrm{x}_{-}-\mathrm{x}\|_{2}^{2}-\left\|\mathrm{x}_{+}-\mathrm{x}\right\|_{2}^{2}}{2} \\ &=\frac{\operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{-}\right)^{2}-\operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right)^{2}}{2} \end{aligned} w⋅x+b​=(x+​−x−​)⋅x−2x+​⋅x+​−x−​−x−​​=x+​⋅x−x−​⋅x−2x+​⋅x+​−x−​−x−​​=2∥x−​−x∥22​−∥x+​−x∥22​​=2dist(x,x−​)2−dist(x,x+​)2​​
若dist (x,x−)⩽dist⁡(x,x+)(\left(\mathrm{x}, \mathrm{x}_{-}\right) \leqslant \operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right)((x,x−​)⩽dist(x,x+​)( 即线性不可分 ),),), 则dist (x,x−)⩽dist⁡(x,x+)⩽dist⁡(x,x+),\left(\mathrm{x}, \mathrm{x}_{-}\right) \leqslant \operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right) \leqslant \operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right),(x,x−​)⩽dist(x,x+​)⩽dist(x,x+​), 那么dist (conv⁡(S+),conv⁡(S−))<\left(\operatorname{conv}\left(\mathrm{S}_{+}\right), \operatorname{conv}\left(\mathrm{S}_{-}\right)\right)<(conv(S+​),conv(S−​))<
dist⁡(x+,x−),\operatorname{dist}\left(\mathrm{x}_{+}, \mathrm{x}_{-}\right),dist(x+​,x−​), 推出矛盾, 因此dist (x,x−)>dist⁡(x,x+),\left(\mathrm{x}, \mathrm{x}_{-}\right)>\operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right),(x,x−​)>dist(x,x+​), 即线性可分, 充分性得证。

补充:用反证法证明dist (x,x)>dist⁡(x,x+)(\mathrm{x}, \mathrm{x})>\operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right)(x,x)>dist(x,x+​)

证明:假设dist (x,x−)⩽dist⁡(x,x+)(\mathrm{x}, \mathrm{x}_{-}) \leqslant \operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right)(x,x−​)⩽dist(x,x+​) 则存在
t=(x−−x+)⋅(x−x+)∥x−x+∥22令 x′=tx+(1−t)x+,则 (x−−x′)⋅(x+−x)=0\begin{array}{c} \mathrm{t}=\frac{\left(\mathrm{x}_{-}-\mathrm{x}_{+}\right) \cdot\left(\mathrm{x}-\mathrm{x}_{+}\right)}{\left\|\mathrm{x}-\mathrm{x}_{+}\right\|_{2}^{2}} \\ \text { 令 } \mathrm{x}^{\prime}=\mathrm{tx}+(1-\mathrm{t}) \mathrm{x}_{+}, \text {则 }\left(\mathrm{x}_{-}-\mathrm{x}^{\prime}\right) \cdot\left(\mathrm{x}_{+}-\mathrm{x}\right)=0 \end{array} t=∥x−x+​∥22​(x−​−x+​)⋅(x−x+​)​ 令 x′=tx+(1−t)x+​,则 (x−​−x′)⋅(x+​−x)=0​

易知t ⩽1,\leqslant 1,⩽1, 先证明t >0:>0:>0: 可以将x, x+,x−\mathrm{x}_{+}, \mathrm{x}_{-}x+​,x−​ 看做为空间中的三个不同的点, 三条边的长度分别为dist (x,x+),dist⁡(x,x−),dist⁡(x+,x−)\left(\mathrm{x}, \mathrm{x}_{+}\right), \operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{-}\right), \operatorname{dist}\left(\mathrm{x}_{+}, \mathrm{x}_{-}\right)(x,x+​),dist(x,x−​),dist(x+​,x−​)

如上面可知dist (x,x+)⩾dist⁡(x,x−)⩾dist⁡(x−,x+)\left(\mathrm{x}, \mathrm{x}_{+}\right) \geqslant \operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{-}\right) \geqslant \operatorname{dist}\left(\mathrm{x}_{-}, \mathrm{x}_{+}\right)(x,x+​)⩾dist(x,x−​)⩾dist(x−​,x+​)

根据三角形的大边对应大角这一特性, 很容易可以看出x_ −x-\mathrm{x}−x 与 x+−x−\mathrm{x}_{+}-\mathrm{x}_{-}x+​−x−​ 之间的夹角小于90度, 因此t >0>0>0 。 那么 dist⁡(x′,x−)<\operatorname{dist}\left(\mathrm{x}^{\prime}, \mathrm{x}_{-}\right)<dist(x′,x−​)< dist⁡(x+,x−),\operatorname{dist}\left(\mathrm{x}_{+}, \mathrm{x}_{-}\right),dist(x+​,x−​), 又因为x ′^{\prime}′ 必在conv (S+)\left(\mathrm{S}_{+}\right)(S+​) 内部, 故推出矛盾, 所以dist (x,x−)>dist⁡(x,x+)\left(\mathrm{x}, \mathrm{x}_{-}\right)>\operatorname{dist}\left(\mathrm{x}, \mathrm{x}_{+}\right)(x,x−​)>dist(x,x+​)

参考自:
黄海广博士
datawhale

统计学习方法笔记(李航)———第二章(感知机)相关推荐

  1. 【统计学习方法笔记】——第二章 感知机

    目录 前言 一.感知机模型 1.1 定义 1.2 几何解释 二. 感知机学习策略 2.1 数据集的线性可分 2.2 感知机学习策略 三.感知机学习算法 3.1 感知机学习算法的原始形式 3.2 算法的 ...

  2. 机器学习理论《统计学习方法》学习笔记:第二章 感知机

    <统计学习方法>学习笔记:第二章 感知机 2 感知机 2.1 感知机模型 2.2 感知机学习策略 2.2.1 数据的线性可分性 2.2.2 感知机学习策略 2.3 感知机学习算法 2.3. ...

  3. 复现经典:《统计学习方法》第 2 章 感知机

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  4. 《统计学习方法》--李航 学习笔记

    <统计学习方法>--李航 第一章 统计学习方法三要素: 模型 模型评估与模型选择 正则化与交叉验证 正则化 交叉验证 泛化能力 生成模型与判别模型 生成方法 判别方法 分类问题.标注问题. ...

  5. 复现经典:《统计学习方法》第 9 章 EM 算法及其推广

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  6. 复现经典:《统计学习方法》​第 11 章 条件随机场

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  7. 复现经典:《统计学习方法》第 7 章 支持向量机

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  8. 复现经典:《统计学习方法》第 6 章 逻辑斯谛回归

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  9. 复现经典:《统计学习方法》第 8 章 提升方法

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  10. 复现经典:《统计学习方法》第 10 章 隐马尔可夫模型

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

最新文章

  1. AMBA总线协议AHB、APB
  2. LeetCode 343. Integer Break
  3. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~...
  4. extend implements多个对象_「每天三分钟跟我学Java」之Java面向对象的封装、继承、多态...
  5. 给那些因为Firebug而舍不得FireFox的朋友
  6. Douglas Peucker算法的C#实现
  7. 人工智能和机器学习的前五门课程
  8. 常见电脑故障自检指南(南城ZW)
  9. Kettle数据抽取实战之四:网页数据抽取
  10. 看完这20部电影,你可以去全球任何一家公司做董事长或总经理
  11. cef js返回c++的代码_CEF3开发者系列之JS与C++交互之简单介绍
  12. excel从只有省市县的地址中分别提取省、市、县
  13. 我!程序媛!上家阿里巴巴,下家字节跳动!薪资翻番!选择裸辞躺平!无限期休息!...
  14. 适合学生用的蓝牙耳机哪款好?学生党无线蓝牙耳机推荐
  15. 调皮的表情图(Emoji)
  16. 如何优雅的用 Nginx 在公网上快速搭建一个加密数据通道
  17. 什么是LTE(Long Term Evolution)
  18. C语言程序课程设计—读心术
  19. 33、网络地址转换(NAT)
  20. 国家集训队1999-2009论文集

热门文章

  1. Oracle MySQL社区版与Oracle MySQL企业版特征对比
  2. Linxu:磁盘分区
  3. C#基础知识1-深入理解值类型和引用类型
  4. 【安卓开发】AndroidStudio项目提交到github最详细步骤
  5. 【Python】 数字求和
  6. 利用Github搭建免费图床
  7. python的内建函数built-in functions
  8. “ create-react-app”和创建React应用程序的未来
  9. 源码分析参考:Scheduler
  10. collections模块之namedtuple