@topy: Da bekommt man offensichtlich eine `NameError`-Ausnahme weil `size2` nicht definiert ist. Du solltest Code den Du zeigst auch laufen lassen und sicherstellen, das tatsächlich die Fehlermeldung kommt, die Du behauptet hast.
Das `size` in dem Code geht nicht für `size2` weil das kein zweidimensionales Array ist. Also wo kommt `size2` her?
Anmerkungen zum Quelltext: `datasets` wird importiert, aber nicht verwendet.
Das Semikolon ist in Python zum trennen von zwei Anweisungen in der selben Zeile da, also überflüssig wenn die zweite Anwendung die leere Anweisung ist.
Containertypen bekommen normalerweise einen Namen in Mehrzahl. Den `house_size` steht ja nicht für *eine* Hausgrösse, sondern für *mehrere* Hausgrössen.
Es ist ungünstig, weil fehleranfällig, parallele Listen zu führen. Wenn Hauspreis und Grösse jeweils pro Index zusammen gehören, sollten die Werte nicht in verschiedenen Listen stehen. Für die weitere Verarbeitung braucht man die getrennt, aber bei der Eingabe ist das fehleranfällig wenn zusammengehörende Daten vom Programmierer in zwei getrennten Listen gepflegt werden müssen.
`regression` könnte man auch ausschreiben. Abkürzungen sollte man vermeiden.
`graph` währe eher ein Name für einen Graphen statt für eine Funktion. Da sollte man etwas wählen was mehr nach einer Tätigkeit klingt.
`formular` heisst auf Deutsch „Vordruck“ oder „Formular“. Ich denke das sollte `formula` – „Formel“ heissen.
Beziehungsweise sollte das eigentlich so gar nicht existieren, denn es macht keinen Sinn hier einen Ausdruck als Zeichenkette zu übergeben und per `eval()` auszuwerten. `eval()` ist fast immer das falsche Werkzeug. Man würde hier eher eine Funktion übergeben, die `x` als Argument bekommt.
Zwischenstand:
Code: Alles auswählen
#!/usr/bin/env python3
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
def plot(function, data):
x = np.array(data)
plt.plot(x, function(x))
def main():
houses_data = [
(245, 1400),
(312, 1600),
(279, 1700),
(308, 1875),
(199, 1100),
(219, 1550),
(405, 2350),
(324, 2450),
(319, 1425),
(255, 1700),
]
house_prices = [price for price, _ in houses_data]
sizes = [size for _, size in houses_data]
regression = linear_model.LinearRegression()
regression.fit(size2, house_prices)
plot(
lambda x: regression.coef_ * x + regression.intercept_,
range(1000, 2700)
)
plt.scatter(size2, house_prices, color='black')
plt.ylabel('house_price')
plt.xlabel('size')
plt.show()
if __name__ == '__main__':
main()