Seite 1 von 1

Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:08
von MathGenie123

Code: Alles auswählen

np.random.seed(11111)
max_k_to_try = 20

def robust_kmeans(data, k, howmany=20):
    score = 100000000
    for i in range(howmany):
        point_classification, centroids = konvergenz(data, k, noisy=False)
        total_inner_variance = np.nansum([np.var(data[point_classification == pointclass])
                                          for pointclass in range(k)])
        group_variance = np.var(centroids)
        new_score = group_variance / total_inner_variance
        if(new_score < score):
            final_classification, final_centroids = point_classification, centroids
            score = new_score
    return final_classification, final_centroids, score

elbow_values = [robust_kmeans(feature, k)[2] for k in range(2, max_k_to_try+1)]
fig, ax = plt.subplots()
fig.suptitle("elbow plot")
ax.plot(np.arange(2, max_k_to_try+1), elbow_values)
plt.show()


ich habe im internet nachgeschaut, dort steht dass man global deklarieren muss. Ich habe dies auch versucht aber klappt irgendwie dennoch nicht ganz

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:20
von pillmuncher
So wird das nichts. Statt Code aus dem Internet zu kopieren, den du nicht verstehst, und dann hier zu fragen, warum der nicht geht, solltest du erst mal das offizielle Python Tutorial durcharbeiten. Es ist nicht übermäßig lang. Das durchzuarbeiten braucht ein bis zwei Nachmittage.

Bonus: global solltest du nicht verwenden. Das macht dein Programm unübersichtlich und fehleranfällig, weil du sehr bald nicht mehr nachvollziehen kannst, wo und wann der globalen Variable Werte zugewiesen werden.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:23
von sparrow
Ergänzend:

global hat hier nichts mit deinem Problem zu tun.
Die Fehlermeldung ist auch recht eindeutig: Du versuchst auf eine Variable zuzugreifen, die nicht deklariert ist.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:28
von MathGenie123
Sie wurde nirgendswo deklariert ! der fehler kommt von wo anders

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:29
von /me
`final_classification` wird nur definiert wenn die Bedingung bei `if` erfüllt ist. Ist diese Bedingung nie erfüllt, dann gibt es diese Variable nicht.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:30
von /me
MathGenie123 hat geschrieben: Dienstag 31. Mai 2022, 13:28 Sie wurde nirgendswo deklariert ! der fehler kommt von wo anders
Genau das ist ja dein Problem, dass diese Variable nicht definiert wurde. Wie willst du etwas zurückgeben das es nicht gibt?

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:38
von MathGenie123
okay, ja stimmt. Leider macht der nicht das, was ich möchte

Code: Alles auswählen

np.random.seed(11111)
max_k_to_try = 20

def robust_kmeans(data, k, howmany=20):
    final_classification = None
    final_centroids = None
    score = 100000000
    for i in range(howmany):
        point_classification, centroids = konvergenz(data, k, noisy=False)
        total_inner_variance = np.nansum([np.var(data[point_classification == pointclass])
                                          for pointclass in range(k)])
        group_variance = np.var(centroids)
        new_score = group_variance / total_inner_variance
        if(new_score < score):
            final_classification, final_centroids = point_classification, centroids
            score = new_score
            
    return final_classification, final_centroids, score

elbow_values = [robust_kmeans(feature, k)[2] for k in range(2, max_k_to_try+1)]
fig, ax = plt.subplots()
fig.suptitle("elbow plot")
ax.plot(np.arange(2, max_k_to_try+1), elbow_values)
plt.show()



ich will einen elbow plot printen.

Der code stammt aus der Vl

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 13:51
von __deets__
Dann ist das ne schlechte Vorlesung. Offensichtlich ist dein score zu niedrig, so dass das if niemals durchlaufen wird. Wie pillmuncher schon schrieb, das zu erkennen ist Python Grundlage. Ohne die wird's nicht gehen.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 14:00
von __blackjack__
An der Stelle würde es sich anbieten `score` mit Unendlich zu initialisieren, denn da ist dann jeder `new_score` kleiner, der im ersten Durchlauf vorkommen könnte.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 14:05
von MathGenie123
wie macht man das genau ?

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 14:32
von derElch
So:

Code: Alles auswählen

score = float('inf')
Erklärung hier:
https://www.stechies.com/python-infinit ... 20infinity.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 14:55
von __blackjack__
Oder falls man `math` oder `numpy` bereits importiert hat, ginge auch `math.inf` oder `numpy.inf`.

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 18:21
von MathGenie123
wenn ich es so mache wird nichts mehr geprinet. Der Fehler liegt irgendwie woanders

Re: Fehlermeldung ocal variable 'final_classification' referenced before assignment

Verfasst: Dienstag 31. Mai 2022, 20:08
von __deets__
Was machst du wie? Kann hier keiner sehen. Also bitte: Code zeigen.