Perceptron和python-TypeError出现了,但为什么?

Perceptron和python-TypeError出现了,但为什么?,python,perceptron,Python,Perceptron,我正试图用python3编写一个感知器算法。我在学习塞巴斯蒂安·拉什卡的一本书。他的代码可以在这里找到:() 很遗憾,我无法找出错误的原因: TypeError:对象()不接受任何参数 以及如何处理它 我首先使用了PyCharm,现在我正在与Jupiter一步一步地测试这个问题。我甚至从S.Raschka提供的GitHub存储库中复制了完整的代码示例。但即使是这样,我也会犯同样的错误,这让我很困惑,因为这意味着它可能不仅仅是一个打字错误 import numpy as np import pan

我正试图用python3编写一个感知器算法。我在学习塞巴斯蒂安·拉什卡的一本书。他的代码可以在这里找到:()

很遗憾,我无法找出错误的原因: TypeError:对象()不接受任何参数 以及如何处理它

我首先使用了PyCharm,现在我正在与Jupiter一步一步地测试这个问题。我甚至从S.Raschka提供的GitHub存储库中复制了完整的代码示例。但即使是这样,我也会犯同样的错误,这让我很困惑,因为这意味着它可能不仅仅是一个打字错误

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap


class Perceptron(object):
    """ Perzeptron Klassifizierer

Parameter
---------
eta : float
    Lernrate (zwischen 0.0 und 1.0)
n_iter : int
    Durchläufe der Trainningsdatenmenge

Attribute
---------
w_ : 1d-array
    Gewichtugen nach Anpassungen
errors_ : list
    Anzahl der Fehlerklassifizerungen pro Epoche

"""


def __init__(self, eta=0.01, n_iter=10):
    self.eta = eta
    self.n_iter = n_iter


def fit(self, X, y):
""" Anpassungen and die Trainingsdaten

Parameter
---------
X : {array-like}, shape = [n_samples, n_features]
    Trainingsvektoren, n_samples ist
    die Anzahl der Objekte und
    n_features ist die Anzahl der Merkmale
y : array-like, shape = [n_samples]
    Zielwerte

Rückgabewert
------------
self : object

"""
    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):
    """ Nettoeingabe berechnen"""
    return np.dot(X, self.w_[1:]) + self.w_[0]

    def predict(self, X):
    """Klassenbezeichnung zurückgeben"""
        return np.where(self.net_input(X) >= 0.0, 1, -1)

df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-    databases/iris/iris.data', header=None)

df.tail()

# Expected result:
# A table with given numbers will be shown
# Now we are plotting everything and will see a given chart:

y = df.iloc[0:100, 4].values
y = np.where(y == 'Iris-setosa', -1, 1)
X = df.iloc[0:100, [0, 2]].values

plt.scatter(X[:50, 0], X[:50, 1], color='red', marker='o',     label='setosa')
plt.scatter(X[50:100, 0], X[50:100, 1], color='blue', marker='x',   label='versicolor')
plt.xlabel('Länge des Kelchblatts [cm]')
plt.ylabel('Länge des Blütenblatts [cm]')
plt.legend(loc='upper left')
plt.show()

#Error appears here:

ppn = Perceptron(eta=0.1, n_iter=10)
ppn.fit(X, y)
plt.plot(range(1, len(ppn.errors_) + 1), ppn_errors_,
         marker='o')
plt.xlabel('Epochen')
plt.ylabel('Anzahl der Updates')
plt.show()

The given Error tells me the following"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call >>last)
<ipython-input-29-abc085daeef7> in <module>
----> 1 ppn = Perceptron(eta=0.1, n_iter=10)
      2 ppn.fit(X, y)
      3 plt.plot(range(1, len(ppn.errors_) + 1), ppn_errors_,
      4          marker='o')
      5 plt.xlabel('Epochen')

