You need to enable JavaScript to run this app. 感知机算法未按预期运行,排查Python实现代码的问题
优惠活动
大模型
产品
解决方案
定价
更多

感知机算法未按预期运行,排查Python实现代码的问题

感知机实现结果不符合预期的问题排查

代码里的明确bug点

  • 阶跃函数的输出和标签取值对不上
    现在的step函数吐出来的是0和1,但你做权重更新的时候靠的是y_hat - y[i]的差值判断:如果你的原始标签是常规二分类的-1/1取值,这俩的差值根本碰不上代码里写的1、-1两个更新触发阈值,等于权重更新分支根本不会正确触发,模型学不动。
  • 权重更新的方向写反了
    现在的逻辑是预测值比真实值大1的时候,反而往大了调权重和偏置,这和感知机的修正逻辑完全反过来:本来应该是正样本被错分成负类的时候,才抬权重把得分拉上去;负样本被错分成正类的时候,才压权重把得分降下来,你现在的写法越迭代,分割线离正确位置越远。
  • 没用的代码还写错了
    算维度边界那行y_min, y_max = min(x.T[1]), max(x.T[0])明显手滑,把x维度的最大值塞给y_max了,而且这行算出来的数后面压根没用到,纯纯的无效错代码。
  • 偏置初始值设得不合理
    现在的偏置是随机数加x方向的最大值,等于初始分割线直接怼到x轴最右端,离数据群老远,前几个epoch根本学不到东西。

改完能跑的核心逻辑

# 适配-1/1标签的阶跃函数
def step(t):
    return 1 if t >= 0 else -1

# 单步更新的正确写法
def perceptronstep(x, y, w, b, learning_rate):
    for i in range(len(x)):
        y_hat = prediction(x[i], w, b)
        # 错了才更新,不用靠差值判断
        if y_hat != y[i]:
            for j in range(len(w)):
                w[j] += learning_rate * y[i] * x[i][j]
            b += learning_rate * y[i]
    return w, b

内容的提问来源于stack exchange,提问作者devanathan sabapathy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 04:24:00