Seite 1 von 1

Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 11:35
von Raphael_155
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?

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 12:28
von __blackjack__
@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)

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 13:18
von __deets__
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.

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 22:50
von Raphael_155
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?

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 23:05
von Raphael_155
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!

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 23:09
von Dennis89
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

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 23:14
von Raphael_155
@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?

Re: Ki Linear Regression Algorithmus

Verfasst: Sonntag 21. August 2022, 23:26
von __blackjack__
@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.

Re: Ki Linear Regression Algorithmus

Verfasst: Montag 22. August 2022, 13:44
von Raphael_155
Ok, vielen Dank, für eure Hilfe!

Re: Ki Linear Regression Algorithmus

Verfasst: Dienstag 23. August 2022, 20:34
von LukeNukem
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