Modul MathKINN II: Mathematische Grundlagen zu Künstliche Intelligenz, Neuronale Netze und Data Analytics II - Exam.pdf

Modul MathKINN II: Mathematische Grundlagen zu Künstliche Intelligenz, Neuronale Netze und Data Analytics II - Exam
Modul MathKINN II: Mathematische Grundlagen zu Künstliche Intelligenz, Neuronale Netze und Data Analytics II - Exam Aufgabe 1) Backpropagation und Gradient Abstieg Backpropagation: Fehlerrückführung in mehrschichtigen Neuronalen Netzen zur Anpassung der Gewichte. Gradient Abstieg: Optimierungsverfahren zur Minimierung der Kostenfunktion. Backpropagation berechnet Gradienten der Kostenfunktion rela...

© StudySmarter 2024, all rights reserved.

Modul MathKINN II: Mathematische Grundlagen zu Künstliche Intelligenz, Neuronale Netze und Data Analytics II - Exam

Aufgabe 1)

Backpropagation und Gradient AbstiegBackpropagation: Fehlerrückführung in mehrschichtigen Neuronalen Netzen zur Anpassung der Gewichte. Gradient Abstieg: Optimierungsverfahren zur Minimierung der Kostenfunktion.

  • Backpropagation berechnet Gradienten der Kostenfunktion relativ zu jedem Gewicht durch Kettenregel.
  • Gradient Abstieg aktualisiert Gewichte: \( w_{new} = w_{old} - \eta \frac{\partial J}{\partial w} \), wobei \( \eta \) die Lernrate und \( \frac{\partial J}{\partial w} \) der Gradient der Kostenfunktion \( J \) ist.
  • Zwei Phasen: Vorwärts- und Rückwärtsphase.
  • Vorwärtsphase: Berechnung der Ausgabe des Netzwerks.
  • Rückwärtsphase: Berechnung der Gradienten durch Rückpropagierung der Fehler.
  • Wiederholt sich iterativ, um die Gewichte zu optimieren.

a)

(a) Gegeben sei ein einfaches neuronales Netzwerk mit einer Eingabeschicht, einer versteckten Schicht und einer Ausgabeschicht. Die Aktivierungsfunktion sei die Sigmoidfunktion: \( \sigma(z) = \frac{1}{1 + e^{-z}} \). Leite die Gleichungen für die Vorwärtsphase her, wobei die Eingabe \( x \), die Gewichte \( w^{(1)} \) und \( w^{(2)} \), sowie die Zwischen- und Ausgabewerte berücksichtigt werden.

Lösung:

Backpropagation und Gradient Abstieg

(a) Vorwärtsphase für ein einfaches neuronales Netzwerk

Gegeben sei ein neuronales Netzwerk mit folgenden Schichten und Gewichten:

  • Eingabeschicht: x
  • Versteckte Schicht: Gewichte w^{(1)}, Aktivierungen z^{(1)}, und Ausgaben a^{(1)}
  • Ausgabeschicht: Gewichte w^{(2)}, Aktivierungen z^{(2)}, und Ausgaben y_{\text{netz}}

Die Aktivierungsfunktion ist die Sigmoidfunktion:

\[ \sigma(z) = \frac{1}{1 + e^{-z}} \]

