【感知机】—— 感知机算法原理及Python实现

感知机(Perceptron)

二分类模型、线性分类模型、判别模型

  • 输入:为实例的特征向量

  • 输出:实例的类别,取+1和-1

1. 感知机的原始形式

  • 模型:寻找能够将训练数据进行线性划分的分离超平面

    • 感知机模型: f ( x ) = s i g n ( w ∗ x + b ) f(x) = sign(w*x + b) f(x)=sign(wx+b)
      (w权值、b偏置为感知机模型参数,w*x表示内积,sign为符号函数)
      几何解释:w是超平面的法向量,b为超平面的截距
  • 策略: 建立误分类的损失函数,误分类点到超平面的总距离,损失函数是连续可导函数

  • 损失函数: m i n w , b L ( w , b ) = − Σ y i ( w ∗ x i + b ) \underset{w,b}{min}L(w, b) = -\Sigma{y_{i}(w*x_{i} + b)} w,bminL(w,b)=Σyi(wxi+b)

  • 算法: 利用随机梯度下降法 Stochastic Gradient Descent,对损失函数进行极小化求解,求得感知机模型

    • 首先,任意选取一个超平面 w 0 w_{0} w0 b 0 b_{0} b0,然后用梯度下降法不断极小化目标函数,极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。

      梯度:

      ▽ w L (

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感知机算法是一种分类算法,它可以将输入数据分为两类。下面是一个简单的感知机算法Python 实现: ```python import numpy as np class Perceptron: def __init__(self, learning_rate=0.01, n_iters=1000): self.lr = learning_rate self.n_iters = n_iters self.weights = None self.bias = None def fit(self, X, y): n_samples, n_features = X.shape # 初始化权重和偏置 self.weights = np.zeros(n_features) self.bias = 0 # 梯度下降更新权重和偏置 for _ in range(self.n_iters): for idx, x_i in enumerate(X): linear_output = np.dot(x_i, self.weights) + self.bias y_predicted = self.activation(linear_output) update = self.lr * (y[idx] - y_predicted) self.weights += update * x_i self.bias += update def activation(self, x): return np.where(x >= 0, 1, -1) def predict(self, X): linear_output = np.dot(X, self.weights) + self.bias y_predicted = self.activation(linear_output) return y_predicted ``` 在这个实现中,我们使用了 NumPy 库来进行向量化操作,从而提高了算法的运行效率。我们定义了一个 `Perceptron` 类,其中最重要的方法是 `fit()` 和 `predict()`。`fit()` 方法用于训练感知机模型,`predict()` 方法用于预测新的数据点的标签。感知机的训练过程通过梯度下降来更新权重和偏置,直到达到最优解或达到迭代次数上限。 你可以使用以下代码来测试感知机模型: ```python X = np.array([[2, 3], [1, 2], [3, 4], [4, 5]]) y = np.array([-1, -1, 1, 1]) perceptron = Perceptron(learning_rate=0.1, n_iters=1000) perceptron.fit(X, y) new_data = np.array([[5, 6], [2, 1]]) print(perceptron.predict(new_data)) ``` 在这个例子中,我们使用了一个简单的数据集进行测试。我们创建了一个 `Perceptron` 对象,然后使用 `fit()` 方法对数据进行训练。最后,我们使用 `predict()` 方法对新的数据点进行预测,并输出预测结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值