cards-deck: 100-199_university::111-120_theoretic_cs::116_introduction_machine_learning date-created: 2024-06-14 04:28:34 date-modified: 2024-07-27 03:08:23
Supervised Learning
anchored to 116.00_anchor_machine_learning
—I### introduction example Einfache Aufgabe: Wir möchten die PLZ von Briefen automatisch bzw per Computer erkennen und in numerische Werte übersetzen können.
Suchen: wir wollen eine Funktion finden, die Bilder von Ziffern in numerische Ziffern konvertieren / erkennen kann.
–> Wir brauchen dafür folgendes:
- Datensatz aus Paaren: Bild + Ziffer (gibt also an, was gefunden werden sollte und das gegebene Datum)
- supervision –> wir geben hier labels an, die angeben, was man in dem Datum finden / erkennen kann bzw. sollte. Folgende Pipeline folgt daraus: Rohdaten => Merkmale / Labels => Trainieren des ML-Model => erzeugt Funktion -> Merkmale: Eigenschaften, die wir aus en Rohdaten entnehmen können. Dabei handelt es sich meist um Vektoren Als Beispiel dient vielleicht:
vielleicht auch: –> bei allen sehen wir, dass wir hier irgendwie verschieden Merkmal definieren bzw gefunden haben. Und mit diesen Informationen kommen wir dann in die Lage einen Datensatz zu erhalten, der Features darstellen / beschreiben kann.
Daraus kommt dann ein Datensatz wobei x das Merkmal und r ein mögliches Label - also hier Erkennung - ist.
Diesen Datensatz können wir dann in einen Raum spannen - etwa und dann versuchen eine Funktion zu finden, die den Raum von Inputs erkennen kann.
Wir setzen dann eine Hypothesenklasse an, die etwa die Menge aller Rechtecke in dem Raum beschreibt. Wir suchen dann ein spezifisches Rechteck was minimal falsch liegt / ist. Ein jedes Rechteck wird dabei mit definiert.
Overview and Idea of Classification
Consider that we would like to establish classifying Zebras by a given set of images. In order to train the model correctly we ought to provide different types of samples: why? #card
- positive data samples
- negative data samples In our example we would denote the images of zebras positive and whales as negative.
This is done to have the machine learn about specific characteristics of the zebra and thus be able to correctly identify whether something is not a zebra –> we cannot just give it positive data otherwise it will be biased towards that too much. ^1721145585294
We somehow want to find a description that helps identifying all the examples correctly. For example we could check whether it has Black and white features. In this span we could then position our data:
We can define the set of data like that:
[!Definition] Sample sets of data are defined with? #card
Whereas scalar vector, so training set set of ordered pairs with index 1 if is true, 0 otherwise ^1721145585302
We can observe this data set in a two-dimensional space representing the set of ordered pairs.
[!Definition] Hypothesis building and finding the best function whats to be done here? #card
In the visualisation above we have every data point sit somewhere in the two-dimensional space.
Now we could come up with some idea of determining a characteristic in some image: A Hypothesis
These are defining anchors that help to limit the scope of our dimensional space to search and query for –> its setting boundaries. We now observe the class of hypothesis - in this example a set of rectangles. We observe a given function that will span a rectangle in our space ( We would like to find the best matching here!) This rectangle is defined by the values defined above
Now this function will give us a binary decision / answer whether a data sample is within the class - zebra - or not: ^1721145585306
Now with this idea we can see that issues could occur:
- loss of accuracy and detection rate because we limit too much / too little –> How would we calculate loss then? #card
Loss will indicate “how off our results are” whenever we run the system on data we can calculate loss as follows: ^1721145585309
[!Tip] empirical error of hypothesis with a Dataset : #card
- this means we are creating a sum over all entries of the dataset
- we collect the output of our hypothesis for a given sample and check whether its not the desired output –> as defined in the tuple
With this observation we are therefore collecting the amount of faulty classifications made by our system. ^1721145585313
From this observation we can see that different rectangles are possible and thus its important to find the best possible.
Which hypothesis space generalizes better?
When setting a boundary we could base it off the distance to false data points in our given dataset. However this could potentially introduce issues if a new data point will be entered closely within this boundary although negative. Hence we ought to consider the margin:
The margin is described as the distance between the boundary and the instances - available in the dataset - closest to it.
To improve finding with this parameter in mind: #card
We choose halfway between the tightest and loosest hypothesis –> so we are increasing the margin for our rectangle
in the given graphic the colored instances are supporting the marging - setting certain boundaries - while other instance are not contributing much and could be removed without affecting much: ^1721145585318
General concepts to observe
Noise | in data
[!Definition] Noise regarding data or the context of learning something whats noise? #card
With noise we describe/define anomalies in the available data - to learn on / with - or in the learning problem itself With this premise we could encounter two possible issues:
- a class - like the thing we try to label by algorithms - may be difficult to learn
- we may not be able to achieve zero error capabilities because this anomalies set off the overall learning capability
^1721145585321
Learning multiple classes | instead of 1 -
We would like to extend the capabilities to detect more than 2 classes in our given data set - and therefore the algorithm that we would like to produce.
[!requirement] changes to accommodate multiple classes Once again we have the usual sample set Further we now introduce further classes: samples are defined similarly as before with : the decision to label something is done as before, but considering all the possible classes
What changed now: Our Hypothesis space consists of rectangles now - one for each class - and thus the desired hypothesis is modified:
Therefore the empirical error is also adapted:
[!attention] Empirical Error hows it defined with multiple classes? #card
We still sum up all the entries that are faulty, as it was done before, however we are doing this for each class. We therefore add another summ of all class-entries for each sample: ^1721145585324
Regression
While we tried answering “whether something belongs to a class or not” with Classification Introduction example with Regression we aim to produce some continuous value - numeric value - based on some input. This means that we are trying to learn a numeric function that aligns numeric values to inputs - after some pattern we would like to find.
[!Definition] Basic conception and striving for regression #card
We would like to define the necessary operations, available data and goals for regression in ML: We are given the same dataset with samples: Its to be seen that we have labels for the sample set again, however they are defined differently: Labels with where is unobservable ( thus ought to be found somehow)
We create another Hypothesis Space: containing functions and we would like to find said function that minimizes the empirical error - as before.
[!attention] Empirical Error defined as:
^1721145585327
Now for this idea its important that the polynomial function can vary in its characteristics - i.e be linear, quadratic, cubic what are benefits / reasons for this variation? #card
It depends on the best fitting which polynomial function will result to be the best! This means could be given in the following structures:
- could be a polynomial Whats important here: The more complex the function the more it will be prone to fail with new data points introduced - because it aligns well with existing data already. Furthermore the complexity will increase exponentially leaving us with little to no benefit from this regression! ^1721145585330
Generalization
The mentioned idea for predicting the output for a given input with regression leads to the idea of generalization to allow adapting and constructing methods that will not only fit the available sample data but also new data points added at a later point!
[!Definition] Generalization #card
With generalization we define how well a model predicts the right output for an unknown instance - so new data that was not used for training before! Its important to gather some additional information to result with some result (belows examples shows this relatively fast)
Because we ought to span several options to predict and process our data the Hypothesis Space will grow in complexity as the complexity of data does! ^1721145585335
Betrachten wir etwa die Zahlenfolge: und stellen die Frage der nächsten Ziffern, nach diesem Schema. –> Wir werden sehen, dass viele verschiedene Möglichkeiten bestehen, um jetzt die Folge fortzuführen –> man kann hier viele verschiedene Pattern wahrnehmen / erkennen!
- als Tribonacci-Sequenz
- Teiler von 28
- : die abwechselnden Dezimalziffern von und
- (und noch weitere ) möglichkeiten dafür
No-Freee-Lunch-Theorem
[!Definition] No Free Lunch Theorem was ist mit gleichwertiger Leistung gemeint? #card Im Bezug auf Generalisierung sagt uns das Theorem folgend: Ein Algorithmus kann bei einer Art von Problemem sehr gut und (dennoch) bei anderen schlecht abschneiden.
Gleichwertige Leistung: Wenn man die Leistung eines beliebigen Algorithmus über alle möglichen Probleme mittelt, schneiden alle gleich ab –> bringt uns also nicht viel! ^1721145585340
Daraus folgt dann:
[!Attention] Konsequenzen des No-Free-Lunch-Theorem welchhe Dinge koennen wir dann folgern? #card
Wir könne nur Aussagen über einen Algorithmus für das spezifische vorliegende Problem - spezifiziert durch die verfügbaren Daten (auch Um trainiern) - treffen. es benötigt ferner einen inductive bias um weitere Aussagen zu treffen – also einfach weitere bzw zusätzliche Informationen ^1721145585344
Considering this dependency that could create / increase complexity we can now derive two different concepts to cope / describe these relations.
Underfitting
[!Attention] Underfitting whats defined with underfitting in terms of generalization? #card Whenever our complexity of is smaller than the complexity of data
-> consider we have a lot of data available yet we are only using a simple linear function to define our function #image nachtragen ^1721145585347
Overfitting
[!Attention] whats defined with overfitting in terms of generalization? #card Whenever the complexity of is higher than the complexity of data
-> using a polynomial function to evaluate the data accordingly (minimalizing the error with a given dataset), however once we are adding more datapoints we will also have errors due to the contstrains in our previous evaluation –> so its too complex for new data hence creating an issue ^1721145585350
Generally speaking there’s a constant consideration between under / overfitting of these functions.
In machine learning we have a constant intertwined observation of:
- Models -> working with the parameters, evaluating and returning some result
- Loss functions -> loss is a distance that is indicating whether model is good(small distance) or bad(large distance)
- Optimization proecdures -> finding out how we can optimize the arguments and model -> we would like to find the optimal value for the that are describing the parameters of our function
- the minimum cannot be calculated - many times- thus its necessary to optimize or regress these parameters (with much training data for example)
Wie wählt man die richtige Modellklasse?
am besten direkt die richtige wählen, damit wir nicht in Probleme geraten.
Bestimmung der erwarteten Leistungen (eines Modells)
welches Ziel verfolgen wir mit dieser Evaluation? #card Unser Ziel hierbei ist es schon möglich früh abschätzen zu können, wie gut der Algo für einen bestimmten Datensatz funktionieren könnte - vielleicht an bestimmten Datensätzen, um das entsprechend abschätzen zu können. ^1721145585353
Um es zu evaluieren haben wir bestimmte Daten bereits gegeben:
- Datensatz
- Algorithmus
- spezifische Aufgabe - der Algo soll sie lösen können
Wir haben jetzt bestimmte Kriterien, nach welchen wir die Leistung des Modells für den definierten Datensatz bestimmen können. welche gibt es?
- Klassifikationsgenauigkeit
- Erwartetes Risiko - also Menge von Fehlern
- F1-Score
- und weitere Metriken
Leistungsbestimmung eines binären Klassifikators
Mit binären Klassifikatoren meinen wir solche, die in zwei Klassen unterscheiden - “wahr” / “falsch”.
[!idea] Idee zur Messung der Leistung was ist die core idee, wie wird leistung betrachtet/ erechnet? #card
Betrachtet man die Möglichen Zustände, die bei dieser simplen Klasifikation eintreten kann, dann werden wir nur 4 Fälle betrachten können: Folgend heißt diese Matrix Confusion matrix Wir wissen, dass es 4 Fälle gibt: richtige Vorhersage und richtige / falsche Ist-Zustand; falsche Vorhersage und richtige / falscher Ist-Zustand
^1721145585356
Diese Felder können wir jetzt verschieden klassifizieren und aus deren Benennung schon Informationen entnehmen:
-
TP meint :: Prediction determined true and actual value is too -> correct prediction ^1721145585358
-
TN meint :: Prediction determined false and the actual value is also false ^1721145585360
-
FP meint :: Prediction determined false yet the actual value was true ^1721145585363
-
FN meint :: Prediction determined true yet the actual value was false ^1721145585365
Anhand dieser vier Einstufungen - die man auch bei weiteren Zuständen, die möglich sein könnten, anwenden kann - kann man jetzt deren Raten und manche Leistungsmaße deklarieren / berechnen:
Leistungsmaße aufgrund von binären Klassifikationen
[!Definition] Fehler und Genauigkeit was meint es, wie beschrieben? #card
Mit Fehler meinen wir folgende Berechnung: und es beschreibt den Anteil der falschen Vorhersagen
Mit Genauigkeit meinen wir folgende Berechnug: und es beschreibt einfach den Anteil der richtigen Vorhersagen ^1721145585367
[!Attention] Präzision und Recall was meinen wir damit? #card
Sprechen wir von Präzision meinen wir den Anteil der korrekten positive Vorhersagen, berechnet mit:
Während wir mit Recall die Korrekte Vorhersagen unter den positiven Daten meinen. Beschrieben mit: ^1721145585370
Ferner können wir jeweils noch die Raten der tp und fp betrachten:
[!Information] tp-Rate #card
-> sie ist gleich des Recall! ^1721145585372
[!Information] fp-Rate #card
Und sie beschreibt den Anteil Vorhersagen der falschen unter den negativen Proben ^1721145585375
[!Definition] F1-Score
Hows the F1 score defined, what does it symbolize / mean? #card
Mit F1 meinen wir ein “harmonic mean” zwischen precision und recall!
Wir beschreiben es dann folgend: ^1721145585378
Genauigkeit | Accuracy ( Leistungsmaß )
was können wir aus einer hohen Genauigkeit ziehen? Was brauch es weiter? #card Aus der Definition der Genauigkeit können wir simpel schließen, dass eine hohe Genuaigkeit bei ausgeglichenen Daten darauf hinweist, dass unser Modell sehr gut ist!? ^1721145585384
Beispiel: Wenn man nun 99 Bilder von 9ern und 1 Bild von 0 in einem Testset hat, dann sagt das Modell immer 9 voraus, wodurch dessen Genauigkeit hier dann mit 99/100 sehr gut ist. Weiterhin, ist es aber für ein anderes Testset von Daten mit 0en und 1 Bild von 9 dann sehr schlecht mit 1/100!
Präzision und Recall
Wir können aus der Definition der Präzision folgende Interpretation zu Werten evaluieren: wann verwenden? #card
- Präzision weist daraufhin, dass alle vorhergesagten Positiven tatsächlich positiv sind –> also richtige prediction!
- Präzision sagt uns, dass keine der vorhergesagten Positiven dann tatsächlich positiv ist –> Es folgt hieraus: Diese Metrik sollte man nur nutzen, wenn die Kosten von False positives hoch sind! ^1721145585390
Selbige Interpretation können wir noch für Recall treffen: : wann sollten wir sie verwenden? #card
- Recall Alle tatsächlichen Positiven werden durch die Modellvorhersage überhaupt erfasst
- Recall Keine der tatsächlichen Positiven wurde durch die Modellvorhersage erfasst –> Es folgt also: Die Metrik sollte nur verwendet werden, wenn der Nutzen von true positives hoch ist. ^1721145585393
ROC - Receiver Operating Characteristics
[!Attention] Dieses Thema wird später nochmal betrachtet und ist hier nur als Einblick gegeben
Wir betrachten hier einen Klassifikator der Wahrscheinlichkeiten vorhersagt. Das heißt, dass für eine Klasse die WSK vermittelt. Wir weisen weiterhin eine Klasse zu, wenn für ihre WSK gilt: Dabei agiert als einen Schwellenwert, welchen wir später maximieren wollen.
Wir können nun ferner mit einer ROC-Kurve die Fläche unter der Kurve berechnen - also der Integral von einer besagten Kurve. Dabei haben wir jetzt einen bestimmten Anspruch: wir wollen in dem Diagram am besten eine Tp-Rate von 1 erhalten, während die fp-Rate =0 ist.
Entspechend kann hieraus jetzt eine beste Kurve bestimmt oder betrachtet werden:
Schätzung Leistung ml-Modell
[!Tip] gültige Leistungsschätzung erhalten was ist notwendig, warum nicht trivial #card
Es ist nicht trivial aus einem Tripel (Algorithmus, Daten, und dessen Aufgabe) die Leistungsschätzung zu erhalten.
Also wenn wir annehmen einen Algorithmus zu trainieren um eine Klassifikationsaufgabe mit einem Datensatz von Bildern zu lösen -> wöllten wir die erwartete Leistung von schätzen. ( dafür betrachten wir den Umstand, dass wir ein Bild betrachten, was im Datensatz noch nicht enthalten war/ist) ^1721145585398
Es gibt jetzt einige Ansätze:
Naiver Ansatz
Als einfachste Methode bietet sich uns das Trainieren des Modells unter Verwendung des gesamten Datensatzes. Hierbei ist dann “Endleistung = erwartete Leistung”. Das ist insofern problematisch, dass es mit neuen Daten dann wahrscheinlich nicht klarkommt, weil es zu komplex ist –> Overfitting tritt auf!
[!Important] Folgerung Wir sollten die Leistungsschätzung am Besten unabhängig von den Daten sein, die das Modell “schon kennt” ( schonmal durchlaufen ist etwa.)
Validierungssets verwenden
Als besseren Ansatz möchten wir den gesamten verfügbaren Datensatz –> den wir zum trainieren haben, aufzuteilen in diverse Bereiche: welche, warum? #card
- ein Satz zum Trainiern
- ein Satz zum Validieren Die Validierung soll hier schon unterschiedlich zum Trainingssatz sein, aber dennoch in der Verteilung ähnlich! ^1721145585400
[!Tip] Ansatz Aufbau? Probleme –> Verzerrung? #card
Mit dieser Aufteilung können wir jetzt einen folgenden Ansatz verfolgen:
- Unser Modell wird mehrmals mit verschiedenen Hyperparametern auf dem Trainingssatz trainiert.
- Anschließend werden wir die Modelle an dem Validierungsset messen und da das Modell mit der besten Leistung auswählen.
Wenn wir diese Aufteilung nutzen erhalten wir hier eine Verzerrung der geschätzen Leistung, denn die Test-Daten sind abhängig ( die Modelle könnten sich entsprechend der Test-Daten anpassen ( Parameter tunen), sodass sie für andere Daten nicht mehr repräsentativ sind).Wir brauchen also: unabhängige Test-Daten! –> Wir teilen die Große Datenmenge also noch in eine unbekannte Menge auf, die zum testen genutzt werden kann.
Hierbei sollte aber das Testset nur einmal verwendet werden! ^1721145585403
Wenn wir jetzt ausführen und lernen möchten / werden, dann agieren wir folgend:
- Trainiere mehrer Modelle mit verschiedenen Hyperparametern auf dem Trainings-Satz
- Teste und tune diese Modelle dann am Validation-Set –> hierbei wird ein Vergleich zu den anderen Sets ermöglicht!
- Suche das beste Modell - oder machs für alle - und fuhre die nun getunte Variante auf den Test-daten aus –> Damit wird eine “Real-Life”-Situation simuliert, weil es die Daten noch nicht kennt und somit mit anderen Performen wird.
[!Summary] Zusammenfassung der Selektion mit Validierung #crd
Man kann durch die Validierungsdaten, die wir etablieren und nutzen, schon während der Trainingszeit das Modell an einer :reallen: Anwendung “erproben”. und so erörtern, wie gut es sein würde / ist.
Dadurch können wir dann ferner auch die Modellkomplexität variieren - und so auch bestimmten
Ferner sind also nicht-bekannte Testdaten - für das Modell - insofern wichtig, dass man hiermit gut Vergleiche aufziehen kann.
Reproduzierbarkeit von Experimenten
Wie obig betrachtet können wir ein Datenset in drei Teile: Trainings-, Validierungs- und Testsets splitten, die verschieden angewandt werden.
Dabei ist zu erkennen, dass bei der Aufteilung eine Zufälligkeit auftritt. -> Wenn wir diesen Prozess wiederholen - also neu Aufteilen - wird man ein wenn auch nur leicht anderes Ergebnis haben / erhalten.
–> Das wollen wir reduzieren und somit die Varianz zwischen diesen minimieren.
[!Question] Es gibt einige kleine Grundlagen, die man bei der Aufteilung von Testset beachten sollte welche 2? #card
für das Benchmarking von Algorithmen ist das Testset festgelegt und solte nicht mehr als einmal verwendet werden
Für die Entwicklung von Methoden die man in der Praxis verwenden möchte: -> Verschiedene Gesamtaufteilungen liefern bessere Vorhersagen über die Leistung! ^1721145585405
und wie zuvor bereits betrachtet kommt es bei der Verwendung von Validierungssets u.U. dazu, dass: #card
- Parameter des Modells so gewählt werden, dass sie bei der Validierung gut abschneiden
- unsere Wahl der Parameter von den Beispielen im Validierungsset abhängend sein kann -> und wir somit wieder verfälschen -> Daher limitieren wir die Leistung also aufgrund der vorhandenen Testsets und verlieren somit eine Gültigkeit mit anderen Validierungssets. ^1721145585408
Variabilität | Varianz
Wir sehen also, dass Validierungssets großen Einfluss auf das Modell haben kann: warum das, wie nennt man das? #card Mit unterschiedlichen Validierungssets könnte ein anderer Satz von Hyperparametern vorgeschlagen werden, wodurch eine Varianz entsteht. Ferner nennen wir es dann Variabilität. Um diese Varianz zu reduzieren, kann man dann Kreuzvalidierung anwenden: ^1721145585411
[!Tip] Varianz ideal reduzieren wie? alternative? #card
Idealerweise könnten wir unseren Algorithmus einfach auf verschiedenen Datensätzen trainieren und validieren. –> Aber wir haben meist nur einen begrenzten Datensatz zur Verfügung und können diesen einzelnen nicht in viele vollständige Tripel von (Training, Val, Test) Set aufteilen.
Als Alternative haben wir demnach die Kreuzvalidierung ^1721145585414
Kreuzvalidierung:
[!Definition] K-fache Kreuzvalidierung
Was ist der Ansatz für die k-fache Kreuzvalidierung? #card
Wir haben wieder einen Datensatz gegeben und teilen ferner Sätze von Trainings und Validierungsets auf. ( Also wir gestalten einfach -Große Blöcke aus unserem großen Datensatz.) Wir können jetzt verschiedene Kombinationen dieser Blöcke als Trainings / Validierungsset aufteilen - also etwa 10 Blöcke werden zum Trainings-Teil, oder später nur 5 Blöcke etc… - sodass wir die selben Daten in verschiedenen Aufteilungen verwenden können.
Hierbei ist die Aufteilung von in gleichgroße Teile zufällig gedachtm soass:
- Einer der Aufteilungen als Validierungsset genutzt wird
- Die Kombination aus Aufteilungen das Trainingset wird
- und wir anschließend diese Aufteilung (+ Trainieren) mal durchführen werden
Es kommt hier zur Stratification:
[!Tip] Stratification:
#card
Alle Resultierenden Sets gleiche Klassenbalance wie der vollständige Datensatz –> also es wird ungefahr gleich aufgeteilt!
Für diese Methode gibt es weiterhin auch Probleme, bzw Limitationen: welche? #card
- Kleine Validierungssets, um das Trainingset groß zu halten
- Große Überlappungen zwischen den Aufteilungen ^1721145585417
Hieraus können wir dann manche Empfehlungen ziehen:
[!Information] Abhängigkeit von und der Größe der Daten? #card
Bei kleinen Datensätzen sollte groß sein, damit man ein ausreichend großes Trainingset erhält.
Bei gröseren Datensätzen sollte verringert werden, damit man eine gute Validierung erhält. ^1721145585424