TODO für Tag 11 GridSearchCV einsetzen GridSearchCV habe ich ja schon am Tag 9 und Tag 10 verwendet, hier aber noch mal GridSearchCV im Detail. Bei GridSearchCV handelt es sich um ein einfaches Werkzeug, das hilft, die besten Hyperparameter für ein Modell systematisch zu finden. Statt sich auf Intuition oder Trial-and-Error zu verlassen, wird eine Gitter-Suche über alle Kombinationen der angegebenen Parameter durchgeführt. Dabei wird jedes Modell mit Cross-Validation evaluiert, um Überanpassung zu vermeiden und die Verlässlichkeit der Parameterwahl zu erhöhen. Beispiel: GridSearchCV testet alle Kombinationen im param_grid, was bei großen Netzen oder vielen Parametern schnell teuer wird. Alternativ kann man RandomizedSearchCV einsetzen, wenn man die Parameter zufällig testen möchte, aber trotzdem eine gute Lösung erwartet. Ausgabe: Das Bild visualisiert…
Kommentare sind geschlossenKategorie: Allgemein
TODO für Tag 10 Einführung in GradientBoostingClassifier Der GradientBoostingClassifier in scikit-learn ist ein Klassifikator (Es gibt für die Regression auch einen GradientBoostingRegressor), der auf dem Prinzip des Gradientenboostings basiert. Dabei handelt es sich um eine Methode des Ensemble-Lernens, bei der eine Sequenz von Modellen schrittweise trainiert werden. Jedes neue Modell versucht, die Fehler der vorherigen Modelle zu korrigieren, indem es auf die Residuen (Die Residuen geben an, wie stark das Modell an einer bestimmten Stelle „danebenliegt“) der bisherigen Vorhersagen angepasst wird. Im Laufe der Iterationen entsteht ein zusammengesetztes Modell, das komplexe Zusammenhänge in den Daten erfassen kann. Beispiel: In dem Beispiel wird zuerst wird ein künstlicher Datensatz mit make_classification generiert und dieser anschließend mithilfe von train_test_split in Trainings- und Testdaten aufgeteilt. Danach wird der…
Kommentare sind geschlossenTODO für Tag 9 RandomForestClassifier anwenden Der RandomForestClassifier ist ein leistungsfähiger und vielseitiger Classifier. Statt nur einen einzigen Entscheidungsbaum zu trainieren, baut der Random Forest viele Bäume auf zufälligen Daten-Subsets und Merkmals-Subsets auf. Das Ergebnis jedes Baums wird als Voting betrachtet, und die Klasse mit den meisten Votes wird als Gesamtergebnis ausgegeben. Beispielcode Der Python-Code lädt einmal mehr den Iris-Datensatz :-), teilt ihn in Trainings- und Testdaten auf und trainiert damit ein Random Forest Klassifizierungsmodell auf den Trainingsdaten. Mit der predict Funktion macht er eine Vorhersage auf den Testdaten und bewertet schließlich die Leistung des Modells, indem die Genauigkeit der Vorhersagen im Vergleich zu den tatsächlichen Labels berechnet und ausgegeben wird. Accuracy: 1.00 Um die Feature Importance eines Random Forest…
Kommentare sind geschlossenTODO für Tag 8 Der DecisionTreeClassifier Der DecisionTreeClassifier aus scikit-learn ist ein einfacher, schneller und interpretierbarer Klassifikator, der auf Entscheidungsbäumen basiert. Er lernt Entscheidungsregeln, indem er die Trainingsdaten rekursiv nach den „besten“ Attributen aufspaltet, um die Klassen möglichst sauber zu trennen. Hier ein einfaches Beispiel, bei dem der Iris-Datensatz mit dem DecisionTreeClassifier klassifiziert wird: Mit dem Code erhält man eine Genauigkeit von 100% und das beste darin ist, dass man mit plot_tree auch noch den Entscheidungsbaum visualisieren kann. Visualisierung des Baumes mit plot_tree Der Baum zeigt genau auf, wie das Modell zu einer Klassifikation eines Datensatzes kommt. Linker Teil (True, also petal length <= 2.45): Rechter Teil (False, also petal length > 2.45): Linker Zweig (petal length <= 4.75): Rechter…
Kommentare sind geschlossenTODO für Tag 7 Neue Polynomiale Features mit PolynomialFeatures erzeugen Mit PolynomialFeatures von sklearn.preprocessing kann man aus bestehenden Features neue Features erzeugen, indem man die bestehenden Features potenziert oder multipliziert. So können komplexere Zusammenhänge zwischen den Features und dem Zielwert abgebildet werden, die mit rein linearen Modellen nicht abgebildet werden können. Hier ein Beispiel: Der Dataframe df enthalt nun folgende Werte x1 x2 x1^2 x1 x2 x2^2 0 2.0 3.0 4.0 6.0 9.0 1 3.0 5.0 9.0 15.0 25.0 2 5.0 7.0 25.0 35.0 49.0 Durch die Anwendung von PolynomialFeatures bleiben die ursprünglichen Features (x1, x2) erhalten und es werden zusätzliche Features ergänzt. So schafft man neue Feature-Wechselwirkungen, die das Modell evtl. besser nutzen kann. Hier eine Grafische Darstellung zum…
Kommentare sind geschlossenPrompt Engineering ist eine wichtige Qualifikation um bessere Ergebnisse aus einem LLM zu erhalten. Der kostenlose Kurs „ChatGPT Prompt Engineering for Developers“ von DeepLearning.AI, zeigt in ein paar einfachen Lektionen, wie man Prompts schreibt und worauf man achten sollte. Ich habe den Kurs mal durchgearbeitet und dabei als LLM devstral verwendet. Nicht optimal, aber ein sehr gutes Modell zum Programmieren und die hier gestellten Aufgaben hat das Modell auch ohne Probleme gemeistert. Der Kurs wird von Isa Fulford und Andrew Ng geleitet und ist kostenlos. Er besteht aus den folgenden Videos zu denen dann immer ein Jupyter Notebook existiert, dass man direkt online ausführen kann. Hinweis: Wer denkt, dass „ChatGPT Prompt Engineering for Developers“ speziell auf die Bedürfnisse von Entwickler…
Kommentare sind geschlossenTODO für Tag 6 Unterschied zwischen Train/Test Split und Cross-Validation und cross_val_score verwenden Beim Train/Test Split wird der vorhandene Datensatz einmalig in zwei getrennte Teile aufgeteilt – einen Teil zum Trainieren des Modells und einen anderen zum Testen, ob das Modell etwas gelernt hat. Den scikit-learn Code zum splitten der Daten habe ich in den letzten 5 Tagen ja schon diverse male verwendet und beschrieben. Das Modell sieht die Testdaten beim Training nicht und wird danach auf diesen unbekannten Daten bewertet. Der Nachteil dabei ist, dass die Leistung des Modells stark davon abhängen kann, wie genau diese eine Aufteilung zufällig gewählt wurde – manchmal hat man Glück, manchmal Pech, und das Ergebnis kann täuschen. Cross-Validation löst dieses Problem, indem der…
Kommentare sind geschlossenTODO für Tag 5 Lineare Regression verstehen und implementieren Das Ziel der linearen Regression ist es eine Gerade (oder Hyperplane in mehreren Dimensionen) zu finden, die den Zusammenhang zwischen denFeatures und einem Label am besten wiedergibt.scikit-learn stellt mit LinearRegression eine Klasse zur Verfügung, das diese Gewichte über Least Squares (kleinste Fehlerquadrate) optimiert. Hier ist ein kleines Beispiel mit künstlichen Daten: Der Python-Code zeigt ein Beispiel für eine lineare Regression, bei der mit scikit-learn ein Modell auf kleinen Trainingsdaten trainiert wird. Zunächst werden die Featues (X) und die Label (y) als Arrays definiert, danach wird ein LinearRegression-Modell erstellt und mit den Trainingsdaten trainiert. Anschließend werden die erlernte Steigung und der Achsenabschnitt ausgegeben. Das Modell nutzt die gelernten Parameter, um Vorhersagen für…
Kommentare sind geschlossenTODO für Tag 4 k-Nearest Neighbors k-Nearest Neighbors ist ein einfaches, Klassifikationsverfahren mit dem man einen neuen Datenpunkt basierend auf seinen nächsten Nachbarn klassifiziert. Dabei wird die Klassenzugehörigkeit durch Mehrheitsentscheidung der Nachbarn bestimmt. Für jede Vorhersage wird die Distanz zu allen Trainingspunkten berechnet, um die k nächsten Nachbarn zu finden. Das ist jedoch bei großen Datensätzen sehr rechenintensiv (O(n) pro Vorhersage). K-NN sind auch als „lazy learner“ bekannt, da es keine Funktion aus den Trainingsdaten lernt, sondern sich stattdessen den Trainingsdatensatz „merkt“. Deshalb gibt es bei K-NN auch keine Trainingszeit. Es gibt auch eine k-Nearest Neighbors Regression. Bei der Regression wird der Durchschnitt der Nachbarn genommen. In scikit-learn gibt es die beiden Nearest Neighbors-Regressoren KNeighborsRegressor und RadiusNeighborsRegressor. Der Hauptunterschied zwischen…
Kommentare sind geschlossenTODO für Tag 3 Iris-Datensatz genauer anschauen Der Iris-Datensatz ist ein klassischer, multivariater Datensatz in der Statistik und im maschinellen Lernen. Er wurde 1936 vom britischen Statistiker Ronald A. Fisher veröffentlicht, basierend auf Messungen des amerikanischen Botanikers Edgar Anderson. Der Datensatz dient als Beispiel für die lineare Diskriminanzanalyse und wird häufig zum Testen und Vergleichen von Klassifikationsalgorithmen verwendet. Der Datensatz enthält 150 Einträge und dabei jeweils 50 Datensätze je Art (Iris setosa, Iris versicolor, Iris virginica). Jeder Datensatz hat die folgenden 4 Features mit Angabe in Zentimetern: Der Iris Datensatz ist in scikit-learn enthalten und kann mit mit dem Aufruf von „iris = datasets.load_iris()“ geladen werden – wie auch schon gestern und vorgestern gesehen. Das Folgende Python Skript lädt die…
Kommentare sind geschlossen