Hallo,
bin gerade dabei, mich in künstliche Intelligenz einzuarbeiten, damit sollte man, wie ich gehört habe erstmal mit ein paar standartmäßigen Algorithmen arbeiten, derzeit bin ich bei Linear Regression, dazu habe ich von einem Youtuber folgendes Script:
import pandas as pd
import numpy as np
import sklearn
from sklearn import linear_model
from sklearn.utils import shuffle
data = pd.read_csv("student-mat.csv", sep = ";")
data = data[["G1","G2", "G3", "studytime", "failures", "absences"]]
predict = "G3"
X = np.array(data.drop([predict],1))
y = np.array(data[predict])
x_train, x_test , y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size = 0.1)
linear = linear_model.LinearRegression()
linear.fit(x_train, y_train)
linear.score(x_test, y_test)
acc = linear.score(x_test, y_test)
print(acc)
print("Coefficient: \n",linear.coef_)
print("Intercept: \n", linear.intercept_)
predictions = linear.predict(x_test)
for x in range(len(predictions)):
print(predictions[x], x_test[x], y_test[x])
Eigentlich verstehe ich alles, bis auf das:
predictions = linear.predict(x_test)
for x in range(len(predictions)):
print(predictions[x], x_test[x], y_test[x])
warum will man x_test predicten? Das ist doch der input-Wert sozusagen. Das for x in range(len(predictions)): ist logisch, aber was macht der output, beziehungsweise, was predictions[X]? Woher soll der Wert kommen? Genau das selbe bei x_test[x] was soll das [x] ?Heißt das, das x_test nochmal einen x Wert hat? Und wenn ja, was ist das für ein Wert und woher kommt der?
Ki Linear Regression Algorithmus
- __blackjack__
- User
- Beiträge: 13116
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Raphael_155: Wenn Du Indexzugriffe nicht kennst, würde ich ein Grundlagentutorial empfehlen. Es gibt eines in der Python-Dokumentation, das man IMHO mal durchgearbeitet haben sollte.
Wobei ``for i in range(len(sequence)):`` in Python ein „anti pattern“ ist, weil man direkt über die Elemente von Sequenzen iterieren kann, ohne den unnötigen Umweg über einen Laufindex. Wenn man über mehrere Sequenzen ”parallel” iterieren möchte, gibt es die `zip()`-Funktion:
Wobei ``for i in range(len(sequence)):`` in Python ein „anti pattern“ ist, weil man direkt über die Elemente von Sequenzen iterieren kann, ohne den unnötigen Umweg über einen Laufindex. Wenn man über mehrere Sequenzen ”parallel” iterieren möchte, gibt es die `zip()`-Funktion:
Code: Alles auswählen
for values in zip(predictions, x_test, y_test):
print(*values)
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Es ist eine Standardtechnik in ML, Trainingsdaten aufzuspalten in zwei Mengen: eine größere, mit der man trainiert. Und eine kleinere, mir der man das Training gegenprüft. Damit verringert man die Chance auf over-fitting, wenn man mir nur einer Menge Arbeitet. Konzeptionell sind das ja quasi „neue“ Daten, die das Modell noch nie gesehen hat.
-
- User
- Beiträge: 23
- Registriert: Sonntag 12. September 2021, 06:01
Ja, also, das es einmal die Trainingsdaten und Testdaten gibt habe ich verstanden, ich verstehe nur nicht genau, warum da x_test[x] steht was ist das x in den eckigen klammern für ein Wert? Und dasselbe dann natürlich auch bei dem y wert. Weil ich meine ich habe doch bereits einen x_test erstellt hat dieser also noch einen x Wert?
-
- User
- Beiträge: 23
- Registriert: Sonntag 12. September 2021, 06:01
Ok, also ich habe mir jetzt mal so ein bisschen indexzugriffe angesehen, also wenn ich das richtig verstehe, kann ich damit auf Tabelleneinträge zugreifen. Also rufe ich sozusagen den ersten Tablleneintrag von x_test auf, ist das so richtig? Was ist dann aber der 2. Tabellenwert, wenn x der erste ist? Und was ist genau ein pattern also klar, wie es das Wort schon sagt, gibt es eine allgemeine Form an, aber was kann ich mir darunter vorstellen, beziehungsweise, was meinst du @__blackjack__ mit anti-pattern?
Danke für eure Hilfe!
Danke für eure Hilfe!
Zuletzt geändert von Raphael_155 am Sonntag 21. August 2022, 23:10, insgesamt 1-mal geändert.
Hallo,
Vielleicht hilft dir dieses Beispiel es zu verstehen. Lass das mal laufen:
Der zweite Teil ist dass das @__blackjack__ gemeint hat mit dem direkt iterieren.
Grüße
Dennis
'x' ist der Index.Raphael_155 hat geschrieben: ↑Sonntag 21. August 2022, 22:50 was ist das x in den eckigen klammern für ein Wert?
Vielleicht hilft dir dieses Beispiel es zu verstehen. Lass das mal laufen:
Code: Alles auswählen
def main():
simple_list = ['a', 'b', 'c']
for x in range(len(simple_list)):
print(x)
print(simple_list[x])
# besser/einfacher
for x in simple_list:
print(x)
if __name__ == "__main__":
main()
Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
-
- User
- Beiträge: 23
- Registriert: Sonntag 12. September 2021, 06:01
@Dennis89 Ah, ok danke, das ist mir garnicht aufgefallen, dass ich bei der for loop ja for x in range habe, also ist das x das aus der for Schleife, ok danke. Ich denke aber ehrlich gesagt, dass mir der Begriff Index nicht ganz bewusst ist, also was wird denn letztendlich in x gespeichert?
- __blackjack__
- User
- Beiträge: 13116
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Raphael_155: 1. Arbeite ein Grundlagentutorial durch. 2. Lies die Dokumentation von den beteiligen Funktionen. 3. Probler das einfach mal in einer Python-Shell aus und schau Dir an was für Werte und Typen die Teilausdrücke haben.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 23
- Registriert: Sonntag 12. September 2021, 06:01
Ok, vielen Dank, für eure Hilfe!
Man will nicht x_test vorhersagen, sondern für die Eingabe von x_test die Ausgabe y_test vorhersagen. Anders gesagt: die Testdaten werden der Vorhersagefunktion übergeben, und die würde dann im Idealfall die vorherzusagenden Zielwerte y_test zurückgeben. Das wird sie in der Regel nicht zu 100% tun, es sei denn Deine Daten sind sehr linear und Dein Modell sehr gut trainiert, und deswegen müssen die vorhergesagten Werte "predictions" mit den echten Werten y_test verglichen werden.Raphael_155 hat geschrieben: ↑Sonntag 21. August 2022, 11:35 Eigentlich verstehe ich alles, bis auf das:warum will man x_test predicten? Das ist doch der input-Wert sozusagen. Das for x in range(len(predictions)): ist logisch, aber was macht der output, beziehungsweise, was predictions[X]? Woher soll der Wert kommen? Genau das selbe bei x_test[x] was soll das [x] ?Heißt das, das x_test nochmal einen x Wert hat? Und wenn ja, was ist das für ein Wert und woher kommt der?Code: Alles auswählen
predictions = linear.predict(x_test) for x in range(len(predictions)): print(predictions[x], x_test[x], y_test[x])
Die Technik, die hier zum Vergleich angewendet wird -- nämlich die simple Anzeige --, funktioniert zwar für überschaubare Datenmengen, aber... sklearn enthält eigens Funktionen für Metriken zur Bewertung der Testergebnisse. Die Dokumentation zu diesen Metriken findest Du hier [1].
[1] https://scikit-learn.org/stable/modules ... ation.html