Wir leiten nun die Gleichungen für die Vorwärtsphase her:

  1. Berechnung der Aktivierungen für die versteckte Schicht:
  • z^{(1)} = w^{(1)} \times x
  • a^{(1)} = \sigma(z^{(1)})
  • Berechnung der Aktivierungen für die Ausgabeschicht:
    • z^{(2)} = w^{(2)} \times a^{(1)}
    • y_{\text{netz}} = \sigma(z^{(2)})

    Fassen wir diese Schritte zusammen:

    1. Zuerst berechnen wir die lineare Kombination der Eingabe und der Gewichte der versteckten Schicht:
    2. \[ z^{(1)} = w^{(1)} \times x \]

    3. Wir wenden die Aktivierungsfunktion auf z^{(1)} an, um die Ausgabe der versteckten Schicht zu erhalten:
    4. \[ a^{(1)} = \sigma(z^{(1)}) \]

    5. Als nächstes berechnen wir die lineare Kombination der Ausgabe der versteckten Schicht und der Gewichte der Ausgabeschicht:
    6. \[ z^{(2)} = w^{(2)} \times a^{(1)} \]

    7. Schließlich wenden wir die Aktivierungsfunktion auf z^{(2)} an, um die Ausgabe des Netzwerks zu erhalten:
    8. \[ y_{\text{netz}} = \sigma(z^{(2)}) \]

    b)

    (b) Beschreibe die Rückwärtsphase des obigen Netzwerks, indem Du die Gradienten der Fehlerfunktion bezüglich der Gewichte \( w^{(1)} \) und \( w^{(2)} \) herleitest. Nutze dabei die Kettenregel und die Definition der Ableitungen der Sigmoidfunktion: \( \sigma'(z) = \sigma(z)(1 - \sigma(z)) \).

    Lösung:

    Backpropagation und Gradient Abstieg

    (b) Rückwärtsphase für ein einfaches neuronales Netzwerk

    In der Rückwärtsphase berechnen wir die Gradienten der Fehlerfunktion bezüglich der Gewichte \(w^{(1)}\) und \(w^{(2)}\). Wir nutzen dabei die Kettenregel und die Definition der Ableitungen der Sigmoidfunktion:

    \[ \sigma'(z) = \sigma(z)(1 - \sigma(z)) \]

    Sei \(J\) die Kostenfunktion des neuronalen Netzes und \(y\_true\) der wahre Wert der Zielgröße. Zuerst berechnen wir den Fehler in der Ausgabeschicht.

    1. Fehler in der Ausgabeschicht:
    2. Der Gradient der Kostenfunktion bezüglich der Aktivierung der Ausgabeschicht \(a^{(2)} = y_{\text{netz}}\) ist:

      \[ \delta^{(2)} = \frac{\partial J}{\partial a^{(2)}} = y_{\text{netz}} - y\_true \]

    3. Gradient der Kostenfunktion bezüglich der Gewichte der Ausgabeschicht \(w^{(2)}\):
    4. Wir nutzen die Kettenregel:

      \[ \frac{\partial J}{\partial w^{(2)}} = \delta^{(2)} \cdot \frac{\partial a^{(2)}}{\partial w^{(2)}} = \delta^{(2)} \cdot a^{(1)} \]

    5. Fehler in der versteckten Schicht:
    6. Der Fehler in der versteckten Schicht beruht auf dem Fehler der Ausgabeschicht, multipliziert mit den Gewichten \(w^{(2)}\):

      \[ \delta^{(1)} = \left( w^{(2)} \cdot \delta^{(2)} \right) \cdot \sigma'(z^{(1)}) \]

      Da \( \sigma'(z^{(1)}) = \sigma(z^{(1)})(1 - \sigma(z^{(1)}))\) und \(a^{(1)} = \sigma(z^{(1)})\), ist:

      \[ \delta^{(1)} = \left( w^{(2)} \cdot \delta^{(2)} \right) \cdot a^{(1)}(1 - a^{(1)}) \]

    7. Gradient der Kostenfunktion bezüglich der Gewichte der versteckten Schicht \(w^{(1)}\):
    8. Wir nutzen wieder die Kettenregel:

      \[ \frac{\partial J}{\partial w^{(1)}} = \delta^{(1)} \cdot \frac{\partial a^{(1)}}{\partial w^{(1)}} = \delta^{(1)} \times x \]

    Zusammenfassend ergibt sich:

    1. Der Gradient der Kostenfunktion bezüglich der Gewichte der Ausgabeschicht \(w^{(2)}\):
    2. \[ \frac{\partial J}{\partial w^{(2)}} = \delta^{(2)} \cdot a^{(1)} = (y_{\text{netz}} - y\_true) \cdot a^{(1)} \]

    3. Der Gradient der Kostenfunktion bezüglich der Gewichte der versteckten Schicht \(w^{(1)}\):
    4. \[ \frac{\partial J}{\partial w^{(1)}} = \delta^{(1)} \cdot x = \left( w^{(2)} \cdot (y_{\text{netz}} - y\_true) \cdot a^{(1)}(1 - a^{(1)}) \right) \cdot x \]

    c)

    (c) Implementiere die Rückwärtsphase des neuronalen Netzwerks in Python. Beachte dabei die Berechnung der Gradienten und die anschließende Aktualisierung der Gewichte durch Gradient Abstieg. Gehe davon aus, dass die Lernrate \( \eta \) gegeben ist.

    Lösung:

    Backpropagation und Gradient Abstieg

    (c) Implementierung der Rückwärtsphase in Python

    Im Folgenden implementieren wir die Rückwärtsphase für ein einfaches neuronales Netzwerk mit einer Eingabeschicht, einer versteckten Schicht und einer Ausgabeschicht in Python. Wir berechnen die Gradienten und aktualisieren die Gewichte durch Gradient Abstieg.

    Schritte:

    • Definiere die Sigmoid-Aktivierungsfunktion und ihre Ableitung.
    • Implementiere die Vorwärtsphase des Netzwerks.
    • Implementiere die Rückwärtsphase zur Berechnung der Gradienten.
    • Aktualisiere die Gewichte durch Gradient Abstieg.

    Python-Code:

    import numpy as npdef sigmoid(z):    return 1 / (1 + np.exp(-z))def sigmoid_derivative(z):    return sigmoid(z) * (1 - sigmoid(z))# Vorwärtsphase des Netzwerksdef forward_pass(x, w1, w2):    z1 = np.dot(w1, x)    a1 = sigmoid(z1)    z2 = np.dot(w2, a1)    y_hat = sigmoid(z2)    return z1, a1, z2, y_hat# Rückwärtsphase des Netzwerksdef backward_pass(x, y, w1, w2, z1, a1, z2, y_hat, eta):    # Fehler in der Ausgabeschicht    delta2 = y_hat - y    d_w2 = np.dot(delta2, a1.T)        # Fehler in der versteckten Schicht    delta1 = np.dot(w2.T, delta2) * sigmoid_derivative(z1)    d_w1 = np.dot(delta1, x.T)        # Gewichte aktualisieren    w2 -= eta * d_w2    w1 -= eta * d_w1        return w1, w2# Beispiel: Eingabe, Gewichte, Lernratex = np.array([[0.5], [0.1]])w1 = np.random.rand(2, 2)w2 = np.random.rand(1, 2)y = np.array([[1]])eta = 0.01# Vorwärtsphasez1, a1, z2, y_hat = forward_pass(x, w1, w2)print('Vorhersage:', y_hat)# Rückwärtsphase und Gewichtsaktualisierungw1, w2 = backward_pass(x, y, w1, w2, z1, a1, z2, y_hat, eta)print('Aktualisierte Gewichte w1:', w1)print('Aktualisierte Gewichte w2:', w2)

    In diesem Python-Code implementieren wir wie gefordert die Rückwärtsphase. Zuerst wird die Vorhersage des Netzwerks durch die Vorwärtsphase berechnet. Dann werden die Gradienten anhand der Fehler in der Ausgabeschicht und versteckten Schicht berechnet und die Gewichte werden entsprechend durch Gradient Abstieg aktualisiert.

    d)

    (d) Diskutiere die Auswirkungen der Wahl der Lernrate \( \eta \) auf den Trainingsprozess. Was passiert, wenn \( \eta \) zu groß oder zu klein ist? Welche Maßnahmen kann man ergreifen, um die Wahl der Lernrate zu optimieren?

    Lösung:

    Backpropagation und Gradient Abstieg

    (d) Auswirkungen der Wahl der Lernrate (\

    Aufgabe 2)

    Aktivierungsfunktionen und ihre EigenschaftenAktivierungsfunktionen wie ReLU, Sigmoid und Tanh werden in künstlichen neuronalen Netzen verwendet, um Nichtlinearitäten einzuführen, die helfen, komplexe Muster zu modellieren. Drei Haupttypen von Aktivierungsfunktionen sind:

    • ReLU (Rectified Linear Unit): Einfach, schnell konvergierend und ermöglicht ein sparsames Aktivieren. Mathematisch definiert als: \[ f(x) = \text{max}(0, x) \]
    • Sigmoid: Glättet den Output zwischen 0 und 1 und ist für binäre Klassifikationen geeignet. Mathematisch definiert als: \[ f(x) = \frac{1}{1 + e^{-x}} \]
    • Tanh (Hyperbolischer Tangens): Hat einen Wertebereich von -1 bis 1 und ist symmetrisch um die Null. Mathematisch definiert als: \[ f(x) = \text{tanh}(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} \]

    a)

    (a) Graphische Darstellung:Zeichne die Graphen der Aktivierungsfunktionen ReLU, Sigmoid und Tanh. Beschrifte die Achsen korrekt, und markiere besondere Punkte, zum Beispiel Schnittpunkte mit den Achsen und Asymptoten. Begründe kurz, wie diese Graphen die jeweiligen Eigenschaften der Funktionen reflektieren.

    Lösung:

    (a) Graphische Darstellung:Um die Graphen der Aktivierungsfunktionen ReLU, Sigmoid und Tanh zu zeichnen und ihre Eigenschaften zu analysieren, kannst Du das folgende Python-Skript verwenden. Es nutzt die Bibliothek `matplotlib` zur Darstellung der Funktionen.Benötigte Bibliothek zur Installation:

    'pip install matplotlib'
    Hier ist der Python-Code zum Zeichnen der Grafiken:
    import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-10, 10, 400)relu = np.maximum(0, x)sigmoid = 1 / (1 + np.exp(-x))tanh = np.tanh(x)plt.figure(figsize=(12, 8))# ReLU Aktivierungsfunktionplt.subplot(3, 1, 1)plt.plot(x, relu, label='ReLU')plt.title('ReLU Aktivierungsfunktion')plt.axhline(0, color='black', linewidth=0.5)plt.axvline(0, color='black', linewidth=0.5)plt.grid(True)plt.legend()# Sigmoid Aktivierungsfunktionplt.subplot(3, 1, 2)plt.plot(x, sigmoid, label='Sigmoid', color='orange')plt.title('Sigmoid Aktivierungsfunktion')plt.axhline(0, color='black', linewidth=0.5)plt.axvline(0, color='black', linewidth=0.5)plt.grid(True)plt.legend()# Tanh Aktivierungsfunktionplt.subplot(3, 1, 3)plt.plot(x, tanh, label='Tanh', color='green')plt.title('Tanh Aktivierungsfunktion')plt.axhline(0, color='black', linewidth=0.5)plt.axvline(0, color='black', linewidth=0.5)plt.grid(True)plt.legend()plt.tight_layout()plt.show()
    Erklärung:
    • ReLU (Rectified Linear Unit): Der Graph der ReLU-Funktion ist eine Linie, die für negative Werte von `x` auf der x-Achse liegt und für positive Werte von `x` eine gerade Linie mit einer Steigung von 1 bildet. Dies zeigt die Eigenschaft der ReLU-Funktion, dass sie alle negativen Inputs auf 0 setzt und die positiven Inputs linear durchlässt. Diese Nichtlinearität hilft, komplexe Muster zu modellieren und gleichzeitig eine schnelle Konvergenz zu ermöglichen.
    • Sigmoid: Der Graph der Sigmoid-Funktion ist eine S-Kurve, die asymptotisch gegen 0 für große negative `x`-Werte und gegen 1 für große positive `x`-Werte strebt. Die Funktion ist glatt und monoton steigend, was sie für binäre Klassifikationen geeignet macht. Der glatte Übergang reflektiert, dass kleine Änderungen bei `x` nahe 0 große Änderungen im Output verursachen können.
    • Tanh (Hyperbolischer Tangens): Der Graph der Tanh-Funktion ist ebenfalls eine S-Kurve, aber sie erstreckt sich von -1 bis 1. Die Symmetrie um die Null zeigt, dass sie sowohl positive als auch negative Inputs gut nivelliert und signifikante Unterschiede zwischen Input-Werten reflektieren kann. Dies kann hilfreich sein, wenn man mit zentrierten Daten arbeitet, da es den Mittelwert jedes Outputs bei 0 hält.

    Aufgabe 3)

    Du hast einen Datensatz von einem klinischen Forschungsprojekt erhalten, das sich auf die Diagnose bestimmter Herzkrankheiten konzentriert. Der Datensatz enthält zahlreiche Attribute, darunter Alter, Geschlecht, Cholesterinwerte, Blutdruck, und Diagnoseberichte. Es sind jedoch einige Daten unvollständig oder fehlerhaft. Um die Daten in ein nutzbares Format für maschinelles Lernen vorzubereiten, musst Du verschiedene Techniken zur Datenvorverarbeitung anwenden.

    a)

    Fehlende Werte: Im Datensatz fehlen die Cholesterinwerte für einige Patienten. Beschreibe die verschiedenen Strategien, die Du anwenden kannst, um mit den fehlenden Werten umzugehen und diskutiere deren Vor- und Nachteile.

    Lösung:

    Umgang mit fehlenden Cholesterinwerten:Es gibt verschiedene Strategien, um mit fehlenden Cholesterinwerten in einem Datensatz umzugehen. Hier sind einige der gängigsten Methoden, zusammen mit ihren Vor- und Nachteilen:

    • Löschen der Einträge:Du kannst alle Datensätze löschen, die fehlende Cholesterinwerte enthalten.
      • Vorteil: Einfach zu implementieren; keine Verzerrung durch ungenaue Schätzungen.
      • Nachteil: Kann zu einem erheblichen Verlust an Daten führen, was die Analyse beeinträchtigen kann, insbesondere wenn viele Werte fehlen.
    • Durchschnittswert (Mean Imputation):Fehlende Cholesterinwerte werden durch den Durchschnittswert der vorhandenen Cholesterinwerte ersetzt.
      • Vorteil: Einfach zu berechnen und in den Datensatz zu integrieren.
      • Nachteil: Kann zu einer Verkleinerung der Varianz führen und Muster im Datensatz verzerren.
    • Medianwert (Median Imputation):Ähnlich wie die Durchschnittswertmethode, jedoch werden die fehlenden Werte durch den Medianwert ersetzt.
      • Vorteil: Widerstandsfähiger gegenüber Ausreißern im Vergleich zur Durchschnittswertmethode.
      • Nachteil: Kann immer noch die Datenverteilung beeinflussen, allerdings weniger stark als der Durchschnittswert.
    • Moduswert (Mode Imputation):Bei kategorischen Daten kann der häufigste Wert (Modus) verwendet werden, um fehlende Werte zu ersetzen.
      • Vorteil: Einfach anzuwenden, wenn Daten kategorisch sind.
      • Nachteil: Weniger anwendbar bei kontinuierlichen Daten wie Cholesterinwerten.
    • Vorherige/Nachfolgende Werte (Forward/Backward Fill):Fehlende Werte werden durch den vorherigen oder nachfolgenden Wert im Datensatz ersetzt.
      • Vorteil: Kann bei Zeitreihendaten sinnvoll sein, wenn benachbarte Werte ähnlich sind.
      • Nachteil: Kann zu künstlichen Mustern führen und ist nicht immer angemessen für isolierte Datenpunkte.
    • K-nearest Neighbors (KNN) Imputation:Füllt fehlende Werte basierend auf den Werten der nächsten Nachbarn im Datensatz.
      • Vorteil: Berücksichtigt Muster und Beziehungen zwischen verschiedenen Attributen, führt oft zu präziseren Schätzungen.
      • Nachteil: Rechenaufwändiger und komplexer in der Implementierung.
    • Regression Imputation:Verwendet Regressionsmodelle, um fehlende Werte basierend auf anderen Attributen zu schätzen.
      • Vorteil: Kann präzise Vorhersagen liefern, wenn die Beziehung zwischen Attributen stark ist.
      • Nachteil: Kann zu einer Verkleinerung der Varianz führen und potenzielle Unsicherheiten verbergen.
    • Multiple Imputation:Erstellt mehrere Datensätze mit verschiedenen Schätzungen für die fehlenden Werte und kombiniert die Ergebnisse zur Analyse.
      • Vorteil: Berücksichtigt Unsicherheiten und führt zu robusteren Schätzungen.
      • Nachteil: Sehr komplex und rechenintensiv.
    Die Wahl der geeigneten Imputationstechnik hängt von den spezifischen Anforderungen des Projekts, den verfügbaren Ressourcen und der Natur des Datensatzes ab. Es ist oft ratsam, verschiedene Methoden zu testen und deren Auswirkungen auf die Analyse zu vergleichen.

    b)

    Outlier-Entfernung: Einige der Blutdruckwerte scheinen außergewöhnlich hoch oder niedrig zu sein. Wende die IQR-Methode an, um die Outlier zu identifizieren und zu entfernen. Zeige die relevanten Berechnungen und bespreche die Ergebnisse.

    Lösung:

    Outlier-Entfernung mittels der IQR-Methode:Die Interquartilsabstand-Methode (IQR-Methode) ist eine effektive Technik zur Identifizierung und Entfernung von Ausreißern aus einem Datensatz. Hier sind die Schritte zur Anwendung der IQR-Methode auf die Blutdruckwerte, um Ausreißer zu identifizieren und zu entfernen:

    • Schritt 1: Berechnung des IQR
    • Sortiere die Blutdruckwerte in aufsteigender Reihenfolge.
    • Bestimme das erste Quartil (Q1), das den Median der unteren Hälfte der Daten darstellt.
    • Bestimme das dritte Quartil (Q3), das den Median der oberen Hälfte der Daten darstellt.
    • Berechne den IQR als: IQR = Q3 - Q1
      • Formel:
    Q1 = 25. Perzentil der BlutdruckwerteQ3 = 75. Perzentil der BlutdruckwerteIQR = Q3 - Q1
    • Schritt 2: Bestimmung der Ausreißergrenzen
    • Berechne die unteren und oberen Grenzen, um Ausreißer zu identifizieren:
      • Untere Grenze: Q1 - 1,5 * IQR
      • Obere Grenze: Q3 + 1,5 * IQR
        • Formel:
    Untere Grenze = Q1 - 1,5 * IQRObere Grenze = Q3 + 1,5 * IQR
    • Schritt 3: Identifikation und Entfernung der Ausreißer
    • Identifiziere alle Blutdruckwerte, die unterhalb der unteren Grenze oder oberhalb der oberen Grenze liegen.
    • Entferne diese Werte aus dem Datensatz.
    • Beispielberechnungen:
    • Angenommen, die Blutdruckwerte in aufsteigender Reihenfolge sind:
    [80, 85, 90, 92, 93, 95, 96, 100, 102, 104, 105, 110, 115, 120, 125, 130]
    • Q1 (25. Perzentil) ≈ 92
    • Q3 (75. Perzentil) ≈ 110
    • IQR = 110 - 92 = 18
    • Untere Grenze = 92 - 1,5 * 18 = 65
    • Obere Grenze = 110 + 1,5 * 18 = 137
      • Blutdruckwerte unter 65 oder über 137 werden als Ausreißer markiert.
    • Auswertung der Ergebnisse:
    • Nach Anwendung der IQR-Methode auf diesen Beispieldatensatz gibt es keine Blutdruckwerte, die unter 65 oder über 137 liegen, daher sind keine Ausreißer vorhanden.
    • Falls Ausreißer identifiziert und entfernt wurden, spiegeln die verbleibenden Blutdruckwerte genauer die allgemeinen Trends und Muster im Datensatz wider, was die Nachfolgeanalyse verbessert.
    Die IQR-Methode ist besonders nützlich, da sie robust gegenüber Ausreißern ist und durch die Eliminierung der Extremwerte die Datenstandards verbessert, die für maschinelles Lernen unerlässlich sind.

    d)

    Feature Engineering: Entwickle mindestens zwei neue Merkmale basierend auf den vorhandenen Attributen im Datensatz, die potenziell die Diagnosemodelle verbessern könnten. Beschreibe die neuen Merkmale und erkläre ihre Relevanz für die Diagnose der Herzkrankheiten.

    Lösung:

    Feature Engineering:Feature Engineering ist ein entscheidender Schritt in der Datenvorverarbeitung, der beinhaltet, neue Merkmale aus vorhandenen Attributen zu erstellen, um die Leistung von maschinellen Lernmodellen zu verbessern. Hier sind zwei neue Merkmale, die aus den vorhandenen Attributen im Datensatz erstellt werden könnten, um die Diagnosemodelle für Herzkrankheiten zu verbessern:

    • Merkmal 1: Verhältnis von Cholesterinwert zu Alter (Cholesterin/Alter)
    • Beschreibung:
      • Dieses Merkmal wird erstellt, indem der Cholesterinwert eines Patienten durch sein Alter geteilt wird.
    • Relevanz:
      • Ein hohes Verhältnis von Cholesterinwert zu Alter könnte darauf hinweisen, dass ein Patient für sein Alter ungewöhnlich hohe Cholesterinwerte hat, was auf ein höheres Risiko für Herzkrankheiten hinweisen könnte. Dieses Merkmal kombiniert die beiden wichtigen Faktoren (Alter und Cholesterin), um eine aussagekräftigere Variable zu schaffen, die möglicherweise besser mit dem Risiko von Herzkrankheiten korreliert als die einzelnen Attribute.
    • Merkmal 2: Blutdruckkategorie (Normal / Erhöht / Hoch)
    • Beschreibung:
      • Dieses Merkmal kategorisiert die Blutdruckwerte in drei Klassen basierend auf den Richtlinien der American Heart Association (AHA): Normal, Erhöht und Hoch.
          • Normal: ≤ 120/80 mmHg
          • Erhöht: 120-129/< 80 mmHg
          • Hoch: ≥ 130/80 mmHg
      • Relevanz:
        • Die Kategorisierung der Blutdruckwerte hilft dabei, die Schwere des Blutdrucks für die Diagnose von Herzkrankheiten zu bewerten. Patienten mit hohem Blutdruck haben ein höheres Risiko für Herzkrankheiten, und das Verständnis dieser Kategorien kann den Diagnoseprozess verbessern, da die Entscheidungsmuster von maschinellen Lernmodellen bei kategorischen Eingabewerten oft klarer sind.
      • Implementierung dieser Merkmale:
      • Verhältnis von Cholesterinwert zu Alter:
        datensatz['Cholesterin_Alter_Verh'] = datensatz['Cholesterin'] / datensatz['Alter']
      • Blutdruckkategorie:
        def blutdruck_kategorie(systolisch, diastolisch):    if systolisch <= 120 and diastolisch <= 80:        return 'Normal'    elif 120 < systolisch < 130 and diastolisch < 80:        return 'Erhöht'    elif systolisch >= 130 or diastolisch >= 80:        return 'Hoch'    else:        return 'Indeterminiert'datensatz['Blutdruckkategorie'] = datensatz.apply(lambda row: blutdruck_kategorie(row['Systolisch'], row['Diastolisch']), axis=1)
      • Fazit:
      • Durch die Erstellung und Implementierung neuer Merkmale wie das Verhältnis von Cholesterinwert zu Alter und die Blutdruckkategorie können die Diagnosemodelle potenziell verbessert werden, da sie relevantere und aussagekräftigere Eingabevariablen nutzen. Diese Merkmale können tiefere Einblicke in den Gesundheitszustand der Patienten bieten und dazu beitragen, bessere Vorhersagen über das Risiko von Herzkrankheiten zu treffen.

      Aufgabe 4)

      Du arbeitest bei einem Datenanalyse-Unternehmen, das Daten von verschiedenen Kunden untersucht. Deine Aufgabe ist es, eine Stichprobe von 50 Datenpunkten einer Kundendatei sowohl deskriptiv als auch inferenziell zu analysieren. Die Daten enthalten Messungen eines Attributs, welches als kontinuierliche Variable behandelt werden kann.

      a)

      Berechne die deskriptiven Kennzahlen der Stichprobe. Dazu gehören der Mittelwert (\(\bar{x}\)), der Median, die Varianz (\(\text{Var}(X)\)) und die Standardabweichung (\(\text{std}(X)\)).

      Lösung:

      Um die deskriptiven Kennzahlen für eine Stichprobe von 50 Datenpunkten zu berechnen, folgen wir diesen Schritten:

      • Mittelwert (\(\bar{x}\)): Der Mittelwert ist die Summe aller Datenpunkte, geteilt durch die Anzahl der Datenpunkte.
    \[\bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i\]
    • Median: Der Median ist der mittlere Wert der sortierten Datenpunkte. Wenn die Anzahl der Datenpunkte gerade ist, dann ist der Median der Durchschnitt der beiden mittleren Werte.
    • Varianz (\(\text{Var}(X)\)): Die Varianz misst, wie weit die Datenpunkte im Durchschnitt vom Mittelwert entfernt sind.
    \[\text{Var}(X) = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2\]
    • Standardabweichung (\(\text{std}(X)\)): Die Standardabweichung ist die Quadratwurzel der Varianz und gibt an, wie stark die Datenpunkte um den Mittelwert streuen.
    \[\text{std}(X) = \sqrt{\text{Var}(X)}\]

    Angenommen, wir haben die folgende Stichprobe von 50 Datenpunkten:

      sample_data = [value1, value2, value3, ..., value50]  

    Wir berechnen die Kennzahlen Schritt für Schritt:

    • Berechne den Mittelwert:
        mean = sum(sample_data) / len(sample_data)  
    • Sortiere die Daten und finde den Median:
        sorted_data = sorted(sample_data) if len(sorted_data) % 2 == 0: median = (sorted_data[len(sorted_data) // 2 - 1] + sorted_data[len(sorted_data) // 2]) / 2 else: median = sorted_data[len(sorted_data) // 2]  
    • Berechne die Varianz:
        var = sum((x - mean) ** 2 for x in sample_data) / (len(sample_data) - 1)  
    • Berechne die Standardabweichung:
        std_dev = var ** 0.5  

    Damit haben wir die deskriptiven Kennzahlen für die Stichprobe berechnet.

    b)

    Erstelle jeweils ein Histogramm und einen Boxplot, um die Verteilung der Stichprobe grafisch darzustellen. Interpretier die Ergebnisse und beschreibe, welche Informationen du aus diesen Diagrammen entnehmen kannst.

    Lösung:

    Um die Verteilung einer Stichprobe von 50 Datenpunkten grafisch darzustellen, erstellen wir ein Histogramm und einen Boxplot. Beide Diagrammtypen bieten wertvolle Einblicke in die Datenverteilung.

    • Histogramm: Ein Histogramm ist ein Säulendiagramm, das die Häufigkeit oder Wahrscheinlichkeit von Datenpunkten in verschiedenen Klassenintervallen darstellt.

    Beispielhafte Schritte zur Erstellung eines Histogramms in Python:

      import matplotlib.pyplot as plt sample_data = [value1, value2, value3, ..., value50] plt.hist(sample_data, bins=10, edgecolor='black') plt.title('Histogramm der Stichprobe') plt.xlabel('Werte') plt.ylabel('Häufigkeit') plt.show()  
    • Boxplot: Ein Boxplot zeigt die Verteilung der Daten basierend auf Fünf-Punkt-Zusammenfassungen: Minimum, erstes Quartil (Q1), Median, drittes Quartil (Q3) und Maximum. Zusätzlich hebt ein Boxplot Ausreißer hervor.

    Beispielhafte Schritte zur Erstellung eines Boxplots in Python:

      import matplotlib.pyplot as plt sample_data = [value1, value2, value3, ..., value50] plt.boxplot(sample_data, vert=False) plt.title('Boxplot der Stichprobe') plt.xlabel('Werte') plt.show()  

    Interpretation der Ergebnisse:

    • Histogramm:
      • Wenn das Histogramm eine symmetrische Form hat, kann dies darauf hinweisen, dass die Daten normalverteilt sind.
      • Ein Histogramm mit einer Schiefe (rechts oder links) deutet darauf hin, dass die Daten in eine bestimmte Richtung verzerrt sind.
      • Verschiedene Häufigkeiten in den Klassenintervallen geben Aufschluss darüber, wie die Daten auf verschiedene Wertebereiche verteilt sind.
      • Durch Beobachtung der Höhe der Balken kannst Du die Modus (häufigster Wert) der Stichprobe identifizieren.
    • Boxplot:
      • Die Lage des Medians innerhalb der Box gibt Auskunft darüber, ob die Daten symmetrisch verteilt sind.
      • Der Abstand zwischen dem ersten und dritten Quartil (Interquartilsabstand) zeigt die Variabilität der mittleren 50 % der Daten auf (Spannweite der Box).
      • Ausreißer werden als Punkte außerhalb der „Whiskers“ (Antennen) dargestellt und geben Hinweise auf ungewöhnliche Werte in der Stichprobe.
      • Eine große Spannweite der Box oder das Vorhandensein von Ausreißern kann auf eine hohe Variabilität innerhalb der Daten hinweisen.

    Zusammengefasst bieten Histogramme und Boxplots eine visuelle Methode zur Untersuchung der Verteilung und Variabilität der Daten. Sie ergänzen die deskriptiven Kennzahlen und helfen, ein tieferes Verständnis für die Stichprobe zu entwickeln.

    d)

    Bestimme das 95%-Konfidenzintervall für den Mittelwert der Grundgesamtheit basierend auf deiner Stichprobe. Erkläre die Bedeutung des Konfidenzintervalls im Kontext deiner Analyse.

    Lösung:

    Um das 95%-Konfidenzintervall für den Mittelwert der Grundgesamtheit basierend auf Deiner Stichprobe zu berechnen, folge diesen Schritten:

    • Schritt 1: Berechne den Stichprobenmittelwert (\(\bar{x}\)).
    • Schritt 2: Berechne die Standardabweichung der Stichprobe (\(s\)).
    • Schritt 3: Bestimme die Stichprobengröße (\(n\)).
    • Schritt 4: Finde den kritischen t-Wert (\(t^*\)) für ein 95%-Konfidenzintervall und die entsprechenden Freiheitsgrade (\(df = n - 1\)).
    • Schritt 5: Berechne den Standardfehler (SE):
      SE = \frac{s}{\sqrt{n}}  
  • Schritt 6: Berechne die Konfidenzintervallgrenzen:
  •   \bar{x} \pm t^* \times SE  

    Beispiel: Angenommen, wir haben eine Stichprobe von 50 Datenpunkten:

      import numpy as np from scipy import stats # Annahme, unsere Stichprobe sample_data = [value1, value2, ..., value50] # Berechne deskriptive Kennzahlen mean = np.mean(sample_data) std_dev = np.std(sample_data, ddof=1) n = len(sample_data) # Standardfehler SE = std_dev / np.sqrt(n) # Kritischer t-Wert für 95% Konfidenzintervall und Freiheitsgrade t_critical = stats.t.ppf(0.975, df=n-1) # Berechne die Konfidenzintervallgrenzen margin_of_error = t_critical * SE confidence_interval = (mean - margin_of_error, mean + margin_of_error) print(f'95%-Konfidenzintervall: {confidence_interval}')  

    Erklärung des Konfidenzintervalls:

    • Ein 95%-Konfidenzintervall für den Mittelwert bedeutet, dass wir zu 95% sicher sind, dass der wahre Mittelwert der Grundgesamtheit in diesem Intervall liegt.
    • Das Konfidenzintervall gibt eine Schätzung der Unsicherheit oder Präzision des Stichprobenmittelwerts an.
    • Je kleiner das Intervall, desto präziser ist die Schätzung des Mittelwerts. Große Intervalle weisen auf größere Unsicherheit hin.
    • Im Kontext Deiner Analyse bedeutet dies, dass wir basierend auf der Stichprobe eine fundierte Schätzung des Mittelwerts der gesamten Kundendaten vornehmen können.
    Sign Up

    Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

    Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

    Kostenloses Konto erstellen

    Du hast bereits ein Konto? Anmelden