Python (Lineare Regression)?
Hallo ihr Lieben,
meine Gruppe und ich haben Probleme bei einer Aufgabe und hoffen uns kann hier jemand behilflich sein.
Wir müssen eine Lineare Regression mit zwei Merkmalen durchführen und in einem Scatter Plot mit einer Regressionsgeraden repräsentieren.
Ich füge euch ein Bild hinzu, damit ihr sehen könnt was wir bis jetzt haben, nur haben wir Probleme die Regressionsgerade hinzuzufügen.
Wir haben versucht Befehle wie plot_regression_line (x, y) oder plt.plot(x, ymodel) zu benutzen, hat aber leider nichts gebracht und wir kommen absoulut nicht weiter. Zudem wissen wir nicht unter was die regression fällt und ob import matplotlib.pyplot as plt ausreicht oder ob es numpy oder etwas anderes sein muss.
Vielen Dank im Voraus!
x = [145, 130, 130, 120, 120, 140, 140, 120, 172, 150, 140, 130, 130, 110, 150]
y =[233, 250, 204, 236, 354, 192, 294, 263, 199, 168, 239, 275, 266, 211, 283]
plt.scatter(x,y)
plt.xlabel("puls")
plt.ylabel("Cholesterin")
plt.show()
Kannst du vielleicht uns den rohen Code zu Verfügung stellen und kein Bild (sodass man es einfach kopieren kann und nicht abtippen muss)
Habe es in der Fragestellung hinzugefügt :)
Warum googelt ihr das nicht einfach?
Haben wir schon versucht, Stell dir vor?
3 Antworten
Ihr könntet mit sklearn die Lineare Regressionsrate berechnen und mit matplotlib es reinzeichnen.
from sklearn import linear_model
import numpy as np
import matplotlib.pyplot as plt
x= np.array( [145, 130, 130, 120, 120, 140, 140, 120, 172, 150, 140, 130, 130, 110, 150]).reshape(-1, 1)
y= [233, 250, 204, 236, 354, 192, 294, 263, 199, 168, 239, 275, 266, 211, 283]
lm = linear_model.LinearRegression()
lm.fit(x, y)
plt.scatter(x, y, color = "r",marker = "o", s = 30) #https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers
y_pred = lm.predict(x)
plt.plot(x, y_pred, color = "k")
plt.ylabel("Cholesterin")
plt.xlabel("puls")
plt.show()
Alternativ könnte man es auch so machen:
import matplotlib.pyplot as plt
from scipy import stats
x= [145, 130, 130, 120, 120, 140, 140, 120, 172, 150, 140, 130, 130, 110, 150]
y= [233, 250, 204, 236, 354, 192, 294, 263, 199, 168, 239, 275, 266, 211, 283]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y, color = "r",marker = "o", s = 30)
plt.plot(x, mymodel, color = "k")
plt.ylabel("Cholesterin")
plt.xlabel("puls")
plt.show()
braucht Ihr eigentlich noch Hilfe bei "Programmierung (Python, Jupyter und csv Dateien"?
Nein nein die Frage hat sich geklärt. Vielen Dank auch für die Frage unten bezüglich der Marker und dem s = :))
Könntest du mir vielleicht noch erklären was marker = o und s = 30 bedeutet :) ?
Marker heißt einfach, welche Form die Punkte haben sollen (Das sind z.B. Beispielmarker: https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers)
S bedeutet, wie groß ein Marker sein soll. Und die Einheit ist glaub ich in pixel (also s = 30 = 30px im Durchmesser)
Ich hoffe ich Ihr versteht jetzt was die Zusatzvariablen machen und noch viel Glück bei eurem Projekt (und wenn ihr noch weitere Fragen habt, dann könnt ihr sie mir natürlich stellen :) )
Haben wir schon versucht, Stell dir vor?
Wenn ich das mache kommt sofort: https://www.w3schools.com/python/python_ml_linear_regression.asp
Die Seite hatten wir auch, aber ab dem Wort slope Funktioniert es bei uns in Python nicht
Guck mal hier:
https://stackoverflow.com/questions/6148207/linear-regression-with-matplotlib-numpy
oder hier:
https://statologie.de/lineare-regression-python/
oder auch hier:
Es hat funktioniert, vielen vielen Dank :)