TypeError: object() takes no parameters
------------------------------------------------------------------------
将numpy导入为np
作为pd进口熊猫
将matplotlib.pyplot作为plt导入
从matplotlib.colors导入ListedColormap
类感知器(对象):
“佩泽普特朗·克拉西菲泽尔
参数
---------
预计到达时间:浮动
Lernrate(zwischen 0.0和1.0)
n_iter:int
培训计划
属性
---------
一维阵列
格威奇图根酒店
错误:列表
埃博切大学
"""
定义初始值(自,eta=0.01,n_iter=10):
self.eta=eta
self.n_iter=n_iter
def配合(自、X、y):
“Anpassungen和模具培训日期”
参数
---------
X:{array like},shape=[n_样本,n_特征]
培训维克托伦,n_样本列表
我的目标是什么
n_的特点是在梅克马尔
y:类似数组的,形状=[n_示例]
齐尔韦特
吕加贝维特
------------
自我:对象
"""
self.w_uz=np.zero(1+X.shape[1])
self.errors[]
对于uu-in-range(self.n_u-iter):
错误=0
对于席,在zip(x,y)中的目标:
更新=self.eta*(目标-self.predict(xi))
W.[席:1:] =更新**
self.w_u[0]+=更新
错误+=int(更新!=0.0)
self.errors\uu.append(错误)
回归自我
def净输入(自身,X):
“Nettoeingabe berechnen”
返回np.dot(X,self.w_u[1:])+self.w_[0]
def预测(自我,X):
“Klassenbezeichung zurückgeben”
返回np.where(self.net_输入(X)>=0.0,1,-1)
df=pd.read\u csv('https://archive.ics.uci.edu/ml/machine-learning-    数据库/iris/iris.data',标题=无)
df.tail()
#预期结果:
#将显示带有给定数字的表格
#现在,我们正在绘制所有内容,并将看到给定的图表:
y=df.iloc[0:100,4]。值
y=np.其中(y=='Iris setosa',-1,1)
X=df.iloc[0:100,[0,2]].值
plt.scatter(X[:50,0],X[:50,1],color='red',marker='o',label='setosa')
plt.scatter(X[50:100,0],X[50:100,1],color='blue',marker='X',label='versicolor')
plt.xlabel('Länge des Kelchblatts[cm]”)
plt.ylabel('Länge des Blütenblatts[cm]”)
plt.图例(位置='左上')
plt.show()
#此处出现错误:
ppn=感知器(eta=0.1,n_iter=10)
ppn.配合(X,y)
plt.绘图(范围(1,长度(ppn.误差)+1),ppn.误差,
标记(='o')
plt.xlabel('Epochen')
plt.ylabel('Anzahl der Updates')
plt.show()
给定的错误告诉我以下信息“
---------------------------------------------------------------------------
TypeError回溯(最近一次呼叫>>最后一次)
在里面
---->1 ppn=感知器(eta=0.1,n_iter=10)
2件装配件(X,y)
3 plt.绘图(范围(1,长度(ppn.误差)+1),ppn.误差,
4标记(='o')
5 plt.xlabel(‘Epochen’)
TypeError:对象()不接受任何参数
------------------------------------------------------------------------
如上所示,代码一直工作到最后几行,取决于“ppn=感知器(eta…)等”的部分。我期望另一个图,一个图表,错误分类器的数量与时代的数量相反。我是否忘记了任何库?我只是不明白。。。
非常感谢

您定义了类
Perzeptron
,但创建了
Perceptron的实例(c而不是z)。似乎您在ipython会话的前面定义了
Perceptron
,但没有定义包含两个参数的
\uuu init\uuuu
方法。

我仍然不知道答案,但我在windows环境中的PyCharm版本上输入了相同的代码,并且它起到了作用。
因此,我不确定如何关闭一个问题。可能是某个管理员能够关闭此线程?或者让我知道如何自己关闭此线程。

尝试修复链接。它有空间请修复缩进,很难确定在哪个缩进级别需要哪些代码,因此很难提供帮助。我看到该类被拼写为<代码>Perzeptron
,但您正在尝试实例化
Perceptron
,即使您提供的代码中没有定义后者。@Soubhi,很抱歉,我的代码中有正确的链接。如果我继续“编辑”“在stackoverflow中,显示的链接没有任何空格。因此,我很抱歉,但我不知道如何修复空格,如果在编辑模式下,没有显示空格…有什么想法吗?@Random Davis,谢谢。我已经看到了这一点,并在我的代码中修复了它。但这似乎不是解决方案:-(。因此,Perceptron是我代码第一行中的一个类。使用fit方法和error,我应该能够使用Perceptron为ppn提供一些参数。但不知何故,它不起作用。也许我应该尝试Python 2.7而不是3x。再次感谢。