Я пытаюсь закодировать алгоритм Perceptron в python3.Я следую примеру книги Себастьяна Рашки.Его код можно найти здесь: (https://github.com/rasbt/python-machine-learning-book-2nd-edition).
К сожалению, я не могу понять, почему появляется ошибка: TypeError: object () не принимает параметры и как ее обработать.
У меня естьСначала я использовал PyCharm, и теперь я шаг за шагом тестирую эту проблему с Jupiter. Я даже полностью скопировал пример кода из репозитория GitHub, предложенного S. Raschka. Но даже тогда я получаю ту же ошибку, которая на самом деле меня смущает, потому чтоэто означает, что это, вероятно, не просто опечатка.
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
------------------------------------------------------------------------
Как показано выше, код работает до последних нескольких строк и зависит от части с "ppn = Perceptron (eta ...) и т. д."Я ожидал другой график, диаграмму с количеством ложных классификаторов, противоположных количеству эпох. Я забыл какую-либо библиотеку? Я просто не понимаю ... Большое спасибо