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

Perceptron类plot_decision_regions方法报错及类对象使用问题求助

问题分析与解决方案

1. TypeError: 'Perceptron' object is not subscriptable 错误修复

这个错误的核心是调用plot_decision_regions时传错了参数——把Perceptron类的实例当成输入特征数组X传入,而该方法内部需要对X执行数组下标操作(比如X[:,0]),但Perceptron实例不支持这类操作,因此触发报错。

错误示例

# 错误:将Perceptron实例p当作特征数组X传入
plot_decision_regions(p, y_ex, classifier=p)

正确调用方式

将你的特征数组X_ex作为第一个参数传入,Perceptron实例作为分类器参数传入:

# 正确:传入特征数组X_ex、标签y_ex,指定分类器为Perceptron实例
plot_decision_regions(X_ex, y_ex, classifier=p)

2. init() 缺失必填参数错误修复

这个错误是因为创建Perceptron实例时,没有给类的__init__方法传全必填参数。比如你的Perceptron类定义可能要求必须传入学习率、迭代次数等参数,但创建实例时未提供。

错误示例

# 错误:未传入__init__要求的必填参数
p = Perceptron()

正确创建方式

传入所有必填参数,或给__init__参数设置默认值避免必填限制:

# 方式1:传入必填参数
p = Perceptron(eta=0.1, n_iter=50)

# 方式2:给__init__参数加默认值(推荐,避免后续传参遗漏)
class Perceptron:
    def __init__(self, eta=0.01, n_iter=10):
        self.eta = eta
        self.n_iter = n_iter
        # 其他初始化代码

完整修正代码示例

import numpy as np
from mlxtend.plotting import plot_decision_regions
import matplotlib.pyplot as plt

# 正确定义Perceptron类
class Perceptron:
    def __init__(self, eta=0.01, n_iter=10):
        self.eta = eta
        self.n_iter = n_iter
        self.w_ = None
        self.errors_ = []

    def fit(self, X, y):
        self.w_ = np.zeros(1 + X.shape[1])
        self.errors_ = []
        for _ in range(self.n_iter):
            errors = 0
            for xi, target in zip(X, y):
                update = self.eta * (target - self.predict(xi))
                self.w_[1:] += update * xi
                self.w_[0] += update
                errors += int(update != 0.0)
            self.errors_.append(errors)
        return self

    def net_input(self, X):
        return np.dot(X, self.w_[1:]) + self.w_[0]

    def predict(self, X):
        return np.where(self.net_input(X) >= 0.0, 1, -1)

# 模拟数据
X_ex = np.array([[1, 2], [2, 3], [3, 1], [4, 2]])
y_ex = np.array([-1, -1, 1, 1])

# 正确创建实例并训练
p = Perceptron(eta=0.1, n_iter=20)
p.fit(X_ex, y_ex)

# 正确调用决策边界绘制方法
plot_decision_regions(X_ex, y_ex, classifier=p)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Perceptron Decision Regions')
plt.show()

额外注意点

  • 如果是自定义的plot_decision_regions方法,务必确认参数顺序:第一个参数应为特征数组X,而非分类器实例。
  • 给__init__参数设置默认值,能大幅降低后续创建实例时的参数遗漏问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:45:55