Organisation
This commit is contained in:
parent
7dd5d22f5d
commit
600ee485eb
288
CDS1011-Introduction-to-Data-Science/formulas/Zusammenfassung.md
Normal file
288
CDS1011-Introduction-to-Data-Science/formulas/Zusammenfassung.md
Normal file
@ -0,0 +1,288 @@
|
|||||||
|
# 1. Teilgebiete von AI
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
1. **Machine Learning (ML)** – Ein System lernt aus Daten, Muster zu erkennen und Vorhersagen zu treffen, ohne explizit programmiert zu sein.
|
||||||
|
|
||||||
|
- **Supervised Learning**: Trainiert mit gelabelten Daten (z. B. Klassifikation & Regression).
|
||||||
|
- **Unsupervised Learning**: Findet Muster in ungelabelten Daten (z. B. Clustering, Anomalie-Erkennung).
|
||||||
|
- **Reinforcement Learning (RL)**: Agent lernt durch Belohnungen und Strafen (z. B. AlphaGo, Robotik).
|
||||||
|
2. **Deep Learning (DL)** – Eine Unterkategorie von ML, die neuronale Netzwerke mit vielen Schichten nutzt. Besonders leistungsfähig bei Bild-, Sprach- und Textverarbeitung (z. B. CNNs für Bilder, RNNs für Sprache).
|
||||||
|
|
||||||
|
|
||||||
|
Jede dieser Disziplinen entwickelt sich rasant weiter und wird oft kombiniert eingesetzt.
|
||||||
|
# 2. Machine Learning
|
||||||
|
![[Pasted image 20250129121715.png]]
|
||||||
|
## Supervised Learning
|
||||||
|
- Klassifikation
|
||||||
|
- Training: Objekt: Label gegeben
|
||||||
|
- Test: Objekt: Label zuordnen
|
||||||
|
- Methoden
|
||||||
|
- Regression
|
||||||
|
- >Training
|
||||||
|
- >X: Datenpunkt Y gegeben
|
||||||
|
- Test: X: Y vorhersagen
|
||||||
|
### Examples
|
||||||
|
**Klassifikation**
|
||||||
|
- K-Nearest-Neighbors
|
||||||
|
- Naïve Bayes
|
||||||
|
- Support Vector Machines
|
||||||
|
- Decision Trees
|
||||||
|
|
||||||
|
**Regression**
|
||||||
|
- Polynomregression
|
||||||
|
- Lineare Regression
|
||||||
|
- Random Forrest Regression
|
||||||
|
- Support Vector Regression
|
||||||
|
|
||||||
|
## Unsupervised Learning
|
||||||
|
- Clustering
|
||||||
|
- Anomalieerkennung
|
||||||
|
- Visualisierung
|
||||||
|
- Dimensionsereduktion
|
||||||
|
- Lernen von Assoziationsregeln
|
||||||
|
|
||||||
|
## Semi-supervised Learning
|
||||||
|
![[Pasted image 20250129121927.png]]
|
||||||
|
|
||||||
|
## Others
|
||||||
|
**Batch-Learning**
|
||||||
|
- Einmal hin alles drin
|
||||||
|
|
||||||
|
**Online-Learning**
|
||||||
|
- Stück für Stück, mit Web scraper
|
||||||
|
- Immer mal wieder kommt was neues
|
||||||
|
|
||||||
|
# 3. Daten ( -> Herausforderungen )
|
||||||
|
## Datenmenge
|
||||||
|
Deep Learning braucht viel Daten, skaliert aber extrem gut bis ins unendliche (Eher fehlt die Rechenleistung)
|
||||||
|
- Mindestdatenmenge muss erreicht sein
|
||||||
|
|
||||||
|
## Datenqualität
|
||||||
|
**Wird schlechter durch:**
|
||||||
|
- Rauschen (Daten die ungewollt im Datensatz sind)
|
||||||
|
- Fehler ( Daten die Falsch sind z.B. sensoren, User geben falsche angaben)
|
||||||
|
- Ausreißer: Daten die extrem abweichen
|
||||||
|
- Empty Values: z.B. NaN / Null im Datensatz
|
||||||
|
|
||||||
|
## Datenrepräsentation
|
||||||
|
- Korrelation =/= Kausalität
|
||||||
|
- zu wenige Daten
|
||||||
|
|
||||||
|
## Overfitting
|
||||||
|
- Alles ist ein Muster
|
||||||
|
- Analog: CEO der jeden Müll hyped
|
||||||
|
|
||||||
|
**Lösung**:
|
||||||
|
- Einfacheres Modell
|
||||||
|
- Weniger Features
|
||||||
|
- Bessere Daten (siehe Datenqualität)
|
||||||
|
- (Basically alles weniger komplex machen)
|
||||||
|
|
||||||
|
## Underfitting
|
||||||
|
- Nichts ist ein Muster
|
||||||
|
- Analog: Person die die Augen verschließt ("nothing ever happens")
|
||||||
|
|
||||||
|
**Lösung**:
|
||||||
|
- Siehe Overfitting (aber invertiert)
|
||||||
|
- Die richtigen Features finden
|
||||||
|
|
||||||
|
## Data Snooping Bias
|
||||||
|
In der Datenvoranalyse (Data Snooping) wird versucht sich ein bild vom Datensatz zu machen und voreilige Schlüsse gezogen. Diese können sich durch die ganze Forschung ziehen und sie negativ beeinflussen.
|
||||||
|
|
||||||
|
## Stratified Sampling
|
||||||
|
- Klustern von Datenpunkten
|
||||||
|
- Zufällige Auswahl von Datenpunkten aus den Clustern
|
||||||
|
|
||||||
|
![[Pasted image 20250129121441.png]]
|
||||||
|
## Train-Test Split
|
||||||
|
- Trainingsdaten: Modell trainieren
|
||||||
|
- Testdaten: Modell testen
|
||||||
|
|
||||||
|
Normalerweise 70% / 30%
|
||||||
|
|
||||||
|
## Parameter
|
||||||
|
### Hyperparameter
|
||||||
|
- Entkoppelt vom Modell
|
||||||
|
- Beispiel: Temperature bei LLM's
|
||||||
|
|
||||||
|
### Modelparameter
|
||||||
|
- Wird Trainiert
|
||||||
|
|
||||||
|
|
||||||
|
# 4. Qualitätsmetriken
|
||||||
|
## Root Mean Squared Error
|
||||||
|
> Es berechnet die Differenz für alle Datenpunkte.
|
||||||
|
> Diese Werden Quadriert um größere Differzenzen zu hervorzuheben. ( und auch für positives Vorzeichen )
|
||||||
|
> Daraus wird der Durchschnitt berechnet und die Wurzel gezogen (um das Quadrieren rückgängig zu machen).
|
||||||
|
|
||||||
|
$$ \text{RMSE} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2} $$
|
||||||
|
|
||||||
|
**Variablen:**
|
||||||
|
- $y_i$: Tatsächliche Werte
|
||||||
|
- $\hat{y}_i$: Vorhergesagte Werte ($f(x_i)$)
|
||||||
|
- $n$: Anzahl der Datenpunkte
|
||||||
|
|
||||||
|
**Schritte:**
|
||||||
|
1. Berechne die Differenzen: $y_i - \hat{y}_i$
|
||||||
|
2. Quadriere die Differenzen: $(y_i - \hat{y}_i)^2$
|
||||||
|
3. Berechne den Durchschnitt: $\frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2$
|
||||||
|
4. Ziehe die Quadratwurzel: $\sqrt{\dots}$
|
||||||
|
|
||||||
|
## Mittlerer absoluter Fehler MAE
|
||||||
|
Siehe RMSE aber ohne Quadrieren.
|
||||||
|
> Das Quadrieren wegzulassen bedeutet das die Skala für die Differenzen linear ist und nicht exponentiell. D.h. Ausreißer haben weniger Einfluss auf das Ergebnis.
|
||||||
|
**Formel:**
|
||||||
|
$$
|
||||||
|
\text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|
|
||||||
|
$$
|
||||||
|
|
||||||
|
- $y_i$: Tatsächlicher Wert
|
||||||
|
- $\hat{y}_i$: Vorhergesagter Wert
|
||||||
|
- $n$: Anzahl der Datenpunkte
|
||||||
|
|
||||||
|
## Arithmetisches Mittel
|
||||||
|
> Summe aller Werte durch die Anzahl der Werte
|
||||||
|
$$ \text{AM} = \frac{1}{n} \sum_{i=1}^{n} x_i $$
|
||||||
|
|
||||||
|
## Median
|
||||||
|
> Der Wert der in einer Sortierten Liste in der Mitte steht bei ```ungeraden n```. Bei ```geraden n``` der Durchschnitt der beiden mittleren Werte.
|
||||||
|
|
||||||
|
$$ \text{Median} = \begin{cases} x[\frac{n+1}{2}] & \text{für ungerade } n \\ \frac{1}{2} (x[\frac{n}{2}] + x[\frac{n}{2}+1]) & \text{für gerade } n \end{cases} $$
|
||||||
|
|
||||||
|
## Streuungsmasse
|
||||||
|
### Mittlere absolute abweichung (MAD)
|
||||||
|
> gleiches Konzept wie bei MAE, aber der "gewünschte" Wert ist der Erwartungswert.
|
||||||
|
|
||||||
|
>INFO: Da hier nicht mit Wahrscheinlichkeiten gerechnet wird, ist der Erwartungswert = der Durchschnittswert. (Weil alle Werte gleich wahrscheinlich sind, und die Verteilung symmetrisch)
|
||||||
|
|
||||||
|
$$ \text{MAD} = \frac{1}{n} \sum_{i=1}^{n} |x_i - \hat{x}_i| $$
|
||||||
|
|
||||||
|
### Varianz und Standardabweichung
|
||||||
|
> **Varianz**: Durchschnittliche quadratische Abweichung (ohne Wurzel) \
|
||||||
|
> **Standardabweichung**: Wurzel der Varianz (Root Mean Squared Error für X mit n-1)
|
||||||
|
|
||||||
|
$$ \sigma^2 = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \hat{x})^2 $$
|
||||||
|
|
||||||
|
$$ \sigma = \sqrt{\sigma^2} $$
|
||||||
|
## Pearson Korrelationskoeffizient
|
||||||
|
$$
|
||||||
|
r = \frac{\sum_{i=1}^n
|
||||||
|
\bigl(x_i - \overbrace{\bar{x}}^{\text{Mittelwert}}\bigr)
|
||||||
|
\bigl(y_i - \overbrace{\bar{y}}^{\text{Mittelwert}}\bigr)}
|
||||||
|
{(n - 1)\,\underbrace{s_x \cdot s_y}_{\text{Standardabweichung}}}.
|
||||||
|
$$
|
||||||
|
- **Zusammenhang zwischen zwei numerischen Variablen**
|
||||||
|
|
||||||
|
- **$r \in [-1; +1]$**
|
||||||
|
- **1**: stark positive Korrelation
|
||||||
|
- **0**: keine lineare Korrelation
|
||||||
|
- **–1**: stark negative Korrelation
|
||||||
|
|
||||||
|
- **Nichtlinearer Zusammenhang** trotzdem möglich
|
||||||
|
- exponentiell, quadratisch
|
||||||
|
|
||||||
|
- **Korrelation ≠ Kausalität**
|
||||||
|
|
||||||
|
|
||||||
|
# 6. Regression
|
||||||
|
![[Pasted image 20250129121337.png]]
|
||||||
|
## Lineare Regression
|
||||||
|
**Lineare Regression**
|
||||||
|
$$
|
||||||
|
\begin{align*}
|
||||||
|
\textrm{Lineare Gleichung: }
|
||||||
|
\quad &y = c + m \cdot x \\[6pt]
|
||||||
|
\textrm{Steigung: }
|
||||||
|
\quad &m = \frac{\sum (x - \bar{x}) (y - \bar{y})}{\sum (x - \bar{x})^2} \\[6pt]
|
||||||
|
\textrm{Intercept: }
|
||||||
|
\quad &c = \bar{y} - m \,\bar{x}
|
||||||
|
\end{align*}
|
||||||
|
$$
|
||||||
|
**R2**
|
||||||
|
$$
|
||||||
|
\begin{align*}
|
||||||
|
\textrm{Bestimmtheitsmaß:} \quad
|
||||||
|
&R^2 = \frac{SSR}{SST} \\[6pt]
|
||||||
|
\textrm{Sum of Squares Regression (SSR):} \quad
|
||||||
|
&SSR = \sum_{i} \bigl(\hat{y}_i - \bar{y}\bigr)^2 \\[6pt]
|
||||||
|
\textrm{Total Sum of Squares (SST):} \quad
|
||||||
|
&SST = \sum_{i} \bigl(y_i - \bar{y}\bigr)^2
|
||||||
|
\end{align*}
|
||||||
|
$$
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# 9. Supervised Learning
|
||||||
|
## Kunfusionsmatrix
|
||||||
|
![[Pasted image 20250129121620.png]]
|
||||||
|
|
||||||
|
### Precision (Relevanz)
|
||||||
|
$precision=\frac{tp}{tp+fp}$
|
||||||
|
|
||||||
|
### Recal (Sensibilität)
|
||||||
|
$recall=\frac{tp}{tp+fn}$
|
||||||
|
|
||||||
|
### F1
|
||||||
|
$f1=2\cdot\frac{precision\cdot recall}{precision+recall}$
|
||||||
|
## Logistische Regression zur binären Klassifikation
|
||||||
|
|
||||||
|
- **Klassifikationsverfahren**
|
||||||
|
- **Wahrscheinlichkeit** für die Klassenzugehörigkeit zwischen 0 und 1
|
||||||
|
- **Nominalskalierte** Kriterien vorhersagen
|
||||||
|
- **Prädiktor** (Merkmal)
|
||||||
|
- **Kriterium** (Wahrscheinlichkeit)
|
||||||
|
- Je steiler die Kurve, desto besser die Vorhersage
|
||||||
|
- **Siehe auch**
|
||||||
|
- Multinomiale logistische Regression für mehrere Kriterien
|
||||||
|
|
||||||
|
**Formel**
|
||||||
|
$$
|
||||||
|
p(y = 1) \;=\; \beta_0 \,\cdot\,
|
||||||
|
\frac{e^{\beta_0 + \beta_1 \cdot x_1}}
|
||||||
|
{1 \;+\; e^{\beta_0 + \beta_1 \cdot x_1}}\;=\;
|
||||||
|
\\~\\p\!\bigl(\underbrace{y = 1}_{\text{(Zielvariable)}}\bigr)
|
||||||
|
\;=\;
|
||||||
|
\underbrace{\beta_0}_{\text{(Achsenabschnitt)}}
|
||||||
|
\,\cdot\,
|
||||||
|
\frac{
|
||||||
|
e^{
|
||||||
|
\overbrace{\beta_0}^{\text{(Achsenabschnitt)}}
|
||||||
|
\;+\;
|
||||||
|
\overbrace{\beta_1}^{\text{(Regressionskoeffizient)}}
|
||||||
|
\cdot
|
||||||
|
\overbrace{x_1}^{\text{(Prädiktor)}}
|
||||||
|
}
|
||||||
|
}{
|
||||||
|
1 + e^{\beta_0 + \beta_1 \cdot x_1}
|
||||||
|
}
|
||||||
|
$$
|
||||||
|
|
||||||
|
**Variablen:**
|
||||||
|
- $y$: Zielvariable (nimmt Werte 0 oder 1)
|
||||||
|
- $\beta_0$: Achsenabschnitt (Intercept)
|
||||||
|
- $\beta_1$: Regressionskoeffizient (Gewicht für den Prädiktor)
|
||||||
|
- $x_1$: Prädiktor (Eingangsvariable)
|
||||||
|
- $e^{\beta_0 + \beta_1 \cdot x_1}$: Exponentialterm, hier als Basis der logistischen Funktion
|
||||||
|
- $p(y=1)$: Wahrscheinlichkeit, dass $y=1$ eintritt
|
||||||
|
|
||||||
|
|
||||||
|
# 10. Unsupervised Learning
|
||||||
|
## Clustering
|
||||||
|
### K-Means
|
||||||
|
![[Pasted image 20250129121823.png]]
|
||||||
|
### Euclidean Distance
|
||||||
|
$d\left( x,y \right)=\sqrt{\sum_{i=1}^{n}\left( x_i-y_i \right)^2}$
|
||||||
|
|
||||||
|
### Elbow Method
|
||||||
|
![[Pasted image 20250129121853.png]]
|
||||||
|
- **Optimale Anzahl an Clustern** finden
|
||||||
|
>Wenn die **Distanz** zwischen den **Clustern** nicht mehr **signifikant** sinkt, ist die **optimale Anzahl** an Clustern erreicht.
|
||||||
|
### Silhouette Coefficient
|
||||||
|
$$
|
||||||
|
\begin{align*}
|
||||||
|
a=\textrm{cohesion}=\textrm{intra cluster distance}\\
|
||||||
|
b=\textrm{separation}=\textrm{nearest cluster distance}\\
|
||||||
|
s\left( i \right)=\frac{b\left( i\right)-a\left( i\right)}{max\{a\left( i\right),b\left( i\right)\}}
|
||||||
|
\end{align*}
|
||||||
|
$$
|
Binary file not shown.
146
CDS1011-Introduction-to-Data-Science/tasks/Aufgaben.md
Normal file
146
CDS1011-Introduction-to-Data-Science/tasks/Aufgaben.md
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
# Kapitel 1: Die Machine-Learning-Umgebung
|
||||||
|
1. Wie würden Sie Machine Learning definieren?
|
||||||
|
2. Können Sie vier Arten von Anwendungen nennen, für die Machine Learning gut geeignet ist?
|
||||||
|
3. Was ist ein gelabelter Trainingsdatensatz?
|
||||||
|
4. Was sind die zwei verbreitetsten Aufgaben beim überwachten Lernen?
|
||||||
|
5. Können Sie vier häufig anzutreffende Aufgaben für unüberwachtes Lernen nennen?
|
||||||
|
6. Was für einen Algorithmus würden Sie verwenden, um einen Roboter über verschiedene unbekannte Oberflächen laufen zu lassen?
|
||||||
|
7. Welche Art Algorithmus würden Sie verwenden, um Ihre Kunden in unterschiedliche Gruppen einzuteilen?
|
||||||
|
8. Würden Sie die Aufgabe, Spam zu erkennen, als überwachte oder unüber-wachte Lernaufgabe einstufen?
|
||||||
|
9. Was ist ein Onlinelernsystem?
|
||||||
|
10. Was ist Out-of-Core-Lernen?
|
||||||
|
11. Welche Art Algorithmus beruht auf einem Ähnlichkeitsmaß, um Vorhersagen zu treffen?
|
||||||
|
12. Worin besteht der Unterschied zwischen einem Modellparameter und einem
|
||||||
|
Modellhyperparameter?
|
||||||
|
13. Wonach suchen modellbasierte Algorithmen? Welche Strategie führt am häufigsten zum Erfolg? Wie treffen sie Vorhersagen?
|
||||||
|
14. Können Sie vier der wichtigsten Herausforderungen beim Machine Learning benennen?
|
||||||
|
15. Welches Problem liegt vor, wenn Ihr Modell auf den Trainingsdaten eine sehr gute Qualität erbringt, aber schlecht auf neue Daten verallgemeinert? Nennen Sie drei Lösungsansätze.
|
||||||
|
16. Was ist ein Testatensatz, und warum sollte man einen verwenden?
|
||||||
|
17. Was ist der Zweck eines Validierungsdatensatzes?
|
||||||
|
18. Was ist das Train-Dev-Set, wann brauchen Sie es, und wie verwenden Sie es?
|
||||||
|
19. Was kann schiefgehen, wenn Sie Hyperparameter mithilfe der Testdaten ein-stellen?
|
||||||
|
|
||||||
|
## Lösungen
|
||||||
|
1. Beim Machine Learning geht es um das Konstruieren von Systemen, die aus Daten lernen können. Lernen bedeutet, sich bei einer Aufgabe anhand eines Qualitätsmaßes zu verbessern.
|
||||||
|
2. Machine Learning ist geeignet zum Lösen komplexer Aufgaben, bei denen es keine algorithmische Lösung gibt, zum Ersetzen langer Listen händisch erstellter Regeln, zum Erstellen von Systemen, die sich an wechselnde Bedingungen anpassen, und schließlich dazu, Menschen beim Lernen zu helfen (z.B. beim Data Mining).
|
||||||
|
3. Ein gelabelter Trainingsdatensatz ist ein Trainingsdatensatz, der die gewünschte Lösung (das Label) für jeden Datenpunkt enthält.
|
||||||
|
4. Die zwei verbreitetsten Aufgaben beim überwachten Lernen sind Regression und Klassifikation.
|
||||||
|
5. Verbreitete unüberwachte Lernaufgaben sind Clustering, Visualisierung, Dimensionsreduktion und das Erlernen von Assoziationsregeln.
|
||||||
|
6. Reinforcement Learning funktioniert wahrscheinlich am besten, wenn ein Roboter lernen soll, in unbekanntem Gelände zu laufen, da dies typischerweise die Art von Problem ist, die das Reinforcement Learning angeht. Die Aufgabe ließe sich auch als überwachte oder unüberwachte Aufgabe formulieren, diese Herangehensweise wäre aber weniger natürlich.
|
||||||
|
7. Wenn Sie nicht wissen, wie Sie die Gruppen definieren sollen, können Sie ein Clustering-Verfahren verwenden (unüberwachtes Lernen), um Ihre Kunden in Cluster jeweils ähnlicher Kunden zu segmentieren. Kennen Sie die gewünschten Gruppen dagegen bereits, können Sie einem Klassifikationsalgorithmus viele Beispiele aus jeder Gruppe zeigen (überwachtes Lernen) und alle Kunden in diese Gruppen einordnen lassen.
|
||||||
|
8. Spamerkennung ist eine typische überwachte Lernaufgabe: Dem Algorithmus werden viele E-Mails und deren Labels (Spam oder Nicht-Spam) bereitgestellt.
|
||||||
|
9. Ein Onlinelernsystem kann im Gegensatz zu einem Batchlernsystem inkrementell lernen. Dadurch ist es in der Lage, sich sowohl an sich schnell ändernde Daten oder autonome Systeme anzupassen als auch sehr große Mengen an Trainingsdaten zu verarbeiten.
|
||||||
|
10. Out-of-Core-Algorithmen können riesige Datenmengen verarbeiten, die nicht in den Hauptspeicher des Computers passen. Ein Out-of-Core-Lernalgorithmus teilt die Daten in Mini-Batches ein und verwendet Techniken aus dem Online-Learning, um aus diesen Mini-Batches zu lernen.
|
||||||
|
11. Ein instanzbasiertes Lernsystem lernt die Trainingsdaten auswendig; anschließend wendet es ein Ähnlichkeitsmaß auf neue Datenpunkte an, um die dazu ähnlichsten erlernten Datenpunkte zu finden und diese zur Vorhersage zu verwenden.
|
||||||
|
12. Ein Modell besitzt einen oder mehrere Modellparameter, die festlegen, wie Vorhersagen für einen neuen Datenpunkt getroffen werden (z.B. die Steigung eines linearen Modells). Ein Lernalgorithmus versucht, optimale Werte für diese Parameter zu finden, sodass das Modell bei neuen Daten gut verallgemeinern kann. Ein Hyperparameter ist ein Parameter des Lernalgorithmus selbst und nicht des Modells (z.B. die Menge zu verwendender Regularisierung).
|
||||||
|
13. Modellbasierte Lernalgorithmen suchen nach einem optimalen Wert für die Modellparameter, sodass das Modell gut auf neue Datenpunkte verallgemeinert. Normalerweise trainiert man solche Systeme durch Minimieren einer Kostenfunktion. Diese misst, wie schlecht die Vorhersagen des Systems auf den Trainingsdaten sind, zudem wird im Fall von Regularisierung ein Strafterm für die Komplexität des Modells zugewiesen. Zum Treffen von Vorhersagen geben wir die Merkmale neuer Datenpunkte in die Vorhersagefunktion des Modells ein, wobei die vom Lernalgorithmus gefundenen Parameter verwendet werden.
|
||||||
|
14. Zu den Hauptschwierigkeiten beim Machine Learning gehören fehlende Daten, mangelhafte Datenqualität, nicht repräsentative Daten, nicht informative Merkmale, übermäßig einfache Modelle, die die Trainingsdaten underfitten, und übermäßig komplexe Modelle, die die Trainingsdaten overfitten.
|
||||||
|
15. Wenn ein Modell auf den Trainingsdaten herausragend abschneidet, aber schlecht auf neue Datenpunkte verallgemeinert, liegt vermutlich ein Overfitting der Trainingsdaten vor (oder wir hatten bei den Trainingsdaten eine Menge Glück). Gegenmaßnahmen zum Overfitting sind das Beschaffen zusätzlicher Daten, das Vereinfachen des Modells (Auswählen eines einfacheren Algorithmus, Reduzieren der Parameteranzahl oder Regularisierung des Modells) oder das Verringern des Rauschens in den Trainingsdaten.
|
||||||
|
16. Ein Testdatensatz hilft dabei, den Verallgemeinerungsfehler eines Modells auf neuen Datenpunkten abzuschätzen, bevor ein Modell in einer Produktionsumgebung eingesetzt wird.
|
||||||
|
17. Ein Validierungsdatensatz wird zum Vergleichen von Modellen verwendet. Es ist damit möglich, das beste Modell auszuwählen und die Feineinstellung der Hyperparameter vorzunehmen.
|
||||||
|
18. Das Train-Dev-Set wird eingesetzt, wenn das Risiko besteht, dass es eine Diskrepanz zwischen den Trainingsdaten und den in den Validierungs- und Testdatensätzen verwendeten Daten gibt (die immer so nahe wie möglich an den Daten liegen sollten, die das Modell produktiv nutzen). Es ist Teil des Trainingsdatensatzes, der zurückgehalten wird (das Modell wird nicht damit trainiert). Stattdessen wird das Modell mit dem Rest des Trainingsdatensatzes trainiert und sowohl mit dem Train-Dev-Set wie auch mit dem Validierungsdatensatz evaluiert. Funktioniert das Modell mit dem Trainingsdatensatz gut, nicht aber mit dem Train-Dev-Set, ist es vermutlich für den Trainingsdatensatz overfittet. Funktioniert es gut mit dem Trainingsdatensatz und dem Train-DevSet, aber nicht mit dem Validierungsdatensatz, gibt es vermutlich einen signifikanten Unterschied zwischen Trainingsdaten einerseits und Validierungs- und Testdaten andererseits, und Sie sollten versuchen, die Trainingsdaten zu verbessern, damit diese mehr wie die Validierungs- und Testdaten aussehen.
|
||||||
|
19. Wenn Sie Hyperparameter mit den Testdaten einstellen, riskieren Sie ein Overfitting des Testdatensatzes. Der gemessene Verallgemeinerungsfehler ist dann zu niedrig angesetzt (Sie könnten in diesem Fall also ein Modell einsetzen, das schlechter funktioniert als erwartet).
|
||||||
|
|
||||||
|
# Kapitel 4: Trainieren von Modellen
|
||||||
|
1. Welchen Trainingsalgorithmus für die lineare Regression können Sie verwen-den, wenn Sie einen Trainingsdatensatz mit Millionen Merkmalen haben?
|
||||||
|
2. Nehmen wir an, dass die Merkmale in Ihrem Trainingsdatensatz unterschiedlich skaliert sind. Welche Algorithmen würden dadurch in Mitleidenschaft gezogen und in welcher Weise? Was können Sie dagegen tun?
|
||||||
|
3. Kann das Gradientenverfahren bei einem logistischen Regressionsmodell in einem lokalen Minimum stecken bleiben?
|
||||||
|
4. Führen alle Algorithmen für das Gradientenverfahren zum gleichen Modell, vorausgesetzt, sie laufen lange genug?
|
||||||
|
5. Nehmen wir an, Sie verwenden das Batch-Gradientenverfahren und plotten den Validierungsfehler in jeder Epoche. Was passiert vermutlich, wenn der Validierungsfehler ständig steigt? Wie können Sie dies beheben?
|
||||||
|
6. Ist es eine gute Idee, das Mini-Batch-Gradientenverfahren sofort zu unterbre-chen, sobald der Validierungsfehler steigt?
|
||||||
|
7. Welcher der besprochenen Algorithmen für das Gradientenverfahren erreicht die Umgebung der optimalen Lösung am schnellsten? Welcher konvergiert? Wie können Sie auch die übrigen konvergieren lassen?
|
||||||
|
8. Sie verwenden eine polynomielle Regression, plotten die Lernkurven und be-merken, dass es zwischen dem Trainingsfehler und dem Validierungsfehler einen großen Unterschied gibt. Was passiert? Nennen Sie drei Möglichkeiten, dies zu beheben.
|
||||||
|
9. Bei der Ridge-Regression bemerken Sie, dass Trainingsfehler und Validie-rungsfehler beinahe gleich und recht hoch sind. Krankt dieses Modell an einem hohen Bias oder an einer hohen Varianz? Sollten Sie den Regularisie-rungsparameter a erhöhen oder senken?
|
||||||
|
10. Welche Gründe sprechen für folgende Verfahren?
|
||||||
|
a. Ridge-Regression anstelle einer einfachen linearen Regression (d.h. ohne
|
||||||
|
Regularisierung)?
|
||||||
|
b. Lasso anstelle einer Ridge-Regression?
|
||||||
|
c. Elastic Net anstelle von Lasso-Regression?
|
||||||
|
11. Angenommen, Sie möchten Bilder als innen/außen und Tag/Nacht klassifizie-ren. Sollten Sie zwei Klassifikatoren mit logistischer Regression oder einen Klassifikator mit Softmax-Regression erstellen?
|
||||||
|
12. Implementieren Sie das Batch-Gradientenverfahren mit Early Stopping für die Softmax-Regression ohne Scikit-Learn, sondern nur mit NumPy. Verwenden Sie es für eine Klassifikationsaufgabe wie beim Iris-Datensatz.
|
||||||
|
|
||||||
|
## Lösungen
|
||||||
|
1. Haben Sie einen Trainingsdatensatz mit Millionen Merkmalen, können Sie das stochastische Gradientenverfahren oder das Mini-Batch-Gradientenverfahren verwenden. Wenn die Trainingsdaten in den Speicher passen, funktioniert eventuell auch das Batch-Gradientenverfahren. Die Normalengleichung und auch der SVD-Ansatz funktionieren jedoch nicht, weil die Komplexität der Berechnung schnell (mehr als quadratisch) mit der Anzahl Merkmale ansteigt.
|
||||||
|
2. Wenn die Merkmale in Ihrem Trainingsdatensatz sehr unterschiedlich skaliert sind, hat die Kostenfunktion die Gestalt einer länglichen Schüssel. Deshalb benötigen die Algorithmen für das Gradientenverfahren lange zum Konvergieren. Um dieses Problem zu beheben, sollten Sie die Daten skalieren, bevor Sie das Modell trainieren. Die Normalengleichung und der SVD-Ansatz funktionieren auch ohne Skalierung. Darüber hinaus können regularisierte Modelle mit nicht skalierten Merkmalen bei einer suboptimalen Lösung konvergieren: Weil die Regularisierung große Gewichte abstraft, werden Merkmale mit geringen Beträgen im Vergleich zu Merkmalen mit großen Beträgen tendenziell ignoriert.
|
||||||
|
3. Das Gradientenverfahren kann beim Trainieren eines logistischen Regressionsmodells nicht in einem lokalen Minimum stecken bleiben, weil die Kostenfunktion konvex ist. Das bedeutet: Wenn Sie zwei beliebige Punkte der Kurve über eine gerade Linie verbinden, schneidet diese niemals die Kurve.
|
||||||
|
4. Ist das Optimierungsproblem konvex (wie bei der linearen oder logistischen Regression) und die Lernrate nicht zu hoch, finden sämtliche algorithmischen Varianten des Gradientenverfahrens das globale Optimum und führen zu sehr ähnlichen Modellen. Allerdings konvergieren das stochastische und das MiniBatch-Gradientenverfahren nicht wirklich (es sei denn, Sie reduzieren die Lernrate), sondern springen um das globale Optimum herum. Das bedeutet, dass diese Algorithmen geringfügig unterschiedliche Modelle hervorbringen, selbst wenn Sie sie lange laufen lassen.
|
||||||
|
5. Sollte der Validierungsfehler nach jeder Epoche immer wieder steigen, ist die Lernrate möglicherweise zu hoch, und der Algorithmus divergiert. Wenn auch der Trainingsfehler steigt, ist dies mit Sicherheit die Ursache, und Sie sollten die Lernrate senken. Falls der Trainingsfehler aber nicht steigt, overfittet Ihr Modell die Trainingsdaten, und Sie sollten das Trainieren abbrechen.
|
||||||
|
6. Wegen des Zufallselements gibt es weder beim stochastischen noch beim Mini-Batch-Gradientenverfahren eine Garantie für Fortschritte bei jeder Iteration. Wenn Sie also das Trainieren abbrechen, sobald der Validierungsfehler steigt, kann es passieren, dass Sie vor Erreichen des Optimums abbrechen. Es ist günstiger, das Modell in regelmäßigen Abständen abzuspeichern und das beste gespeicherte Modell aufzugreifen, falls es sich über eine längere Zeit nicht verbessert (es also vermutlich den eigenen Rekord nicht knacken wird).
|
||||||
|
7. Die Trainingsiterationen sind beim stochastischen Gradientenverfahren am schnellsten, da dieses nur genau einen Trainingsdatenpunkt berücksichtigt. Es wird also normalerweise die Umgebung des globalen Optimums als Erstes erreichen (oder das Mini-Batch-Gradientenverfahren mit sehr kleinen MiniBatches). Allerdings wird nur das Batch-Gradientenverfahren mit genug Trainingszeit auch konvergieren. Wie erwähnt, springen das stochastische und das Mini-Batch-Gradientenverfahren um das Optimum herum, es sei denn, Sie senken die Lernrate allmählich.
|
||||||
|
8. Wenn der Validierungsfehler deutlich höher als der Trainingsfehler ist, liegt es daran, dass Ihr Modell die Trainingsdaten overfittet. Dies lässt sich beheben, indem Sie den Grad des Polynoms senken: Ein Modell mit weniger Freiheitsgraden neigt weniger zu Overfitting. Sie können auch versuchen, das Modell zu regularisieren – beispielsweise über einen ℓ2-Strafterm (Ridge) oder einen ℓ1-Strafterm (Lasso), der zur Kostenfunktion addiert wird. Damit reduzieren Sie ebenfalls die Freiheitsgrade des Modells. Schließlich können Sie auch die Größe des Trainingsdatensatzes erhöhen.
|
||||||
|
9. Wenn der Trainingsfehler und der Validierungsfehler fast gleich und recht hoch sind, liegt vermutlich ein Underfitting der Trainingsdaten vor. Es gibt also ein hohes Bias. Sie sollten daher den Hyperparameter zur Regularisierung α senken.
|
||||||
|
10. Schauen wir einmal: – Ein Modell mit etwas Regularisierung arbeitet in der Regel besser als ein Modell ohne Regularisierung. Daher sollten Sie grundsätzlich die RidgeRegression der einfachen linearen Regression vorziehen. – Die Lasso-Regression verwendet einen ℓ1-Strafterm, wodurch Gewichte auf exakt null heruntergedrückt werden. Dadurch erhalten Sie spärliche Modelle, bei denen alle Gewichte außer den wichtigsten null sind. Auf diese Weise können Sie eine automatische Merkmalsauswahl durchführen, wenn Sie ohnehin schon den Verdacht hegen, dass nur einige Merkmale wichtig sind. Sind Sie sich nicht sicher, sollten Sie der RidgeRegression den Vorzug geben. – Elastic Net ist grundsätzlich gegenüber der Lasso-Regression vorzuziehen, da sich Lasso in einigen Fällen sprunghaft verhält (wenn mehrere Merkmale stark miteinander korrelieren oder es mehr Merkmale als Trainingsdatenpunkte gibt). Allerdings gilt es, einen zusätzlichen Hyperparameter einzustellen. Wenn Sie Lasso ohne das sprunghafte Verhalten verwenden möchten, können Sie einfach Elastic Net mit einer l1_ratio um 1 verwenden.
|
||||||
|
11. Möchten Sie Bilder als außen/innen und Tag/Nacht klassifizieren, schließen sich die Kategorien nicht gegenseitig aus (d.h., alle vier Kombinationen sind möglich). Sie sollten daher zwei Klassifikatoren mit logistischer Regression trainieren.
|
||||||
|
|
||||||
|
# Kapitel 7: Ensemble Learning und Random Forests
|
||||||
|
1. Wenn Sie fünf unterschiedliche Modelle auf den exakt gleichen Trainingsda-ten trainiert haben und für alle eine Relevanz von 95% erzielen, lassen sich diese Modelle kombinieren, um ein noch besseres Ergebnis zu erhalten? Begründen Sie Ihre Antwort.
|
||||||
|
2. Worin unterscheiden sich Klassifikatoren mit Hard und Soft Voting?
|
||||||
|
3. Ist es möglich, das Trainieren eines Ensembles mit Bagging zu beschleunigen, indem man es auf mehrere Server verteilt? Wie sieht es bei Ensembles mit Pas-ting, Ensembles mit Boosting, Random Forests oder Ensembles mit Stacking aus?
|
||||||
|
4. Welchen Vorteil bietet die Out-of-Bag-Evaluation?
|
||||||
|
5. Wodurch werden Extra-Trees-Ensembles zufälliger als gewöhnliche Random Forests? Wobei hilft dieses zusätzliche Zufallselement? Sind Extra-Trees-Klas-sifikatoren langsamer oder schneller als gewöhnliche Random Forests?
|
||||||
|
6. Falls Ihr AdaBoost-Ensemble die Trainingsdaten underfittet, welche Hyperpa-rameter sollten Sie in welcher Weise verändern?
|
||||||
|
7. Wenn Ihr Gradient-Boosting-Ensemble die Trainingsdaten overfittet, sollten Sie dann die Lernrate erhöhen oder verringern?
|
||||||
|
8. Laden Sie den MNIST-Datensatz (siehe Kapitel 3) und teilen Sie diesen in Datensätze zum Training, zur Validierung und zum Testen auf (z.B. 50.000 Da-tenpunkte zum Trainieren, 10.000 zur Validierung und 10.000 zum Testen). Trainieren Sie anschließend unterschiedliche Klassifikatoren, z.B. einen Ran-dom-Forest-Klassifikator, einen Extra-Trees-Klassifikator und eine SVM. Versuchen Sie danach, diese zu einem Ensemble zu kombinieren, das besser ist als alle Klassifikatoren auf den Validierungsdaten. Verwenden Sie dazu einen Klassifikator mit Soft oder Hard Voting. Sobald Sie einen gefunden haben, probieren Sie diesen auf dem Testdatensatz aus. Wie viel besser ist das Ensemble im Vergleich zu den einzelnen Klassifikatoren?
|
||||||
|
9. Führen Sie die einzelnen Klassifikatoren aus der vorherigen Ubung aus, um Vorhersagen auf den Validierungsdaten zu treffen. Erstellen Sie einen neuen Trainingsdatensatz mit den sich daraus ergebenden Vorhersagen: Jeder Trai-ningsdatenpunkt ist ein Vektor mit den Vorhersagen sämtlicher Klassifikato-ren für ein und dasselbe Bild, und die Zielgröße ist die Kategorie des Bilds. Trainieren Sie einen Klassifikator mit diesem neuen Trainingsdatensatz. Herzlichen Glückwunsch, Sie haben soeben einen Blender trainiert, der zusammen mit den Klassifikatoren ein Stacking-Ensemble bildet! Werten Sie das Ensemble mit dem Testdatensatz aus. Erstellen Sie für jedes Bild im Testdatensatz mit allen Klassifikatoren Vorhersagen und füttern Sie den Blender mit diesen Vorhersagen, um eine Vorhersage für das Ensemble zu erhalten. Wie schneidet es im Vergleich zum zuvor trainierten abstimmungsbasierten Klassifikator ab? Jetzt versuchen Sie es erneut, aber dieses Mal mit einem StackingClassi fier. Erhalten Sie eine bessere Qualität? Wenn ja: Warum?
|
||||||
|
|
||||||
|
## Lösungen
|
||||||
|
1. Wenn Sie fünf unterschiedliche Modelle trainiert haben und alle eine Relevanz von 95% erzielen, können Sie diese zu einem Ensemble kombinieren, was häufig zu noch besseren Ergebnissen führt. Unterscheiden sich die Modelle sehr stark, funktioniert es noch besser (z.B. ein SVM-Klassifikator, ein Entscheidungsbaum, ein Klassifikator mit logistischer Regression und so weiter). Durch Trainieren auf unterschiedlichen Trainingsdaten lässt sich eine weitere Verbesserung erzielen (darum geht es beim Bagging und Pasting von Ensembles), aber es wird auch ohne effektiv sein, solange die Modelle sehr unterschiedlich sind.
|
||||||
|
2. Ein Klassifikator mit Hard Voting zählt einfach nur die Stimmen jedes Klassifikators im Ensemble und wählt die Kategorie aus, die die meisten Stimmen erhält. Ein Klassifikator mit Soft Voting berechnet den Durchschnitt der geschätzten Wahrscheinlichkeiten für jede Kategorie und wählt die Kategorie mit der höchsten Wahrscheinlichkeit aus. Damit erhalten Stimmen mit hoher Konfidenz mehr Gewicht, was oft besser funktioniert. Dies gelingt aber nur, wenn jeder Klassifikator zum Abschätzen von Wahrscheinlichkeiten in der Lage ist (z.B. bei SVM-Klassifikatoren in Scikit-Learn müssen Sie probability=True setzen).
|
||||||
|
3. Es ist möglich, das Trainieren eines Ensembles mit Bagging durch Verteilen auf mehrere Server zu beschleunigen, da jeder Prädiktor im Ensemble unabhängig von den anderen ist. Aus dem gleichen Grund gilt dies auch für Ensembles mit Pasting und Random Forests. Dagegen baut jeder Prädiktor in einem Boosting-Ensemble auf dem vorherigen Prädiktor auf, daher ist das Trainieren notwendigerweise sequenziell, und ein Verteilen auf mehrere Server nutzt nichts. Bei Stacking-Ensembles sind alle Prädiktoren einer Schicht unabhängig voneinander und lassen sich daher parallel auf mehreren Servern trainieren. Allerdings lassen sich die Prädiktoren einer Schicht erst trainieren, nachdem die vorherige Schicht vollständig trainiert wurde.
|
||||||
|
4. Bei der Out-of-Bag-Evaluation wird jeder Prädiktor in einem Bagging-Ensemble mit Datenpunkten ausgewertet, auf denen er nicht trainiert wurde (diese wurden zurückgehalten). Damit ist eine recht unbeeinflusste Evaluation des Ensembles ohne einen zusätzlichen Validierungsdatensatz möglich. Dadurch stehen Ihnen also mehr Trainingsdaten zur Verfügung, und Ihr Ensemble verbessert sich leicht.
|
||||||
|
5. Beim Erzeugen eines Baums in einem Random Forest wird beim Aufteilen eines Knotens nur eine zufällig ausgewählte Untermenge der Merkmale berücksichtigt. Dies gilt auch bei Extra-Trees, diese gehen aber noch einen Schritt weiter: Anstatt wie gewöhnliche Entscheidungsbäume nach dem bestmöglichen Schwellenwert zu suchen, verwenden sie für jedes Merkmal zufällige Schwellenwerte. Dieses zusätzliche Zufallselement wirkt wie eine Art Regularisierung: Wenn ein Random Forest die Trainingsdaten overfittet, könnten Extra-Trees besser abschneiden. Da außerdem Extra-Trees nicht nach dem bestmöglichen Schwellenwert suchen, lassen sie sich viel schneller trainieren als Random Forests. Allerdings sind sie beim Treffen von Vorhersagen weder schneller noch langsamer als Random Forests.
|
||||||
|
6. Wenn Ihr AdaBoost-Ensemble die Trainingsdaten underfittet, können Sie die Anzahl der Estimatoren steigern und die Regularisierung des zugrunde liegenden Estimators über dessen Hyperparameter verringern. Sie können auch versuchen, die Lernrate ein wenig zu erhöhen.
|
||||||
|
7. Wenn Ihr Gradient-Boosting-Ensemble die Trainingsdaten overfittet, sollten Sie die Lernrate senken. Sie können auch Early Stopping verwenden, um die richtige Anzahl Prädiktoren zu finden (vermutlich haben Sie zu viele davon).
|
||||||
|
|
||||||
|
## Kapitel 8: Dimensionsreduktion
|
||||||
|
1. Welche sind die wichtigsten Gründe, die Dimensionen eines Datensatzes zu verningern? Was sind die wichtigsten Nachteile?
|
||||||
|
2. Was ist der Fluch der Dimensionalität?
|
||||||
|
3. Ist die Dimensionalität eines Datensatzes erst einmal reduziert, ist es möglich, die Operation umzukehren? Falls ja, wie? Falls nein, warum nicht?
|
||||||
|
4. Lässt sich die PCA einsetzen, um die Dimensionen eines hochgradig nichtline-aren Darensatzes zu verringern?
|
||||||
|
3. Sie führen eine PCA auf einem 1.000-dimensionalen Datensatz durch und legen den Anteil der erklärten Streuung auf 95% fest. Wie viele Dimensionen hat der sich daraus ergebende Datensatz?
|
||||||
|
6. In welchen Fallen würden Sie eine normale Hauptkomponentenzerlegung durchführen, wann eine inkrementelle PCA, eine randomisierte PCA oder eine Zufallsprojektion?
|
||||||
|
7. Wie können Sie die Qualität eines Algorithmus zur Dimensionsreduktion auf Ihrem Datensatz bestimmen?
|
||||||
|
8. Ist es sinnvoll, zwei unterschiedliche Algorithmen zur Dimensionsreduktion hintereinanderzuschalten?
|
||||||
|
9. Laden Sie den MNIST-Datensatz (aus Kapitel 3) und teilen Sie diesen in einen Trainingsdatensatz und einen Testatensatz auf (verwenden Sie die ersten 60.000 Datenpunkte zum Trainieren und die übrigen 10.000 zum Testen). Trainieren Sie einen Random-Forest-Klassifikator auf dem Datensatz und messen Sie dessen Laufzeit. Evaluieren Sie das entstandene Modell anhand der Testdaten. Führen Sie anschließend eine Hauptkomponentenzerlegung mit einem Anteil erklärter Streuung von 95% durch, um die Dimensionalitar des Datensatzes zu verringern. Trainieren Sie einen neuen Random-Forest-Klassifikator auf dem reduzierten Datensatz und messen Sie wiederum die Laufzeit. War das Trainieren viel schneller? Evaluieren Sie auch diesen Klassi-fikator auf den Testaten: Wie schneidet er im Vergleich zum ersten Klassifi-kator ab? Probieren Sie es nochmals mit einem SGDClassifier. Wie gut hilft die Hauptkomponentenzerlegung nun?
|
||||||
|
|
||||||
|
10. Verwenden Sie t-SNE, um die ersten 5.000 Bilder des MNIST-Datensatzes auf zwei Dimensionen zu reduzieren, und visualisieren Sie das Ergebnis mit Mat-plotlib. Sie können einen Scatterplot mit zehn unterschiedlichen Farben ver-wenden, um die Zielkategorien jedes Bilds darzustellen. Alternativ können Sie jeden Punkt im Scatterplot durch die entsprechende Kategorie des Daten-punkts ersetzen (eine Ziffer von 0 bis 9) oder sogar verkleinerte Versionen der Ziffernbilder selbst nutzen. (Wenn Sie alle Ziffern darstellen, wird das Diagramm voll und unübersichtlich sein. Sie sollten also eine zufällige Stichprobe ziehen oder einen Datenpunkt nur dann zeichnen, wenn noch kein anderer Punkt in der Umgebung gezeichnet wurde.) Verwenden Sie andere Algorithmen zur Dimensionsreduktion, wie die Hauptkomponentenzerlegung, LLE oder MDS, und vergleichen Sie die entstehenden Diagramme.
|
||||||
|
|
||||||
|
## Lösungen
|
||||||
|
1. Gründe zum Einsatz und Nachteile: – Die Hauptgründe zum Einsatz von Dimensionsreduktion sind: • Die nachfolgenden Trainingsalgorithmen zu beschleunigen (in manchen Fällen sogar Rauschen und redundante Merkmale zu entfernen, wodurch das Trainingsverfahren eine höhere Leistung erbringt). • Die Daten zu visualisieren und Einblick in ihre wichtigsten Eigenschaften zu erhalten. • Platz zu sparen (Kompression). – Die wichtigsten Nachteile sind: • Es geht Information verloren, wodurch die Leistung nachfolgender Trainingsverfahren möglicherweise sinkt. • Sie kann rechenintensiv sein. • Sie erhöht die Komplexität Ihrer maschinellen Lernpipelines. • Transformierte Merkmale sind oft schwer zu interpretieren.
|
||||||
|
2. Der »Fluch der Dimensionalität« beschreibt den Umstand, dass in höher dimensionalen Räumen viele Schwierigkeiten auftreten, die es bei weniger Dimensionen nicht gibt. Beim Machine Learning ist eine häufige Erscheinungsform, dass zufällig ausgewählte höher dimensionale Vektoren grundsätzlich weit voneinander entfernt sind, was das Risiko für Overfitting erhöht und das Erkennen von Mustern in den Daten erschwert, wenn nicht sehr viele Trainingsdaten vorhanden sind.
|
||||||
|
3. Sobald die Dimensionalität eines Datensatzes mit einem der besprochenen Algorithmen verringert wurde, ist es so gut wie immer unmöglich, den Vorgang vollständig umzukehren, weil im Laufe der Dimensionsreduktion Information verloren geht. Während es bei einigen Algorithmen (wie der PCA) eine einfache Prozedur zur reversen Transformation gibt, mit der sich der Datensatz recht nah am Original rekonstruieren lässt, ist dies bei anderen Algorithmen (wie T-SNE) nicht möglich.
|
||||||
|
4. Mit der Hauptkomponentenzerlegung (PCA) lässt sich die Anzahl der Dimensionen der meisten Datensätze erheblich reduzieren, selbst wenn sie stark nichtlinear sind, weil sie zumindest die bedeutungslosen Dimensionen verwerfen kann. Wenn es aber keine bedeutungslosen Dimensionen gibt – wie beispielsweise beim Swiss-Roll-Datensatz –, geht bei der Dimensionsreduktion mittels PCA zu viel Information verloren. Sie möchten die Swiss Roll aufrollen, nicht platt quetschen.
|
||||||
|
5. Dies ist eine Fangfrage: Es kommt auf den Datensatz an. Betrachten wir zwei Extrembeispiele. Angenommen, der Datensatz bestünde aus beinahe perfekt aufgereihten Datenpunkten. In diesem Fall kann die Hauptkomponentenzerlegung den Datensatz auf nur eine Dimension reduzieren und trotzdem 95% der Varianz erhalten. Wenn dagegen der Datensatz aus perfekt zufällig angeordneten Punkten besteht, die überall in den 1.000 Dimensionen verstreut sind, sind etwa 950 Dimensionen nötig, um 95% der Varianz zu erhalten. Die Antwort ist also, dass es auf den Datensatz ankommt und dass es eine beliebige Zahl zwischen 1 und 950 sein kann. Eine Möglichkeit, die intrinsische Dimensionalität des Datensatzes zu verdeutlichen, ist, die abgedeckte Varianz über der Anzahl der Dimensionen zu plotten.
|
||||||
|
6. Gewöhnliche Hauptkomponentenzerlegung ist Standard, sie funktioniert aber nur, wenn der Datensatz in den Speicher passt. Die inkrementelle PCA ist bei großen Datensätzen, die nicht in den Speicher passen, hilfreich, sie ist aber langsamer als die gewöhnliche PCA. Wenn der Datensatz in den Speicher passt, sollten Sie also die gewöhnliche Hauptkomponentenzerlegung vorziehen. Die inkrementelle PCA ist auch bei Onlineaufgaben nützlich, bei denen eine PCA bei neu eintreffenden Daten jedes Mal im Vorübergehen durchgeführt werden soll. Die randomisierte PCA ist nützlich, wenn Sie die Anzahl der Dimensionen erheblich reduzieren möchten und der Datensatz in den Speicher passt; in diesem Fall ist sie deutlich schneller als die gewöhnliche PCA. Schließlich ist die Zufallsprojektion bei sehr hochdimensionalen Datensätzen hilfreich.
|
||||||
|
7. Intuitiv arbeitet ein Algorithmus zur Dimensionsreduktion dann gut, wenn er eine Menge Dimensionen aus dem Datensatz entfernt, ohne zu viel Information zu vergeuden. Dies lässt sich beispielsweise durch Anwenden der reversen Transformation und Bestimmen des Rekonstruktionsfehlers messen. Allerdings unterstützen nicht alle Verfahren zur Dimensionsreduktion die reverse Transformation. Wenn Sie die Dimensionsreduktion als Vorverarbeitungsschritt vor einem anderen Machine-Learning-Verfahren verwenden (z.B. einem Random-Forest-Klassifikator), können Sie auch einfach die Leistung des nachgeschalteten Verfahrens bestimmen; sofern bei der Dimensionsreduktion nicht zu viel Information verloren geht, sollte der Algorithmus genauso gut abschneiden wie auf dem ursprünglichen Datensatz.
|
||||||
|
8. Es kann durchaus sinnvoll sein, zwei unterschiedliche Algorithmen zur Dimensionsreduktion in Reihe zu schalten. Ein verbreitetes Beispiel ist eine Hauptkomponentenzerlegung oder eine Zufallsprojektion, um schnell eine große Anzahl unnützer Dimensionen loszuwerden und anschließend einen deutlich langsameren Algorithmus zur Dimensionsreduktion wie LLE zu verwenden. Dieser zweistufige Prozess führt vermutlich ungefähr zur gleichen Qualität wie LLE für sich allein, benötigt aber nur einen Bruchteil der Zeit.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Kapitel 9
|
||||||
|
1. Wie würden Sie Clustering definieren? Können Sie ein paar Clustering-Algo-rithmen benennen?
|
||||||
|
2. Zählen Sie ein paar wichtige Anwendungsgebiete für Clustering-Algorithmen auf.
|
||||||
|
3. Beschreiben Sie zwei Techniken, um beim Einsatz von k-Means die richtige Zahl von Clustern auszuwählen.
|
||||||
|
4. Was ist Label Propagation? Warum und wie würden Sie es implementieren?
|
||||||
|
5. Können Sie zwei Clustering-Algorithmen aufzählen, die gut für große Datensätze skalieren? Und zwei, die nach Bereichen mit hoher Dichte suchen?
|
||||||
|
6. Können Sie sich einen Anwendungsfall vorstellen, bei dem aktives Lernen nützlich wäre? Wie würden Sie es implementieren?
|
||||||
|
7. Was ist der Unterschied zwischen Anomalieerkennung und Novelty Detec-tion?
|
||||||
|
8. Was ist eine gaußsche Mischverteilung? Für welche Aufgaben können Sie sie verwenden?
|
||||||
|
9. Können Sie zwei Techniken angeben, um beim Einsatz von gaußschen Misch-verteilungsmodellen die richtige Zahl von Clustern zu finden?
|
||||||
|
10. Das klassische Olivetti Faces Dataset enthält 400 Graustufenbilder der Größe 64 x 64 mit Gesichtern. Jedes Bild ist zu einem 1-D-Vektor der Größe 4096 flachgeklopft. Es wurden 40 verschiedene Personen fotografiert (jeweils 10 Mal), und meist besteht die Aufgabe darin, ein Modell zu trainieren, das vor-hersagt, welche Person in jedem Bild dargestellt wird. Laden Sie den Datensatz mit der Funktion sklearn.datasets, fetch_olivetti_faces(), dann teilen Sie ihn in einen Trainingsdatensatz, einen Validierungsdatensatz und einen Testdatensatz auf (beachten Sie, dass der Datensatz schon zwischen 0 und 1 skaliert ist). Da der Datensatz ziemlich klein ist, wollen Sie vermutlich eine stratifizierte Stichprobe erstellen, um sicherzustellen, dass es in jedem Datensatz die gleiche Menge an Bildern pro Person gibt. Als Nächstes clustern Sie die Bilder mithilfe von k-Means und stellen sicher, dass Sie eine gute Zahl von Clustern haben (mit einer der Techniken aus diesem Kapitel). VisualisierenSie die Cluster: Sehen Sie ähnliche Bilder in jedem Cluster?
|
||||||
|
|
||||||
|
11. Trainieren Sie einen Klassifikator mit dem Olivetti-Datensatz, um vorherzusa-gen, welche Person in jedem Bild zu sehen ist, und prüfen Sie das mit dem Va-lidierungsdatensatz. Als Nächstes verwenden Sie k-Means zur Dimensionsre-duktion und trainieren einen Klassifikator mit dem reduzierten Datensatz. Suchen Sie nach der Anzahl an Clustern, die es dem Klassifikator erlauben, seine beste Leistung zu bringen: Welche Qualität können Sie erreichen? Was passiert, wenn Sie die Merkmale aus dem reduzierten Datensatz an die ursprünglichen Merkmale anfügen? (Suchen Sie auch hier wieder nach der besten Menge an Clustern.)
|
||||||
|
|
||||||
|
12. Trainieren Sie ein gaußsches Mischverteilungsmodell mit dem Olivetti-Daten-satz. Um den Algorithmus zu beschleunigen, sollten Sie vermutlich die Dimensionalität des Datensatzes verringern (zum Beispiel mit PCA unter Beibehaltung von 99% der Varianz). Nutzen Sie das Modell, um neue Gesichter zu erzeugen (mithilfe der Methode sample()), und visualisieren Sie diese (wenn Sie PCA eingesetzt haben, werden Sie dessen Methode inverse_transform() verwenden müssen). Versuchen Sie, ein paar Bilder zu verändern (zum Beispiel rotieren, spiegeln, dunkler machen), und schauen Sie, ob das Modell die Anomalien erkennen kann (vergleichen Sie also die Ausgaben der Methode score_samples() für normale Bilder und für Anomalien).
|
||||||
|
13. Einige Techniken zur Dimensionsreduktion können auch zur Anomalieerken-nung verwendet werden. Nehmen Sie beispielsweise den Olivetti-Datensatz und reduzieren Sie ihn mithilfe von PCA unter Beibehaltung von 99% der Va-rianz. Dann berechnen Sie den Rekonstruktionsfehler für jedes Bild. Als Nächstes nehmen Sie ein paar der modifizierten Bilder aus der vorherigen Übung und schauen sich deren Rekonstruktionsfehler an: Beachten Sie, wie viel größer er ist. Plotten Sie ein wiederhergestelltes Bild, werden Sie auch se-hen, warum: Es wird versucht, ein normales Bild zu rekonstruieren.
|
||||||
|
|
||||||
|
## Lösungen
|
||||||
|
1. Im Machine Learning ist Clustering die unüberwachte Aufgabe, ähnliche Instanzen zu gruppieren. Der Begriff der Ähnlichkeit hängt von der aktuellen Aufgabe ab: In manchen Fällen werden zwei nahe beieinanderliegende Instanzen als ähnlich angesehen, während in anderen ähnliche Instanzen weit voneinander entfernt sein können, solange sie zur gleichen dicht gepackten Gruppe gehören. Zu den verbreiteten Clustering-Algorithmen gehören K-Means, DBSCAN, agglomeratives Clustern, BIRCH, Mean-Shift, Affinity Propagation und spektrales Clustern
|
||||||
|
2. Zu den Hauptanwendungsgebieten von Clustering-Algorithmen gehören Datenanalyse, Kundensegmentierung, Empfehlungssysteme, Suchmaschinen, Bildsegmentierung, teilüberwachtes Lernen, Dimensionsreduktion, Anomalieerkennung und Novelty Detection
|
||||||
|
3. Die Ellenbogenregel ist eine einfache Technik, um beim Einsatz von K-Means die Anzahl an Clustern festzulegen: Tragen Sie einfach die Trägheit (den mittleren quadratischen Abstand jeder Instanz zu ihrem nächstgelegenen Schwerpunkt) gegen die Anzahl der Cluster auf und finden Sie den Punkt der Kurve, bei dem die Trägheit nicht mehr schnell fällt (den »Ellenbogen«). Das liegt im Allgemeinen nahe an der optimalen Anzahl an Clustern. Eine andere Möglichkeit ist, den Silhouettenkoeffizienten als Funktion der Anzahl von Clustern auszugeben. Es gibt oft ein Maximum, und die optimale Anzahl an Clustern liegt meist dort in der Nähe. Der Silhouettenkoeffizient ist der Mittelwert der Silhouetten aller Instanzen. Dieser Wert liegt zwischen +1 für Instanzen, die gut in ihren Clustern und fern anderer Cluster liegen, und –1 für Instanzen, die sich sehr nahe an anderen Clustern befinden. Sie können auch die Silhouettendiagramme ausgeben und eine umfassendere Analyse durchführen.
|
||||||
|
4. Es ist teuer und zeitaufwendig, einen Datensatz mit Labels auszustatten. Daher hat man häufig viele ungelabelte Instanzen und nur wenige mit Labels. Label Propagation ist eine Technik, bei der manche (oder alle) Labels von den gelabelten auf ähnliche ungelabelte Instanzen übertragen werden. Das kann die Menge an gelabelten Instanzen deutlich vergrößern und es damit einem überwachten Algorithmus ermöglichen, eine bessere Performance zu liefern (das ist eine Form des teilüberwachten Lernens). Ein Ansatz ist die Verwendung eines Clustering-Algorithmus wie K-Means für alle Instanzen. Danach wird für jedes Cluster das verbreitetste Label oder das der repräsentativsten Instanz genutzt (zum Beispiel der Instanz, die am nächsten am Schwerpunkt liegt) und auf die ungelabelten Instanzen des gleichen Clusters übertragen.
|
||||||
|
5. K-Means und BIRCH skalieren sehr gut bei großen Datensätzen. DBSCAN und Mean-Shift suchen nach Regionen mit hoher Dichte.
|
||||||
|
6. Aktives Lernen ist immer dann nützlich, wenn Sie viele ungelabelte Instanzen haben, das Labeln aber teuer ist. In diesem (recht häufig vorkommenden) Fall ist es oft besser, nicht zufällig ausgewählte Instanzen mit Labels zu versehen, sondern ein aktives Lernen durchzuführen, bei dem menschliche Experten mit dem Lernalgorithmus interagieren und Labels für spezifische Instanzen liefern, wenn der Algorithmus diese anfordert. Häufig wird dazu Uncertainty Sampling eingesetzt (siehe die Beschreibung unter »Aktives Lernen« in Kapitel 9).
|
||||||
|
7. Die Begriffe Anomalieerkennung und Novelty Detection werden oft für das Gleiche verwendet, auch wenn sie nicht ganz genau das Gleiche beschreiben. Bei der Anomalieerkennung wird der Algorithmus mit einem Datensatz trainiert, der Ausreißer enthalten kann. Das Ziel ist normalerweise, diese Ausreißer (im Trainingsdatensatz) und solche in neuen Instanzen zu identifizieren. Bei der Novelty Detection wird der Algorithmus mit einem Datensatz trainiert, der als »sauber« angenommen wird. Ziel ist hier, Ausreißer (Novelties) nur in neuen Instanzen zu finden. Manche Algorithmen funktionieren am besten bei der Anomalieerkennung (zum Beispiel Isolation Forest), andere sind besser zur Novelty Detection geeignet (zum Beispiel One-Class-SVMs).
|
||||||
|
8. Ein gaußsches Mischverteilungsmodell (GMM) ist ein Wahrscheinlichkeitsmodell, das annimmt, dass die Instanzen aus einer Mischung mehrerer Gaußverteilungen erzeugt wurden, deren Parameter unbekannt sind. Oder anders gesagt: Es wird davon ausgegangen, dass die Daten in einer endlichen Zahl von Clustern gruppiert sind, von denen jedes eine ellipsoide Form hat (das aber je nach Cluster eine andere Größe, Ausrichtung und Dichte haben kann), und wir wissen nicht, zu welchem Cluster jede Instanz gehört. Dieses Modell ist für die Dichteabschätzung, das Clustering und die Anomalieerkennung nützlich.
|
||||||
|
9. Sie können die richtige Zahl an Clustern mit einem gaußschen Mischverteilungsmodell unter anderem herausfinden, indem Sie das bayessche Informationskriterium (BIC) oder das Akaike-Informationskriterium (AIC) als Funktion der Anzahl von Clustern auftragen und dann die Zahl wählen, die das BIC oder AIC minimiert. Eine andere Technik ist der Einsatz eines bayesschen gaußschen Mischverteilungsmodells, das automatisch die Zahl der Cluster bestimmt.
|
@ -0,0 +1,52 @@
|
|||||||
|
#### Inhalt des Anwendungsbeispiels
|
||||||
|
- **Social Robots**: Begrüßung, Unterstützung in Banken/Sparkassen.
|
||||||
|
- **Chatbots**: Kundenkontakt im Bank-/Finanzsektor.
|
||||||
|
- **OCR & JP Morgan COin**: Text-Digitalisierung, Fehlererkennung.
|
||||||
|
- **Social Media-Analyse**: Aktienprognosen, Hedge Fund.
|
||||||
|
---
|
||||||
|
|
||||||
|
- **Parkplatzanalyse**: Unternehmensgesundheit.
|
||||||
|
- **Pandemieprognosen**: Maßnahmen, Prävention.
|
||||||
|
- **Aktienhandel**: Prognosen, Kettenreaktionen.
|
||||||
|
- **Reinforcement Learning**: Broker-Nachahmung.
|
||||||
|
- **Fraud Detection**: Erkennung verdächtiger Transaktionen.
|
||||||
|
- **Robo Advisors**: Automatisierte Beratung.
|
||||||
|
- **CNNs**: Schadensbewertung.
|
||||||
|
- **Versicherungen**: Lebenserwartung, Policy-Definition.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Wer Profitiert davon?
|
||||||
|
|
||||||
|
- **Firmen**: Kostenreduktion, verbesserte Entscheidungen.
|
||||||
|
- **Kunden**: Kürzere Wartezeiten, 24/7-Service.
|
||||||
|
- **Hedge Funds**: Datenbasierte Entscheidungen.
|
||||||
|
- **Gesellschaft/Regierung**: Prävention, Ressourcenverteilung.
|
||||||
|
- **Versicherungen**: Schnellere Prozesse, objektivere Entscheidungen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Unternehmen Beispiele
|
||||||
|
|
||||||
|
- **JP Morgan Chase**: NLP & OCR für Vertragsprüfung.
|
||||||
|
- **NASDAQ**: Deep Learning für Fraud Detection.
|
||||||
|
- **Tractable**: CNNs für Schadensbewertung.
|
||||||
|
- **Lapetus**: Neuronale Netze für Lebensversicherungen.
|
||||||
|
- **EquBot**: Prognosen für Day-to-Day-Trading.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Weitere Anwendungen
|
||||||
|
|
||||||
|
- **Compliance Monitoring**: Regulatorien überwachen, Reports erfassen.
|
||||||
|
- **Personalisierte Vorschläge**: Kundenreisen, Investments.
|
||||||
|
- **Cyber Security**: Traffic-/Transaktionsanalyse, Angriffserkennung.
|
||||||
|
- **Generative AI**: Finanzberichte, Visualisierungen.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Kategorie Einordnung
|
||||||
|
|
||||||
|
- **Deep Learning**: Kundenhilfestellung, Vertragsprüfung, NLP
|
||||||
|
- **Machine Learning**: Risikoanalyse, Versicherungen.
|
||||||
|
- **Data Science & Forecasting**: Aktienprognosen, Day-to-Day-Trading.
|
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"nodes":[
|
||||||
|
{"id":"84d9d96eb52919d0","type":"text","text":"# Supercomputer\nDurchsatz: \nRendering\n\nAntwortzeit:\n\nProblemgröße:\nLLM\n\n## Parallelisierung\n\nSpeed-Up\n\n\n$$\nS(p) = \\frac{T(1)}{T(p)} mit \\ 1 \\le S(p) < p\n$$\n\n","x":-125,"y":-30,"width":485,"height":450},
|
||||||
|
{"id":"c6b9d92b788b5a27","x":-1,"y":829,"width":250,"height":60,"type":"text","text":"Netwerke"}
|
||||||
|
],
|
||||||
|
"edges":[
|
||||||
|
{"id":"64e90736383ab549","fromNode":"84d9d96eb52919d0","fromSide":"bottom","toNode":"c6b9d92b788b5a27","toSide":"top"}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
## Speicherung von Geometrie
|
||||||
|
- Vertecies
|
||||||
|
- Edges
|
||||||
|
- Faces
|
||||||
|
|
||||||
|
> VEF Graph
|
||||||
|
|
||||||
|
## Eulersche Formel
|
||||||
|
$$
|
||||||
|
n_V - n_E + n_F = 2
|
||||||
|
$$
|
||||||
|
|
||||||
|
Gleiches für Dreiecke
|
||||||
|
|
||||||
|
|
||||||
|
### Speicherung als Matrix
|
||||||
|
- Einscannen der Vertecies durch z.B. LiDar
|
||||||
|
|
||||||
|
Vertex:
|
||||||
|
- Koordinaten
|
||||||
|
|
||||||
|
Kanten:
|
||||||
|
- V1 und v2\
|
||||||
|
|
||||||
|
Fläche:
|
||||||
|
- e1, e2, e3
|
||||||
|
|
||||||
|
## Darstellungsformen des Volumenmodells
|
||||||
|
Primitive:
|
||||||
|
- Würfel, Tetraeder ...
|
||||||
|
|
||||||
|
|
||||||
|
## Spacetrees
|
||||||
|
- Rekursives runterbrechen von Voxels
|
||||||
|
- Die die Auf dem Rand liegen werden fortgeführt
|
||||||
|
|
||||||
|
### Reihenfolge
|
||||||
|
links unten nach rechts unten, dann nach oben links dann oben rechts
|
||||||
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
|||||||
|
# Organisatorisches
|
||||||
|
## Projekte
|
||||||
|
- Verkehrssimulation
|
||||||
|
|
||||||
|
## Leistungsnachweis
|
||||||
|
- 100% Prüfung
|
@ -0,0 +1,6 @@
|
|||||||
|
## Codierung von Spacetrees
|
||||||
|
1 für Elternknoten
|
||||||
|
0 für Blätter
|
||||||
|
|
||||||
|
0 für Außen
|
||||||
|
1 für auf Geometrie
|
@ -0,0 +1,88 @@
|
|||||||
|
# Simulationspipeline
|
||||||
|
## 1. Modellierung
|
||||||
|
|
||||||
|
- Model erstellen, das auf eine niedrige Abstrakte Ebene heruntergebrochen wurde.
|
||||||
|
- Verienfachung / Formale Abstraktion der Realität -> Dimension wegnehmen
|
||||||
|
### Model Erstellen
|
||||||
|
Eine Annahme z.B. eine Formel
|
||||||
|
|
||||||
|
3D - Modell
|
||||||
|
|
||||||
|
### Mathematische Modellierung
|
||||||
|
Eine Szenario auf einer Karte -> Graphen
|
||||||
|
|
||||||
|
#### Graphen
|
||||||
|
Problem: Jeder Pfad auf einem Graphen einmal verwenden. Funktioniert nur bei gerader Anzahl der Pfade an einem Knoten. Bei ungerade Anzahl -> Keine Weg zurück
|
||||||
|
|
||||||
|
|
||||||
|
#### Herleitung
|
||||||
|
- Welche Größen sind wichtig
|
||||||
|
- Wie beeinflussen sie sich?
|
||||||
|
- Was ist die Aufgabe ?
|
||||||
|
|
||||||
|
#### Analyse
|
||||||
|
- Existens und Eindeutigkeit: Gibt es eine Lösung? Welche Lösung ist richtig?
|
||||||
|
- Wie beinflussen Ausgangswerte das Ergebnis?
|
||||||
|
- Wie genau ist das Modell? Mehrere Modelle sind möglich.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## 2. Numerische Behandlung
|
||||||
|
|
||||||
|
### Diskretisierung
|
||||||
|
Aus Unendlich wird endlich also z.B. 10 Werte.
|
||||||
|
|
||||||
|
h : (Gitterabstand) Abstand zwischen den Punkten.
|
||||||
|
|
||||||
|
![[diskretion.png]]
|
||||||
|
|
||||||
|
### Algorithmen Entwicklung
|
||||||
|
- Genauer Ablauf entwickeln
|
||||||
|
|
||||||
|
|
||||||
|
### Klassifikation von Modellen
|
||||||
|
|
||||||
|
- Diskrete und kontinuierliche Modelle
|
||||||
|
|
||||||
|
#### diskrete Modelle
|
||||||
|
- Basieren auf diskrete oder kombinatorischen Beschreibungen
|
||||||
|
- z.B. Graphen, (endliche) Automaten
|
||||||
|
|
||||||
|
#### kontinuierliche Modelle
|
||||||
|
- basieren auf stetigen Beschreibung
|
||||||
|
- in der Regel Gleichungen
|
||||||
|
|
||||||
|
#### Deterministische und Stochastische Modelle
|
||||||
|
- Beispiel 1: Würfel
|
||||||
|
- Stochastisches Modell
|
||||||
|
|
||||||
|
- Beispiel 2: Crashtest
|
||||||
|
- deterministisches Phänomen
|
||||||
|
|
||||||
|
#### Skalen und Hierarchien
|
||||||
|
- Wahl der Skala in Abhängigkeit von
|
||||||
|
- Ergebnis
|
||||||
|
- kosten der Berechnung und Zeit
|
||||||
|
|
||||||
|
- Auflösung der Abstraction: Mensch oder Atom
|
||||||
|
|
||||||
|
#### Inverse Probleme
|
||||||
|
- Forward Problem
|
||||||
|
- Wetter
|
||||||
|
|
||||||
|
- Inverse Problem
|
||||||
|
- Lösung kennt man: Wie kommt man da hin?
|
||||||
|
|
||||||
|
|
||||||
|
## 3. Implementierung
|
||||||
|
- Softwareentwicklung, Parallelisierung
|
||||||
|
|
||||||
|
## 4. Visualisierung
|
||||||
|
- An Zielgruppe anpassen
|
||||||
|
- Ergenisse Zeigen
|
||||||
|
|
||||||
|
## 5. Validierung
|
||||||
|
- Fehlerbetrachtung
|
||||||
|
- Was kann es?
|
||||||
|
## 6. Einbettung
|
||||||
|
- Verkauf und Vertrieb
|
23
CDS1012-Introduction-to-Computational-Science/Notes/4.10.24
Normal file
23
CDS1012-Introduction-to-Computational-Science/Notes/4.10.24
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## Numerische Behandlung: Diskretisierung
|
||||||
|
> Auflösung des Problems
|
||||||
|
|
||||||
|
Lösung nur an diskreten Stellen
|
||||||
|
- Differenzenquotient
|
||||||
|
|
||||||
|
### Zeitaufwand
|
||||||
|
$$
|
||||||
|
Rechenoperationen / Taktfrequenz = Zeit in sek
|
||||||
|
$$
|
||||||
|
|
||||||
|
# Implementierung
|
||||||
|
- Sprache egal
|
||||||
|
- Bibliotheken verwenden wo geht
|
||||||
|
- Parallelisierung
|
||||||
|
|
||||||
|
# Visualisierung
|
||||||
|
-
|
||||||
|
|
||||||
|
# Geometrische Modellierung
|
||||||
|
- Keine Offene Fläche (nicht verbundene Vertecies)
|
||||||
|
- Keine Durchdringende Geometrie
|
||||||
|
-
|
@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
"nodes":[],
|
||||||
|
"edges":[]
|
||||||
|
}
|
226
CDS1012-Introduction-to-Computational-Science/code/fld.py
Normal file
226
CDS1012-Introduction-to-Computational-Science/code/fld.py
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
import sys
|
||||||
|
import numpy as np
|
||||||
|
import cupy as cp
|
||||||
|
import pygame
|
||||||
|
|
||||||
|
# Minimaler, GPU-beschleunigter 2D-Fluid-Solver mit persistenter Flüssigkeit und Gravitation.
|
||||||
|
# Installation:
|
||||||
|
# pip install cupy-cudaXX pygame numpy
|
||||||
|
# XX = passende CUDA-Version, z.B. cupy-cuda112 für CUDA 11.2
|
||||||
|
|
||||||
|
# ==============================
|
||||||
|
# EINSTELLUNGEN
|
||||||
|
# ==============================
|
||||||
|
N = 64 # Gittergröße (N x N)
|
||||||
|
ITER = 2 # Iterationen; verringern für Geschwindigkeit
|
||||||
|
DT = 0.1 # Zeitschritt
|
||||||
|
DIFF = 0.0001 # Diffusionskoeffizient (klein, aber nicht null für Stabilität)
|
||||||
|
VISC = 0.0001 # Viskosität (klein, aber nicht null für Stabilität)
|
||||||
|
ZOOM = 8 # Pixel pro Gitterzelle in der Anzeige
|
||||||
|
GRAVITY = 0.1 # Gravitationskraft (anpassbar)
|
||||||
|
|
||||||
|
WIDTH, HEIGHT = N * ZOOM, N * ZOOM
|
||||||
|
|
||||||
|
# ==============================
|
||||||
|
# HILFSFUNKTIONEN
|
||||||
|
# ==============================
|
||||||
|
def set_bnd(b, x):
|
||||||
|
"""
|
||||||
|
Randbehandlung für die Simulation.
|
||||||
|
b = 0: Dichte
|
||||||
|
b = 1: u-Geschwindigkeit
|
||||||
|
b = 2: v-Geschwindigkeit
|
||||||
|
"""
|
||||||
|
if b == 1:
|
||||||
|
# u-Geschwindigkeit: links und rechts auf 0 setzen (Wände)
|
||||||
|
x[0, 1:-1] = 0
|
||||||
|
x[-1, 1:-1] = 0
|
||||||
|
elif b == 2:
|
||||||
|
# v-Geschwindigkeit: oben und unten auf 0 setzen (Wände)
|
||||||
|
x[1:-1, 0] = 0
|
||||||
|
x[1:-1, -1] = 0
|
||||||
|
else:
|
||||||
|
# Dichte: Spiegeln an den Rändern
|
||||||
|
x[1:-1, 0] = x[1:-1, 1]
|
||||||
|
x[1:-1, -1] = x[1:-1, -2]
|
||||||
|
x[0, 1:-1] = x[1, 1:-1]
|
||||||
|
x[-1, 1:-1] = x[-2, 1:-1]
|
||||||
|
|
||||||
|
# Ecken setzen
|
||||||
|
x[0, 0] = 0.5 * (x[1, 0] + x[0, 1])
|
||||||
|
x[0, -1] = 0.5 * (x[1, -1] + x[0, -2])
|
||||||
|
x[-1, 0] = 0.5 * (x[-2, 0] + x[-1, 1])
|
||||||
|
x[-1, -1] = 0.5 * (x[-2, -1] + x[-1, -2])
|
||||||
|
|
||||||
|
def add_source(x, s):
|
||||||
|
"""
|
||||||
|
Fügt eine Quelle zur Simulation hinzu.
|
||||||
|
"""
|
||||||
|
x += DT * s
|
||||||
|
|
||||||
|
def diffuse(b, x, x0, diff):
|
||||||
|
"""
|
||||||
|
Diffusionsschritt der Simulation.
|
||||||
|
"""
|
||||||
|
a = DT * diff * (N - 2) * (N - 2)
|
||||||
|
for _ in range(ITER):
|
||||||
|
x[1:-1, 1:-1] = (x0[1:-1, 1:-1] + a * (
|
||||||
|
x[0:-2, 1:-1] + x[2:, 1:-1] +
|
||||||
|
x[1:-1, 0:-2] + x[1:-1, 2:]
|
||||||
|
)) / (1 + 4*a)
|
||||||
|
set_bnd(b, x)
|
||||||
|
|
||||||
|
def advect(b, d, d0, u, v):
|
||||||
|
"""
|
||||||
|
Advektionsschritt der Simulation.
|
||||||
|
"""
|
||||||
|
dt0 = DT * (N - 2)
|
||||||
|
|
||||||
|
# Rückverfolgte Position berechnen
|
||||||
|
X, Y = cp.meshgrid(cp.arange(N), cp.arange(N), indexing='ij')
|
||||||
|
X = X[1:-1, 1:-1] - dt0 * u[1:-1, 1:-1]
|
||||||
|
Y = Y[1:-1, 1:-1] - dt0 * v[1:-1, 1:-1]
|
||||||
|
|
||||||
|
X = cp.clip(X, 0.5, N - 1.5)
|
||||||
|
Y = cp.clip(Y, 0.5, N - 1.5)
|
||||||
|
|
||||||
|
i0 = X.astype(int)
|
||||||
|
i1 = i0 + 1
|
||||||
|
j0 = Y.astype(int)
|
||||||
|
j1 = j0 + 1
|
||||||
|
|
||||||
|
s1 = X - i0
|
||||||
|
s0 = 1 - s1
|
||||||
|
t1 = Y - j0
|
||||||
|
t0 = 1 - t1
|
||||||
|
|
||||||
|
d_new = (s0 * (t0 * d0[i0, j0] + t1 * d0[i0, j1]) +
|
||||||
|
s1 * (t0 * d0[i1, j0] + t1 * d0[i1, j1]))
|
||||||
|
|
||||||
|
d[1:-1, 1:-1] = d_new
|
||||||
|
set_bnd(b, d)
|
||||||
|
|
||||||
|
def project(u, v, p, div):
|
||||||
|
"""
|
||||||
|
Projektionsschritt zur Inkompressibilität der Flüssigkeit.
|
||||||
|
"""
|
||||||
|
# Divergenz berechnen
|
||||||
|
div[1:-1,1:-1] = -0.5 * (
|
||||||
|
(u[2:,1:-1] - u[0:-2,1:-1]) +
|
||||||
|
(v[1:-1,2:] - v[1:-1,0:-2])
|
||||||
|
) / N
|
||||||
|
p.fill(0)
|
||||||
|
set_bnd(0, div)
|
||||||
|
set_bnd(0, p)
|
||||||
|
|
||||||
|
# Poisson-Gleichung lösen
|
||||||
|
for _ in range(ITER):
|
||||||
|
p[1:-1,1:-1] = (div[1:-1,1:-1] + p[0:-2,1:-1] + p[2:,1:-1] +
|
||||||
|
p[1:-1,0:-2] + p[1:-1,2:]) / 4
|
||||||
|
set_bnd(0, p)
|
||||||
|
|
||||||
|
# Geschwindigkeiten aktualisieren
|
||||||
|
u[1:-1,1:-1] -= 0.5 * (p[2:,1:-1] - p[0:-2,1:-1]) * N
|
||||||
|
v[1:-1,1:-1] -= 0.5 * (p[1:-1,2:] - p[1:-1,0:-2]) * N
|
||||||
|
set_bnd(1, u)
|
||||||
|
set_bnd(2, v)
|
||||||
|
|
||||||
|
# ==============================
|
||||||
|
# FLUID-KLASSE
|
||||||
|
# ==============================
|
||||||
|
class Fluid:
|
||||||
|
def __init__(self):
|
||||||
|
self.dens = cp.zeros((N, N), dtype=cp.float32)
|
||||||
|
self.dens_prev = cp.zeros((N, N), dtype=cp.float32)
|
||||||
|
self.u = cp.zeros((N, N), dtype=cp.float32)
|
||||||
|
self.u_prev = cp.zeros((N, N), dtype=cp.float32)
|
||||||
|
self.v = cp.zeros((N, N), dtype=cp.float32)
|
||||||
|
self.v_prev = cp.zeros((N, N), dtype=cp.float32)
|
||||||
|
|
||||||
|
def step(self, gravity):
|
||||||
|
"""
|
||||||
|
Führt einen Simulationsschritt durch, einschließlich der Anwendung von Gravitation.
|
||||||
|
"""
|
||||||
|
# Gravitation hinzufügen (nur zur v-Komponente)
|
||||||
|
self.v_prev += gravity * DT
|
||||||
|
|
||||||
|
# Dichte
|
||||||
|
add_source(self.dens, self.dens_prev)
|
||||||
|
diffuse(0, self.dens, self.dens_prev, DIFF)
|
||||||
|
advect(0, self.dens, self.dens_prev, self.u, self.v)
|
||||||
|
|
||||||
|
# Geschwindigkeit
|
||||||
|
add_source(self.u, self.u_prev)
|
||||||
|
add_source(self.v, self.v_prev)
|
||||||
|
diffuse(1, self.u, self.u_prev, VISC)
|
||||||
|
diffuse(2, self.v, self.v_prev, VISC)
|
||||||
|
project(self.u, self.v, self.u_prev, self.v_prev)
|
||||||
|
|
||||||
|
advect(1, self.u, self.u_prev, self.u, self.v)
|
||||||
|
advect(2, self.v, self.v_prev, self.u, self.v)
|
||||||
|
project(self.u, self.v, self.u_prev, self.v_prev)
|
||||||
|
|
||||||
|
# Quellen zurücksetzen
|
||||||
|
self.dens_prev.fill(0)
|
||||||
|
self.u_prev.fill(0)
|
||||||
|
self.v_prev.fill(0)
|
||||||
|
|
||||||
|
# ==============================
|
||||||
|
# HAUPTPROGRAMM
|
||||||
|
# ==============================
|
||||||
|
def main():
|
||||||
|
pygame.init()
|
||||||
|
screen = pygame.display.set_mode((WIDTH, HEIGHT))
|
||||||
|
pygame.display.set_caption("GPU Fluid Simulation mit Gravitation")
|
||||||
|
clock = pygame.time.Clock()
|
||||||
|
|
||||||
|
fluid = Fluid()
|
||||||
|
|
||||||
|
# Zentrum für kontinuierliche Dichtequelle
|
||||||
|
center = (N//2, N//2)
|
||||||
|
|
||||||
|
running = True
|
||||||
|
while running:
|
||||||
|
clock.tick(60) # 60 FPS anvisiert
|
||||||
|
|
||||||
|
for event in pygame.event.get():
|
||||||
|
if event.type == pygame.QUIT:
|
||||||
|
running = False
|
||||||
|
|
||||||
|
# Mausinteraktion: Linke Maustaste fügt Dichte und zufällige Velocity hinzu
|
||||||
|
if pygame.mouse.get_pressed()[0]:
|
||||||
|
mx, my = pygame.mouse.get_pos()
|
||||||
|
i = int(mx // ZOOM)
|
||||||
|
j = int(my // ZOOM)
|
||||||
|
if 1 <= i < N-1 and 1 <= j < N-1:
|
||||||
|
fluid.dens_prev[j, i] += 100
|
||||||
|
fluid.u_prev[j, i] += cp.random.uniform(-2, 2)
|
||||||
|
fluid.v_prev[j, i] += cp.random.uniform(-2, 2)
|
||||||
|
|
||||||
|
# Immer ein klein wenig Dichte in der Mitte
|
||||||
|
fluid.dens_prev[center[1], center[0]] += 10 # Hinweis: [j, i] entspricht [y, x]
|
||||||
|
|
||||||
|
# Ein Schritt Fluid-Simulation mit Gravitation
|
||||||
|
fluid.step(GRAVITY)
|
||||||
|
|
||||||
|
# Dichte von GPU holen für Pygame
|
||||||
|
dens_host = cp.asnumpy(fluid.dens)
|
||||||
|
# In Graustufen umwandeln und skalieren
|
||||||
|
dens_normalized = np.clip(dens_host * 255, 0, 255).astype(np.uint8)
|
||||||
|
color_img = np.stack((dens_normalized, dens_normalized, dens_normalized), axis=-1)
|
||||||
|
|
||||||
|
# Skalieren des Bildes auf die Bildschirmgröße
|
||||||
|
color_img_scaled = np.repeat(np.repeat(color_img, ZOOM, axis=0), ZOOM, axis=1)
|
||||||
|
|
||||||
|
# Erstellen eines Pygame-Surfaces aus dem Array
|
||||||
|
surface = pygame.surfarray.make_surface(color_img_scaled.swapaxes(0, 1))
|
||||||
|
|
||||||
|
# Blitten der Surface auf den Bildschirm
|
||||||
|
screen.blit(surface, (0, 0))
|
||||||
|
pygame.display.flip()
|
||||||
|
|
||||||
|
pygame.quit()
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
@ -0,0 +1,279 @@
|
|||||||
|
# 1. Einführung
|
||||||
|
## Modellbildung
|
||||||
|
- **Modell**: Vereinfachte Darstellung eines Systems
|
||||||
|
- **Simulation**: Virtuelles Experiment
|
||||||
|
|
||||||
|
## Mathematische Modellierung
|
||||||
|
- Features, Größen ( Objekte z.B. Staub, Wandposter ; Parameter z.B. Temperatur, Druck)
|
||||||
|
- Wechselwirkungen (Temperatur auf Personen im Raum; Druck und Staub)
|
||||||
|
|
||||||
|
- Eindeutige Lösung: Existiert eine Lösung und ist sie eindeutig?
|
||||||
|
- Abhängigkeit von Initialwerten: Je nachdem wo man in einem Shooter startet, sind die Überlebenschancen unterschiedlich gut.
|
||||||
|
- Genauigkeit / Auflösung: Personenströme als Flüssigkeit modellieren, kann nicht eine einzelne Person darstellen.
|
||||||
|
|
||||||
|
## Modellarten
|
||||||
|
- **Diskret**: In Schritten Simuliert
|
||||||
|
- **Kontinuierlich**: In Echtzeit / stetig
|
||||||
|
Simuliert
|
||||||
|
- **Deterministisch**: Immer das gleiche Ergebnis, mit den gleichen Anfangsbedingungen
|
||||||
|
- **Stochastisch**: Zufällige Ergebnisse, auch mit den gleichen Anfangsbedingungen (z.B. Würfel)
|
||||||
|
- **Inverse**: Ausgangsbedingungen aus Ergebnissen bestimmen oder Ergebnisse aus Ausgangsbedingungen bestimmen
|
||||||
|
|
||||||
|
### Skalen
|
||||||
|
- 1D, 2D, 3D, so einfach wie möglich, so komplex wie nötig
|
||||||
|
- Abstraktionsebene: Menschen, Zellen oder Moleküle, oder gar Atome
|
||||||
|
|
||||||
|
## Diskretitierung
|
||||||
|
- Gitterbreite h (delta zwischen punkten)
|
||||||
|
|
||||||
|
# 2. Geometrische Modellierung
|
||||||
|
## Rigid Body Anforderungen
|
||||||
|
- keine losen Teile (Zusammenhängend)
|
||||||
|
- keine 1D-Teile (z.B Linie, Punkt)
|
||||||
|
- Es muss ein Innen und Außen geben (Volumen)
|
||||||
|
- keine Löcher
|
||||||
|
- keine Überlappungen
|
||||||
|
- Orientierbar (Außen und Innen unterscheidbar)
|
||||||
|
- Manigfaltig möglich (Zwei körper teilen sich eine Kante)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Darstellungsformen (Speicherung)
|
||||||
|
- Vertecies (Ecken), Edges (Kanten), Faces (Flächen)
|
||||||
|
- $n_{v} - n_{e} + n_{f} = 2$ (Euler-Formel) -> Gilt für Rechtecke und Dreiecke
|
||||||
|
|
||||||
|
### vef-Graph
|
||||||
|
> Es werden nur die Koordinaten der **Eckpunkte** gespeichert, Kanten und Flächen speichern referenzen. Dadurch werden änderungen an den Eckpunkten automatisch in den Kanten und Flächen übernommen. \
|
||||||
|
> Eine **Kante** wird durch zwei Eckpunkte definiert. \
|
||||||
|
> Eine **Fläche** durch drei Kanten. \
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Volumenmodell
|
||||||
|

|
||||||
|
|
||||||
|
### Spacetree
|
||||||
|
- **Balanzierung**: Jeder Knoten entweder **0** oder **4** Kinder (Eine Fläche 2 hat Angrezende Flächen)
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### Codierung
|
||||||
|

|
||||||
|
|
||||||
|
#### Linearisierung
|
||||||
|

|
||||||
|
|
||||||
|
# 3. Spieltheorie
|
||||||
|
## Definition
|
||||||
|
- **Gewissheit**: Konsequenzen zu Aktionen bekannt
|
||||||
|
- **Risiko**: Wahrscheinlichkeit von Konsequenz zu Aktion teilweise bekannt
|
||||||
|
- **Unsicherheit**:keine Konsequenz zu Aktion bekannt
|
||||||
|
|
||||||
|
**Modellierung**
|
||||||
|
- Numbers of Players $N=\{1,2, \ldots, n\}$
|
||||||
|
- Anzahl Aktionen (Strategien)$A_i\qquad i\in \mathbb{N}$
|
||||||
|
- Menge Aktionsprofile (Strategieprofile) $A=\{\left( a_i \right)_{i\in \mathbb{N}}, a_i\in A_i, i\in\mathbb{N} \}$
|
||||||
|
- Auszahlungsfunktion $u_i: A\rightarrow\mathbb{R}$
|
||||||
|
|
||||||
|
## Unterteilung
|
||||||
|
- **Kooperation**
|
||||||
|
- **kooperative Spiele**: Spieler kooperieren müssen um zu gewinnen.
|
||||||
|
- **nicht-kooperative Spiele**: Spieler konkurrieren um zu gewinnen / spielen gegeneinander. (z.B. nur einer kann gewinnen)
|
||||||
|
- **Serie**
|
||||||
|
- **simultane Spiele**: In einem Durchlauf treffen alle für sich gleichzeitig die Wahl.
|
||||||
|
- **sequentielle Spiele**: Regeln wer wann Entscheiden darf.Sequenzielle Abfolge.
|
||||||
|
|
||||||
|
## Darstellung
|
||||||
|
- Bimatrixform / Normalform
|
||||||
|
- Gewinn wird angezeigt ($u_i$, $u_i$)
|
||||||
|

|
||||||
|
|
||||||
|
## Reine Strategien
|
||||||
|
### Gefangenen-Dilema
|
||||||
|
- Zwei Subjects $A_1\textrm{ und }A_2$
|
||||||
|
- Mögliche Aktionen
|
||||||
|
- **Leugnen L**: Niedrigere Strafe (2 Jahre)
|
||||||
|
- **Gestehen G**: Volle Strafe 5 (Kronzeuge) oder 8 Jahre
|
||||||
|
### Nash-Gleichgewicht
|
||||||
|
> Ist das Optimale Ergebnis für **alle** Spieler
|
||||||
|
- Wenn ein Spieler durch Ändern seiner Strategie, seinen Gewinn erhöhen kann, ist der aktuelle Zustand nicht im Nash-Gleichgewicht.
|
||||||
|
|
||||||
|
**Vorsicht!**:
|
||||||
|
- Jede Zelle muss einzeln betrachtet werden
|
||||||
|
- WICHTIG: Nicht mit der gleichen Strategie vergleichen
|
||||||
|
- Nash-Gleichgewicht muss für BEIDE Spieler gelten
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### Dominante Strategien
|
||||||
|
> Eine Strategie die besser oder gleich gut ist wie alle anderen Strategien (>=)
|
||||||
|
**Beispiel:**
|
||||||
|
Sicht von S1:
|
||||||
|
- S2 nimmt Leugnen: Nimmt S1 Gestehen = 8, nimmt S1 Leugnen = 6. 8 >= 6
|
||||||
|
- S2 nimmt Gestehen: Nimmt S1 Gestehen = 3, nimmt S1 Leugnen = 0. 3 >= 0
|
||||||
|
|
||||||
|
- Kreuzen sich Dominante Strategien, ist dort das Nash-Gleichgewicht (aber nicht umgekehrt)
|
||||||
|
#### Stark Dominante Strategien
|
||||||
|
> Eine Strategie die echt besser ist als alle anderen Strategien (>)
|
||||||
|
#### Falke-Taube-Spiel
|
||||||
|
#### Zwei-Personen-Nullsummenspiel
|
||||||
|
- Spieler 2 will gewinn maximieren, Spieler 1 will verlust minimieren
|
||||||
|
- nicht jedes 2PNS in reinen Strategien hat ein Nash-Gleichgewicht.
|
||||||
|
- **Gewinnfunktion**: $u_2 = -u_1$
|
||||||
|
|
||||||
|
- Matrixform
|
||||||
|

|
||||||
|
|
||||||
|
##### Konservative Strategien
|
||||||
|
- Wenn die Konservate Strategie beider Spieler gleich ist, ist dort ein Nash-Gleichgewicht.
|
||||||
|
|
||||||
|
**MinMax-Strategie**
|
||||||
|
Was sollte ich höchstens verlieren?
|
||||||
|
|
||||||
|
> 1. Mache eine liste mit dem jeweils größten Verlust
|
||||||
|
> 2. Daraus wähle den kleinsten Verlust
|
||||||
|
|
||||||
|
$$U_{-} = \min_{i}(\max_{j}(a_{ij}) )$$
|
||||||
|
|
||||||
|
**MaxMin-Strategie**
|
||||||
|
Was sollte ich mindestens gewinnen?
|
||||||
|
|
||||||
|
> 1. Mache eine liste mit dem minimalen gewinn
|
||||||
|
> 2. Daraus wähle den größten Gewinn
|
||||||
|
|
||||||
|
$$U_{+} = \max_{j}(\min_{i}(a_{ij}) )$$
|
||||||
|
|
||||||
|
**Sattelpunkt**
|
||||||
|
> Nash-Gleichgewicht, wenn die Untergrenze und Obergrenze übereinstimmen. Dort ist auch der Sattelpunkt.
|
||||||
|
$$U_{-} = a_{i^* j^*} = U_{+}$$
|
||||||
|
|
||||||
|

|
||||||
|
## Gemischte Strategien
|
||||||
|
|
||||||
|
> Spieler entscheidet zufällig zwischen Strategien
|
||||||
|
- Jede Strategie hat eine Wahrscheinlichkeit. $p_i$
|
||||||
|
- Alle Wahrscheinlichkeiten addieren sich zu 1: $\sum_{i} p_i = 1$
|
||||||
|
- Minimum 2 Strategien
|
||||||
|
|
||||||
|
**Beispiel Spieler 1:**
|
||||||
|
$$p_1 = 70\%$$
|
||||||
|
|
||||||
|
$$p_2 = 1-p_1 = 30\%$$
|
||||||
|
|
||||||
|
**Beispiel Spieler 2:**
|
||||||
|
$$q_1 = 60\%$$
|
||||||
|
|
||||||
|
$$q_2 = 1-q_1 = 40\%$$
|
||||||
|
|
||||||
|
>Summe aus allen Zellen, eine Zelle wird mit der Wahrscheinlichkeit von Zeile und Spalte Multipliziert.
|
||||||
|
|
||||||
|
**ACHTUNG KANN MAN NUR GRAPHISCH LÖSEN**
|
||||||
|

|
||||||
|
|
||||||
|
### Lösen von Gemischten Strategien
|
||||||
|
> **Tip**: Beim Vereinfachen nicht die Klammern ausmultiplizeren, weil man einfach kürzen kann.
|
||||||
|
1. Setze Erwartungswerte gleich von Beiden Strategien für Beide Spieler
|
||||||
|
|
||||||
|
**Berechnen von q aus Sicht von Spieler 1**
|
||||||
|
$$\mu_{S_{11}} = \mu_{S_{12}}$$
|
||||||
|
|
||||||
|
**Berechnung von p aus Sicht von Spieler 2**
|
||||||
|
$$\mu_{S_{21}} = \mu_{S_{22}}$$
|
||||||
|
|
||||||
|
2. Einsetzen der Erwartungswerte und U- und U+ ausrechnen
|
||||||
|
3. Wenn U- und U+ gleich sind, ist das Nash-Gleichgewicht
|
||||||
|
|
||||||
|
> **INFO**: Wenn eine Freie Variable in der Gleichung ist, die gleichung in abhängigkeit von der freien Variable umstellen, nash-gleichgewicht ist dann von z.B. s abhängig.
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
## Gruppenentscheidungen
|
||||||
|
- Menge an Auswahlmöglichkeiten
|
||||||
|
- Jeder Möglichkeit wird eine Zahl ( $k \isin \N$ ) zugeordnet ( Rang )
|
||||||
|
- Rangabbildung ist Surjetiv (Jede Möglichkeit hat einen Rang. Ein Rang kann aber mehrmals auftreten )
|
||||||
|
|
||||||
|
### Relationen
|
||||||
|
$$r(x) < r(y): \text{x ist besser als y}$$
|
||||||
|
$$x \ R \ y: \text{x steht in Relation zu y}$$
|
||||||
|
|
||||||
|
>reflexiv schließt asymetrisch aus und umgekehrt
|
||||||
|
|
||||||
|
- **transitiv**: $x \ R \ y \ und \ y \ R \ z \Rightarrow x \ R \ z$
|
||||||
|
- $\text{Wenn 2 < 3 und 3 < 4, dann auch 2 < 4}$
|
||||||
|
- **reflexiv**: $x \ R \ x$
|
||||||
|
- $\text{2 <= 2}$
|
||||||
|
- **asymetrisch**: $x \ R \ y \And y \ R \ x \Rightarrow False$
|
||||||
|
- $\text{2 < 3, aber nicht 3 < 2}$
|
||||||
|
|
||||||
|
### Präferenzen
|
||||||
|

|
||||||
|

|
||||||
|
>*Lesen*: Von links starten dann relation dann rechts
|
||||||
|

|
||||||
|
|
||||||
|
### Extern/Intern Diktator
|
||||||
|

|
||||||
|
|
||||||
|
### Rangaddition
|
||||||
|
>Jede Wahlmöglichkeit wird mit der Summe der Ränge bewertet. Die Wahlmöglichkeit mit der niedrigsten Summe ist die beste.
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
### Condorcet-Verfahren (BEI MINUTE 40:00 bis 1:10:00)
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
### Einstimmigkeit
|
||||||
|

|
||||||
|
|
||||||
|

|
||||||
|
- I.e. Irrelevante Änderungen hinten in der Reihenfolge, dürfen nicht vorne in der Reihenfolge etwas ändern.
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
# 4. Automaten
|
||||||
|
- **Forderung**: Simulation schneller als Echtzeit
|
||||||
|
|
||||||
|
## Bestandteile
|
||||||
|
- **Zellraum**: Spielfeld, i.d.R. eine Matrix in der jedes Element einer Zelle entspricht
|
||||||
|
- **Zustandsmenge**: Menge aller möglichen ( diskrete ) Zustände einer Zelle -> State Machine
|
||||||
|
- **Nachbarschaftsbeziehung**: Zustände der Nachbarzellen werden berücksichtigt
|
||||||
|
- **diskrete Zeit**: Zustandsänderung eines ZA erfolgt in diskreten Zeitschritten $\delta t$ (z.B. 1s)
|
||||||
|
- **lokale übergangsfunktion**: Berechnet den Zustand $Z_{t+\delta t}$ einer Zelle aus dem aktuellen Zustand $Z_t$ und den Zuständen der Nachbarzellen
|
||||||
|
|
||||||
|
## Nachbarzellen (im 2D und Schachbrett )
|
||||||
|
- **Moore-Nachbarschaft**: 8 Zellen um die Zelle
|
||||||
|
- **Von-Neumann-Nachbarschaft**: 4 Zellen um die Zelle
|
||||||
|
|
||||||
|
## Übergangsfunktion ( Beispiel Conways Game of Life)
|
||||||
|
```python
|
||||||
|
def transition_function(cell, neighbors):
|
||||||
|
if cell == 0 and sum(neighbors) == 3: # Wenn Zelle tot und 3 Nachbarn lebendig
|
||||||
|
return 1 # Dann wird die Zelle wiederbelebt
|
||||||
|
elif cell == 1 and sum(neighbors) in [2, 3]: # Wenn Zelle lebendig und 2 oder 3 Nachbarn lebendig
|
||||||
|
return 1
|
||||||
|
else:
|
||||||
|
return 0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Game of Life
|
||||||
|
Start mit 2D-Gitter.
|
||||||
|
Jede Zelle ist entweder lebendig oder tot und ändert ihren Zustand gemäß der Nachbarzellen: \
|
||||||
|
Eine lebende Zelle mit 2 oder 3 lebenden Nachbarn bleibt am Leben, sonst stirbt sie.
|
||||||
|
Eine tote Zelle mit genau 3 lebenden Nachbarn wird lebendig.
|
||||||
|
Es werden ALLE Zellen mit dem aktuellen Zustand und den Nachbarzellen betrachtet, daraus wird der nächste Zustand berechnet, damit die Zellen parallel aktualisiert werden.
|
||||||
|
|
||||||
|
**Kurzfassung**:
|
||||||
|
- Grid anlegen (2D-Liste)
|
||||||
|
- Jede Runde Nachbarn zählen
|
||||||
|
- Nach obigen Regeln neue Zustände berechnen
|
||||||
|
- Endlos aktualisieren und ausgeben.
|
||||||
|
# Mathe schriftlich rechnen
|
||||||
|
## Dividieren
|
||||||
|

|
||||||
|
|
||||||
|
## Multiplizieren
|
||||||
|

|
Binary file not shown.
@ -0,0 +1,8 @@
|
|||||||
|
![[Pasted image 20250131123257.png]]
|
||||||
|
|
||||||
|
![[Pasted image 20250131123144.png]]
|
||||||
|
![[Pasted image 20250131123158.png]]
|
||||||
|
![[Pasted image 20250131123224.png]]
|
||||||
|
![[Pasted image 20250131123251.png]]
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user