Ki Linear Regression Algorithmus

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
Raphael_155
User
Beiträge: 23
Registriert: Sonntag 12. September 2021, 06:01

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?
Benutzeravatar
__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:

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Raphael_155
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?
Raphael_155
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!
Zuletzt geändert von Raphael_155 am Sonntag 21. August 2022, 23:10, insgesamt 1-mal geändert.
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,
Raphael_155 hat geschrieben: Sonntag 21. August 2022, 22:50 was ist das x in den eckigen klammern für ein Wert?
'x' ist der Index.

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()
Der zweite Teil ist dass das @__blackjack__ gemeint hat mit dem direkt iterieren.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Raphael_155
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?
Benutzeravatar
__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
Raphael_155
User
Beiträge: 23
Registriert: Sonntag 12. September 2021, 06:01

Ok, vielen Dank, für eure Hilfe!
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

Raphael_155 hat geschrieben: Sonntag 21. August 2022, 11:35 Eigentlich verstehe ich alles, bis auf das:

Code: Alles auswählen

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?
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.

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
Antworten