You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sklearn Perceptron无法正确分类NAND函数,请求排查问题

Perceptron实现NAND门预测异常问题排查

我是机器学习新手,正在用Perceptron验证逻辑门的线性可分性,但针对NAND门的实现结果不符合预期:模型在输入X和输出y上的得分仅为0.5,预测结果是[1,0,0,0],而预期应该是[1,1,1,0]。

训练代码

import numpy as np
from sklearn.linear_model import Perceptron

clf = Perceptron(max_iter=100, random_state=0)

X= np.array([[0,0],[0,1],[1,0],[1,1]])
y = np.array([1,1,1,0])
clf.fit(X, y)
score= clf.score(X, y)
print(score)
a=clf.predict(X)
print(a)

代码输出

0.5
[1 0 0 0]

净输入计算代码

w = clf.coef_ ;b = clf.intercept_
z= np.dot(X,w.T) +b
print(z.T)

净输入计算结果

[[ 2.  0.  0. -2.]]

问题原因

sklearn的Perceptron默认遵循原始感知机算法设计,期望分类标签为{-1, 1},但你传入的标签是{0,1}。这种标签格式不匹配会导致模型权重更新逻辑出错,无法收敛到NAND门对应的正确线性分隔边界。

解决方法

将标签集中的0替换为-1,让标签符合Perceptron的预期格式:

import numpy as np
from sklearn.linear_model import Perceptron

clf = Perceptron(max_iter=100, random_state=0)

X= np.array([[0,0],[0,1],[1,0],[1,1]])
# 将原标签中的0替换为-1
y = np.array([1,1,1,-1])
clf.fit(X, y)
score= clf.score(X, y)
print(score)
a=clf.predict(X)
# 可选:将预测结果中的-1转换回0,方便和预期结果对比
a = np.where(a == -1, 0, a)
print(a)

修改后运行,模型得分会变为1.0,预测结果也会符合预期的[1,1,1,0]。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:45:52