Wert des Attributes in einer For schleife ändern

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
nichtSoGuter
User
Beiträge: 92
Registriert: Mittwoch 13. April 2022, 17:40

Ich möchte den Wert einer Instanz in Abhängigkeit der Iterationsvariable ändern. Ich weiß aber leider nicht wie ich das hinbekommen soll
Ich habe folgendes getestet, was aber nicht funktioniert hat.

Das Attribut C soll die Werte der Iteratorvariable "i" annehmen.
Wenn ich die returnte "modellist" printe dann habe ich bei allen Modellen für das Attribut C den Wert 9

Code: Alles auswählen

model = LogisticRegression(C = 0)

def tests(model,hyperparametername_als_string ,suchbereich= np.arange(1,10)):
  modellist = []

  for i in suchbereich :
    setattr(model,hyperparametername_als_string, i)
    modellist.append(model)

  return modellist

tests(model, "C")
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Du fügst mit `modellist.append(model)` ja auch nur ein einziges Model mehrmals zur Liste hinzu. Die Liste hat nachher mehrere Einträge, aber alle davon sind das gleiche Objekt.
Sirius3
User
Beiträge: 18260
Registriert: Sonntag 21. Oktober 2012, 17:20

Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht 2. Deine Leerzeichensetzung ist sehr unregelmäßig und hält sich nicht an die Konventionen.
Magische Dinge wie setattr sollte man sehr sparsam einsetzen, vor allem weil hier die Verallgemeinerung eine triviale Schleife sehr kompliziert macht.
Du mußt für jeden C-Parameter ein neues Model erzeugen:

Code: Alles auswählen

models = [LogisticRegression(C=i) for i in range(1, 10)]
Antworten