Undefined Name - Ich finde den Fehler nicht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TomPyt
User
Beiträge: 17
Registriert: Mittwoch 29. Januar 2020, 11:28

Hallo zusammen,

ich erhalte in dem nachfolgenden Code an mehreren Stellen die Meldung "undefined name" und kann den oder die Fehler nicht finden.

Leider weiß ich nicht, wie ich hier eine Nummerierung für die Zeilen einfügen kann. Von daher habe ich die entsprechenden Zeilen mit dem Wort FEHLER markiert. Ich hoffe, dass das hilft.

Ich würde mich über Hilfe freuen.

Danke und mfG
TomPyt

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

class AdalineGD(object):

    def __init__(self, eta=0.01, n_iter=50, random_state=1):
        self.eta = eta
        self.n_iter = n_iter
        self.random_state = random_state

    def fit(self, X, y):
        rgen = np.random.RandomState(self.random_state)
        self.w_ = rgen.normal(loc=0.0, scale=0.01, 
                              size=1 + X.shape[1])
        self.cost_ = []
        
        for i in range(self.n_iter):
            net_input = self.net_input(X)
            output = self.activation(net_input)
            errors = (y - output)
            self.w_[1:] += self.eta * X.T.dot(errors)
            self.w_[0] += self.eta * errors.sum()
            cost = (errors**2).sum() / 2.0
            self.cost_.append(cost)
        return self
    
    def net_input(self, X):
#        """Calculate net input"""
        return np.dot(X, self.w_[1:]) + self.w_[0]

    def activation(self, X):
#        """Lineare Aktivierungsfuktion berechnen"""
        return X

    def predict(self, X):
#        """Return class label after unit step""" 
        return np.where(self.net_input(X) >= 0.0, 1, -1)
    
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))
    
ada1 = AdalineGD(n_iter=10, eta=0.01).fit(X, y)	#FEHLER: undefined name 'X'	undefined name 'y'
ax[0].plot(range(1, len(ada1.cost_) + 1), np.log10(ada1.cost_), marker='o')
ax[0].set_xlabel('Epochs')
ax[0].set_ylabel('log(Sum-squared-error)')
ax[0].set_title('Adaline - Learning rate 0.01')
    
ada2 = AdalineGD(n_iter=10, eta=0.0001).fit(X, y)	#FEHLER: undefined name 'X'	undefined name 'y'
ax[1].plot(range(1, len(ada2.cost_) + 1), ada2.cost_, marker='o')
ax[1].set_xlabel('Epochs')
ax[1].set_ylabel('Sum-squared-error')
ax[1].set_title('Adaline - Learning rate 0.0001')
        
plt.show()

print('standardize features')
X_std = np.copy(X)							#FEHLER: undefined name 'X'
X_std[:, 0] = (X[:, 0] - X[:, 0].mean()) / X[:, 0].std()	#FEHLER: undefined name 'X'
X_std[:, 1] = (X[:, 1] - X[:, 1].mean()) / X[:, 1].std()	#FEHLER: undefined name 'X'
    
ada = AdalineGD(n_iter=15, eta=0.01)
ada.fit(X_std, y)								#FEHLER: undefined name 'y'
    
plot_decision_regions(X_std, y, classifier=ada)	#FEHLER: undefined name 'plot_decision_regions'	undefined name 'y'
plt.title('Adaline - Gradient Descent')
plt.xlabel('sepal length [standardized]')
plt.ylabel('petal length [standardized]')
plt.legend(loc='upper left')

plt.show()

plt.plot(range(1, len(ada.cost_) + 1), ada.cost_, marker='o')
plt.xlabel('Epochs')
plt.ylabel('Sum-squared-error')

plt.show()
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ja nun - es gibt X und y halt nicht. Das Skript kommt doch garantiert von woanders, wie sieht das denn im Original aus?
TomPyt
User
Beiträge: 17
Registriert: Mittwoch 29. Januar 2020, 11:28

Hallo, das habe ich völlig übersehen :shock:
Ich habe in mehreren Fenstern gearbeitet, mit dem Code rumprobiert und so ist dann das Chaos entstanden, bei dem ich dann den Durchblick verloren habe,

Den Code habe ich übrigens von hier
https://github.com/rasbt/python-machine ... ch02.ipynb

Ich starte jetzt nochmal neu und vermeide das Chaos. Dann sollte es jetzt auch alles hinhauen.

Nur zur Info: Ich habe den Code extra nicht direkt 1:1 übernommen und gestartet, um etwas rumprobieren zu können.
Ich bin noch dabei mich in Python einzuarbeiten und aus Fehlern kann man ja gut lernen.. auch wenn es so einfache Fehler wie in meinem Fall sind :D
Antworten