Herzleiden-Datenanalyse
Datenanalyse ist ein Prozess des Extrahierens, Präsentierens und Modellierens auf Basis von Informationen aus erhobenen numerischen Daten. In diesem Beispiel demonstrieren wir einen Arbeitsablauf der Datenanalyse in der Wolfram Language. Der verwendete Datensatz stammt vom UCI Machine Learning Repository, das die Diagnosedaten von 1541 Patienten mit Herzleiden sammelt.
Importieren Sie Diagnosedaten zu Herzkrankheiten und parsen Sie diese, so dass jede Zeile einem anderen Patienten und jede Säule einem anderen Attribut entspricht.
rawdata =
Import["https://archive.ics.uci.edu/ml/machine-learning-databases/\
heart-disease/new.data", "Text"];
data = StringSplit[rawdata, LetterCharacter ..];
data = Table[
ToExpression[StringSplit[dat, (" " | "\n") ..]], {dat, data}];
Extrahieren Sie die relevanten Attribute in „Labels“ und „Features“. Die in „labels“ gespeicherten Werte sind 0 und 1, was jeweils dem Bestehen und der Abwesenheit einer Herzerkrankung entspricht.
labels = Unitize[data[[All, 58]]];
features =
data[[All, {3, 4, 9, 10, 12, 16, 19, 32, 38, 40, 41, 44, 51}]];
Take[labels, 10]
Für jeden Patienten ist der Feature-Vektor eine Liste numerischer Werte. Allerdings sind die Daten nicht vollständig und enthalten fehlende Felder, die als gespeichert sind.
features[[-3]]
Ersetzen Sie fehlende Werte durch den Durchschnittswert der vorhandenen Daten im entsprechenden Attribut und visualisieren Sie dann die Korrelation zwischen verschiedenen Attributen.
features = Transpose[Table[
N[attribute /. {-9 -> Mean[N[DeleteCases[attribute, -9]]]}]
, {attribute, Transpose[features]}]];
cormat = Correlation[features];
Um die Datenverteilung zu veranschaulichen, wird eine Hauptkomponentenanalyse (PCA) durchgeführt, um die ersten beiden Hauptkomponenten zu extrahieren. Anschließend werden die projizierten Datenpunkte als Streudiagramm dargestellt.
pcs2 = Take[PrincipalComponents[features, Method -> "Correlation"],
All, 2];
Um die beiden Klassen voneinander zu trennen, werden die projizierten Daten einer Gaußschen Mischverteilung mit zwei Komponenten angepasst.
edist = EstimatedDistribution[pcs2,
MixtureDistribution[{p1,
p2}, {BinormalDistribution[{m11, m12}, {s11, s12}, r1],
BinormalDistribution[{m21, m22}, {s21, s22}, r2]}]];
Plotten Sie die Entscheidungsgrenze (schwarze Kurve) und die Konturen der Wahrscheinlichkeitsdichte (rote Kurve) der Mischverteilung und stellen Sie diese gemeinsam mit dem Streudiagramm dar. Die erste Komponente der Gaußschen Mischverteilung hat innerhalb der Entscheidungsgrenze eine höhere Wahrscheinlichkeit.