Skip to content

感知机

感知机是最早的线性分类模型之一,适用于二分类任务。它的核心思想是寻找一个超平面,把两类样本分开。

概念详解

给定样本 xRd,标签 y{1,+1},感知机模型为:

f(x)=sign(wTx+b)

其中 w 是法向量,b 是偏置。分类超平面为:

wTx+b=0

如果样本被正确分类,则应满足:

yi(wTxi+b)>0

yi(wTxi+b)0 时,说明样本被误分类,需要更新参数。

数学公式及其推导

感知机损失函数只惩罚误分类点:

L(w,b)=xiMyi(wTxi+b)

对单个误分类样本 (xi,yi),损失为:

Li=yi(wTxi+b)

分别对 wb 求梯度:

Liw=yixi,Lib=yi

使用梯度下降:

ww+ηyixi,bb+ηyi

这就是感知机的更新规则。

应用代码

python
import numpy as np

class Perceptron:
    def __init__(self, lr=0.1, epochs=100):
        self.lr = lr
        self.epochs = epochs

    def fit(self, X, y):
        self.w = np.zeros(X.shape[1])
        self.b = 0.0
        for _ in range(self.epochs):
            errors = 0
            for xi, yi in zip(X, y):
                if yi * (np.dot(self.w, xi) + self.b) <= 0:
                    self.w += self.lr * yi * xi
                    self.b += self.lr * yi
                    errors += 1
            if errors == 0:
                break

    def predict(self, X):
        return np.where(X @ self.w + self.b >= 0, 1, -1)

X = np.array([[2, 1], [1, 3], [2, 4], [-1, -2], [-2, -1], [-3, -2]])
y = np.array([1, 1, 1, -1, -1, -1])

model = Perceptron()
model.fit(X, y)
print(model.w, model.b)
print(model.predict(X))

小结

感知机只能处理线性可分数据,但它给出了“线性变换 + 激活函数 + 参数更新”的基本形式,是理解神经网络的起点。