机器学习模型--感知机

感知机模型是一个非常基础的模型,是神经网络的根基。

感知机模型

感知机模型是一个二分类的线性分类模型,输入是样本的特征向量,输出是样本的类别,取值+1和-1。

模型定义

假设输入空间(特征空间)是X⊆Rn\mathcal{X} \subseteq \mathrm{R}^nXRn,输出空间是Y={+1,−1}\mathcal{Y} = \{ +1, -1 \}Y={+1,1}。输入x∈Xx \in \mathcal{X}xX表示样本的特征向量,对应于输入空间(特征空间)的点,输出y∈Yy \in \mathcal{Y}yY对应样本的类别。有输入空间到输出空间的映射函数如下:
f(x)=sign(w⋅x+b) f(x) = sign(w \cdot x + b) f(x)=sign(wx+b)

就是感知机的形式。其中wwwbbb是感知机的模型参数,w∈Rnw \in \mathrm{R}^nwRn是系数或叫权重、权值,b∈Rb \in \mathrm{R}bR叫偏置, w⋅xw \cdot xwx表示wwwxxx的内积。signsignsign是符号函数:
sign(x)={+1,   x≥0−1,   x&lt;0 sign(x) = \begin{cases} +1, \ \ \ x \geq 0 \\ -1, \ \ \ x &lt; 0 \end{cases} sign(x)={+1,   x01,   x<0

感知机是一种线性分类模型,感知机模型的假设空间是定义在特征空间中所有的线性分类模型或线性分类器。函数的集合{f∣f(x)=w⋅x+b}\{ f \mid f(x) = w \cdot x + b\}{ff(x)=wx+b}

感知机的几何解释

线性方程:w⋅x+b=0w \cdot x + b = 0wx+b=0对应特征空间Rn\mathrm{R}^nRn的一个超平面SSS,其中www是超平面的法向量,bbb 是超平面的截距。这个超平面把特征空间划分成两个部分,位于两个部分的点(特征向量)被划分为正、负两类。超平面SSS被称作分离超平面。

感知机模型图
如上图所示,假设在二维特征空间,w⋅x+b=0w \cdot x + b = 0wx+b=0表示分离超平面,∘\circ 表示正类取值+1,即w⋅xi+b&gt;0w \cdot x_i + b &gt; 0wxi+b>0×\times× 表示负类取值-1,即w⋅xi+b&lt;0w \cdot x_i + b &lt; 0wxi+b<0

总结一句话:感知机需要找到一个能够将训练数据集的正样本和负样本完全正确分开的分离超平面。

学习策略

感知机学习的前提是数据集线性可分,也就是说存在一个分离超平面SSS能够正确将正类和负类划分到超平面的两侧,即对所有的yi=+1y_i = +1yi=+1的样本,有w⋅xi+b&gt;0w \cdot x_i +b &gt; 0wxi+b>0;对所有yi=−1y_i = -1yi=1的样本,有w⋅xi+b&lt;0w \cdot x_i + b &lt; 0wxi+b<0。说明数据集线性可分。
感知机想要找到这个分离超平面,就需要确定模型的参数 w和b,需要制定一个学习的策略,即定义损失函数并最小化损失函数。
由于直接定义样本分类错误的个数,这个函数不是连续可导函数不易于优化求最优值。另一个想法是计算分类错误点到分离超平面的距离和,这就是感知机所采用的损失函数。
一个点到超平面的距离公式:1∣∣w∣∣∣w∗x+b∣{1 \over ||w||} | w*x+b |w1wx+b∣∣w∣∣||w||w是w的L2L_2L2范数

其中

  1. L0L_0L0范数,指的是向量中非零元素的个数。向量{1,0,-3,0,1,2}的L0L_0L0范数为4。
  2. L1L_1L1范数,指的是向量中元素绝对值之和。向量{1,0,-3,0,1,2}的L1L_1L1范数为∣1∣+∣0∣+∣−3∣+∣0∣+∣1∣+∣2∣=7|1| + |0| + |-3| + |0| + |1| + |2| = 71+0+3+0+1+2=7
  3. L2L_2L2范数,指的是向量中元素平方和的正平方根。向量{1,0,-3,0,1,2}的L1L_1L1范数为12+02+(−3)2+02+12+22=15\sqrt{ 1^2 + 0^2 + (-3)^2 + 0^2 + 1^2 + 2^2 } = \sqrt{15}12+02+(3)2+02+12+22=15

其中对误分类点(xi,yi)(x_i, y_i)(xi,yi)来说 −yi(w⋅xi+b)&gt;0-y_i(w \cdot x_i + b)&gt;0yi(wxi+b)>0成立。因为如果 yi=−1y_i=-1yi=1,那么w⋅xi+b&gt;0w \cdot x_i + b &gt; 0wxi+b>0,如果yi=+1y_i=+1yi=+1,那么w⋅xi+b&lt;0w \cdot x_i + b &lt; 0wxi+b<0,所以分类错误的点到分离超平面的距离 −1∣∣w∣∣yi(w⋅xi+b)- { 1 \over ||w|| } y_i (w \cdot x_i + b)w1yi(wxi+b)

假设误分类点的集合为M,所有误分类的点到分离超平面距离的和为−1∣∣w∣∣∑xi∈Myi(w⋅xi+b)-{1 \over ||w||} \sum_{x_i \in M} y_i(w \cdot x_i + b)w1xiMyi(wxi+b),对于一个固定的w来说,1∣∣w∣∣1 \over ||w||w1是常数值可以不考虑。

所以感知机的损失函数,对于给定的数据集
T={(x1,y1),(x2,y2),⋯&ThinSpace;,(xN,yN)}T=\{ (x_1,y_1),(x_2,y_2), \cdots, (x_N,y_N) \}T={(x1,y1),(x2,y2),,(xN,yN)}

其中xi∈X=Rn,   yi∈Y={−1,+1},   i=1,2,3,⋯&ThinSpace;,Nx_i \in \mathcal{X} = \mathrm{R}^n, \ \ \ y_i \in \mathcal{Y} = \{-1, +1\}, \ \ \ i = 1,2,3, \cdots, NxiX=Rn,   yiY={1,+1},   i=1,2,3,,N。感知机的损失函数定义为:
L(w,b)=−∑xi∈Myi(w⋅xi+b) L(w, b) = -\sum_{x_i \in M} y_i(w \cdot x_i + b)L(w,b)=xiMyi(wxi+b)

其中M是误分类点的集合,这是感知机的经验风险函数。

算法

确定了感知机的损失函数,之后就要最小化损失函数,即:
min⁡w,bL(w,b)=−∑xi∈Myi(w⋅xi+b) \min_{w,b} L(w, b) = - \sum_{x_i \in M} y_i(w \cdot x_i + b)w,bminL(w,b)=xiMyi(wxi+b)

最优化的求解使用随机梯度下降法。先随机选一个初始参数w0,b0w_0, b_0w0,b0,确定一个分离超平面,然后使用随机梯度下降法,从误分类的集合点中随机选一个点优化损失函数。
损失函数L(w,b)L(w, b)L(w,b)的梯度:
∇wL(w,b)=−∑xi∈Myixi \nabla_w L(w, b) = - \sum_{x_i \in M} y_i x_iwL(w,b)=xiMyixi

∇bL(w,b)=−∑xi∈Myi \nabla_b L(w, b) = - \sum_{x_i \in M} y_i bL(w,b)=xiMyi

随机选一个误分类的点对w和b更新:
w←w+ηyixi w \leftarrow w +\eta y_i x_i ww+ηyixi

b←b+ηyi b \leftarrow b +\eta y_i bb+ηyi

公式中的η\etaη表示步长,又称作学习率,表示在梯度方向一次前进多少。在不断优化的过程中L(w,b)L(w, b)L(w,b)不断减少,一直到0。

对偶形式

对应SVM的对偶形式。
是将参数表示成xix_ixiyiy_iyi的线性组合。通过求解其系数从而求w和b。
假设w和b的初始值为0,通过使用误分类点更新w和b:w←w+ηxiyi w \leftarrow w + \eta x_i y_iww+ηxiyi b←b+ηyi b \leftarrow b + \eta y_ibb+ηyi
逐步修改w和b,设修改n次,则w和b关于(xi,yi)(x_i, y_i)(xi,yi)的增量分别是aiyixia_i y_i x_iaiyixiaiyia_i y_iaiyiai=niηa_i = n_i \etaai=niη,最后的w和b可以表示为:w=∑i=1Naiyixi w = \sum_{i=1}^N a_i y_i x_iw=i=1Naiyixi b=∑i=1Naiyib = \sum_{i=1}^N a_i y_ib=i=1Naiyi
ai≥0,i=1,2,⋯&ThinSpace;,Na_i \geq 0, i=1,2,\cdots ,Nai0,i=1,2,,N 参考P33,算法2.2

总结

训练数据集 T=(x1,y1),(x2,y2),⋯&ThinSpace;,(xN,yN)T = {(x_1, y_1), (x_2, y_2), \cdots ,(x_N, y_N)}T=(x1,y1),(x2,y2),,(xN,yN),其中xi∈X=Rn,   yi∈Y={+1,−1},   i=1,2,⋯&ThinSpace;,Nx_i \in \mathcal{X} = \mathrm{R}^n, \ \ \ y_i \in \mathcal{Y} = \{+1, -1\}, \ \ \ i = 1, 2, \cdots,NxiX=Rn,   yiY={+1,1},   i=1,2,,N;学习率 η(0≤η≤1)\eta (0 \leq \eta \leq 1 )η(0η1)
感知机的模型:f(x)=sign(w⋅x+b)f(x) = sign(w \cdot x + b)f(x)=sign(wx+b)
随机选一个值w0,b0w_0, b_0w0,b0,然后在训练数据集中选出 yi(w⋅xi+b)≤0y_i (w \cdot x_i + b) \leq 0yi(wxi+b)0的点,用(xi,yi)(x_i, y_i)(xi,yi)更新w和b:
w←w+ηyixi w \leftarrow w +\eta y_i x_i ww+ηyixi

b←b+ηyi b \leftarrow b +\eta y_i bb+ηyi

然后再用新的w和b在训练数据集中选出 yi(w⋅xi+b)≤0y_i (w \cdot x_i + b) \leq 0yi(wxi+b)0的点,直到找不到这样的点。

直观的理解:当选择的分离超平面存在错误的时候,使用错误的点调整分离超平面,使错误变正确。不断调整分离超平面,直至所有的点都正确。

### 关于机器学习感知机概念与实现 #### 感知机的基本概念 感知机(Perceptron)是神经网络的基础单元之一,属于一种二分类的线性分类模型。它由输入层和输出层组成,通过权重向量 \( w \) 和偏置项 \( b \) 来定义决策边界[^1]。感知机的核心思想在于利用梯度下降法不断调整参数,使得模型能够逐渐逼近最优解。 #### 感知机的学习过程 感知机的学习目标是最小化误分类样本的数量。其更新规则如下所示: \[ w \leftarrow w + \eta y_i x_i, \quad b \leftarrow b + \eta y_i \] 其中,\( \eta \) 表示学习率,\( y_i \) 是样本的真实标签,而 \( x_i \) 则表示对应的特征向量[^3]。这种简单的迭代机制使感知机成为理解更复杂神经网络结构的良好起点。 #### 使用Python实现感知机 以下是基于纯Python编写的简单感知机实现代码: ```python import numpy as np class Perceptron: def __init__(self, learning_rate=0.01, epochs=100): self.learning_rate = learning_rate self.epochs = epochs def fit(self, X, y): n_samples, n_features = X.shape self.weights = np.zeros(n_features) self.bias = 0 for _ in range(self.epochs): for idx, x_i in enumerate(X): linear_output = np.dot(x_i, self.weights) + self.bias predicted_class = np.where(linear_output >= 0, 1, -1) update = self.learning_rate * (y[idx] - predicted_class) self.weights += update * x_i self.bias += update def predict(self, X): linear_output = np.dot(X, self.weights) + self.bias return np.where(linear_output >= 0, 1, -1) # 示例数据 X = np.array([[2, 4], [4, 6], [-1, -3], [-3, -5]]) y = np.array([1, 1, -1, -1]) perceptron = Perceptron() perceptron.fit(X, y) print(perceptron.predict(np.array([[3, 5], [-2, -4]]))) ``` 上述代码展示了如何手动构建并训练一个基本的感知机模型。 #### 借助`scikit-learn`实现感知机 如果希望快速应用感知机解决实际问题,则可以直接调用 `scikit-learn` 中的 `MLPClassifier` 或者其他类似的工具包[^2]。例如: ```python from sklearn.neural_network import MLPClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 创建虚拟数据集 X, y = make_classification(n_samples=100, n_features=2, random_state=1) # 数据划分 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化并训练模型 clf = MLPClassifier(hidden_layer_sizes=(1,), activation='identity', solver='sgd') clf.fit(X_train, y_train) # 输出测试结果 predictions = clf.predict(X_test) print(predictions[:10]) ``` 这段代码片段演示了如何借助 `scikit-learn` 的多层感知机模块完成二分类任务。 #### ‘头歌’平台上的教程资源 ‘头歌’是一个专注于工程教育实践教学的服务平台,在该平台上可能会提供有关机器学习基础以及感知机的具体实验案例。这些实验通常会引导学生逐步掌握从理论到实践的知识链条,并配有详细的指导文档和支持材料[^4]。不过具体的教程内容需登录相应账户查看官方发布的信息。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值