感知机
- 感知机是二类分类的线性分类模型,属于判别模型
- 输入为实例的特征向量
- 输出为实例的类别 ----> **{-1, +1} **
- 感知机对应于特征空间(输入空间)中,将实例划分为正负两类的分离超平面
- 损失函数---->梯度下降法----->损失函数极小化----->感知机模型
- 感知机学习算法:原始形式与对偶形式
- 感知机于1957年由Rosenblatt提出,是神经网络与支持向量机的基础
一、感知机模型
- 定义
- 模型的假设空间:定义在特征空间中的所有线性分类模型或线性分类器,即函数集合
- 几何解释
- 线性方程:w ⋅ x + b = 0
- 分离超平面S:将特征空间划分为正负两类;属于特征空间;w是超平面的法向量;b是超平面的截距
二、感知机学习策略
- 数据集的线性可划分
- 线性可划分数据集
(1)对所有yi = +1的实例 i ,有w ⋅ x + b > 0
(2)对所有yi = -1的实例 i ,有w ⋅ x + b < 0 - 线性不可分数据集:上述条件不满足
- 线性可划分数据集
- 感知机学习策略
三、感知机学习算法----随机梯度下降法(SDG)
- 算法
- 代码实现
import numpy as np
def perceptron(xi, yi):
res, leaning_rate, b, w = [], 0.1, 0, np.array([0.5, 0.5]) # b:偏置项 w:x的权重
# np.sign(np.dot(w, xi) + b) # 激活函数,输出结果为{-1, +1}, -1为假, +1为真
for i in range(len(yi)):
if yi[i] * (np.dot(w, xi[i]) + b) <= 0:
w += leaning_rate * yi[i] * xi[i]
b += leaning_rate * yi[i]
for j in range(len(xi)):
y = np.sign(np.dot(w, xi[j]) + b)
res.append(y)
print(f"梯度下降后的权重:{w}, 梯度下降后的偏置项:{b}, 梯度下降后的输出值:{res}")
用上面的代码实现and运算
def AND(): # and运算
x = np.array([[-1, -1], [-1, 1], [1, -1], [1, 1]]) # -1为假 1为真
y = np.array([-1, -1, -1, 1])
return [x, y]
perceptron(AND()[0], AND()[1])
运行结果
梯度下降后的权重:[0.5 0.5], 梯度下降后的偏置项:-0.2, 梯度下降后的输出值:[-1.0, -1.0, -1.0, 1.0]