感知机及python实现

感知机(Perceptron)是神经网络的基本构件之一,最初由Frank Rosenblatt在1957年提出。感知机是一种二分类的线性分类器,通过一个简单的线性函数将输入数据分类到两种类别之一。

基本原理

感知机的工作原理如下:

  1. 输入:接受多个输入特征,每个特征有一个权重。

  2. 加权和:计算输入特征与对应权重的加权和。

  3. 激活函数:将加权和通过一个激活函数(通常是阶跃函数或符号函数)转换为输出。

  4. 更新权重:根据预测结果与实际结果之间的差异,调整权重,直到模型能够正确分类。

感知机的输出公式如下:如果 w⋅x+b≥0,y=1,如果 w⋅x+b<0,y=0

其中,w是权重向量,x是输入向量,b 是偏置项。

如何设计感知机

设计一个感知机模型包括以下步骤:

  1. 初始化权重和偏置

    • 将权重向量 w初始化为零或小的随机值。

    • 偏置项 b 初始化为1。

  2. 定义激活函数

    • 使用阶跃函数或符号函数作为激活函数。
  3. 训练模型

    • 输入训练数据集,包含输入特征和对应的标签。

    • 迭代更新权重和偏置,直到收敛或达到预设的迭代次数。

    • 使用如下公式更新权重和偏置:

其中,η为学习率。

示例

python 复制代码
import numpy as np

# 感知机类
class Perceptron:
    def __init__(self, learning_rate, n_iterations):
        self.lr = learning_rate
        self.n_iterations = n_iterations
        self.weights = None
        self.bias = None

    # 训练模型
    def fit(self, X, y):
        n_samples, n_features = X.shape
        
        # 初始化权重和偏置
        self.weights = np.zeros(n_features)
        self.weights_bias = 0
        self.bias = 1
        
        y_ = np.array([1 if i > 0 else 0 for i in y])
        
        # 迭代
        for _ in range(self.n_iterations):
            for idx, x_i in enumerate(X):
                linear_output = np.dot(x_i, self.weights) + self.bias * self.weights_bias
                y_pred = 1 if linear_output >= 0 else 0
                
                # 如果预测错误,则更新权重和偏置
                if y_pred != y_[idx]:
                    self.weights +=  self.lr * (y_[idx] - y_pred) * x_i
                    self.weights_bias +=  self.lr * (y_[idx] - y_pred)
                    
                # 打印权重更新结果
                print(self.weights, self.weights_bias)    
                    
    # 预测
    def predict(self, X):
        linear_output = np.dot(X, self.weights) + self.bias
        y_pred = [1 if i >= 0 else 0 for i in linear_output]
        return np.array(y_pred)

# 示例数据,X为数据点集,y为其分类集
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([-1, -1, -1, 1])

# 创建感知机实例
p = Perceptron(learning_rate = 1, n_iterations=10)

# 训练模型
p.fit(X, y)

# 待预测数据
z = np.array([[3,9], [9,3], [3,-9], [-3,9]])

# 预测
print(p.predict(z))
相关推荐
桜吹雪3 分钟前
Langchain.js官方文档:构建具备按需加载技能的 SQL 助手
javascript·人工智能·node.js
ting94520008 分钟前
深入解析 Social Fetch 机制:原理、架构、应用场景、实战落地与性能优化全攻略
人工智能·性能优化·架构
阿瑞说项目管理8 分钟前
2026 实战入门指南:企业 Agent 到底能解决哪些工作问题?
大数据·人工智能·agent·智能体·企业级ai
ZOOOOOOU9 分钟前
云边端协同架构下,门禁权限引擎的离线决策与策略续存实现
大数据·人工智能·架构
han_9 分钟前
一篇看懂国内外主流大模型:GPT、Claude、Gemini、DeepSeek、通义千问有什么区别?
前端·人工智能·llm
1892280486110 分钟前
EMMC32G-TA28闪存EMMCH26M78103CCR
大数据·人工智能·缓存
新知图书13 分钟前
工作分解结构辅助生成(使用千问)
人工智能·千问·高效办公
love530love18 分钟前
ComfyUI MediaPipe 终极填坑:解决 incompatible function arguments 报错,基于代理模式的猴子补丁升级版
人工智能·windows·comfyui·mediapipe·猴子补丁·monkey patch·python 3.12
dingzd9521 分钟前
Facebook强化原创内容分发后跨境品牌如何重做素材策略
大数据·人工智能·新媒体运营·内容营销·跨境
卢子墨23 分钟前
Hermes Agent + 钉钉适配文档(重点解决图片引用识别问题)
人工智能·aigc·harness