Wolfram Language

Probabilité et statistiques étendues

Analyse des données des maladies cardiovasculaires

L'analyse des données est un processus d'extraction, de présentation et de modélisation basée sur des informations extraites de sources premières. Dans cet exemple, un flux de travail de l'analyse des données effectuée en Wolfram Language est présenté. Le jeu de données utilisé ici provient d'UCI Machine Learning Repository, il est composé de données de diagnostic des maladies cardiovasculaires de 1541 patients.

Importez des données de diagnostic des maladies cardiovasculaires et analysez-les de sorte que les rangées correspondent aux différents patients et les colonnes correspondent à des attributs différents.

In[1]:=
Click for copyable input
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}];

Extrayez les attributs pertinents avec des « étiquettes » et des « caractéristiques ». Les valeurs stockées dans des « étiquettes » sont comprises entre 0 et 1, elles correspondent à la présence et à l'absence de maladie cardiovasculaire, respectivement.

In[2]:=
Click for copyable input
labels = Unitize[data[[All, 58]]]; features = data[[All, {3, 4, 9, 10, 12, 16, 19, 32, 38, 40, 41, 44, 51}]];
In[3]:=
Click for copyable input
Take[labels, 10]
Out[3]=

Pour chaque patient, le vecteur de caractéristique est une liste de valeurs numériques. Toutefois, les données ne sont pas complètes et comportent des champs manquants enregistrés comme .

In[4]:=
Click for copyable input
features[[-3]]
Out[4]=

Remplacez les valeurs manquantes par la moyenne des données disponibles dans l'attribut correspondant, puis visualisez la corrélation entre les différents attributs.

In[5]:=
Click for copyable input
features = Transpose[Table[ N[attribute /. {-9 -> Mean[N[DeleteCases[attribute, -9]]]}] , {attribute, Transpose[features]}]]; cormat = Correlation[features];
Afficher l'entrée complète de Wolfram Language
In[6]:=
Click for copyable input
MatrixPlot[cormat, ImageSize -> Medium, PlotTheme -> "Detailed"]
Out[6]=

Pour visualiser la distribution des données, l'APC est effectuée pour extraire les deux premières composantes principales, puis les données projetées sont présentées sur un diagramme de dispersion.

In[7]:=
Click for copyable input
pcs2 = Take[PrincipalComponents[features, Method -> "Correlation"], All, 2];
Afficher l'entrée complète de Wolfram Language
In[8]:=
Click for copyable input
splot = With[{ind = Pick[Range[Length[pcs2]], labels, 0]}, ListPlot[{pcs2[[ind]], Delete[pcs2, Transpose[{ind}]]}, ImageSize -> Medium, PlotTheme -> "Detailed", PlotMarkers -> Automatic, PlotLegends -> {"Absence", "Presence"}] ]
Out[8]=

Pour distinguer les deux catégories, les données de projection sont ajustées sur un modèle de mélange gaussien à deux composantes.

In[9]:=
Click for copyable input
edist = EstimatedDistribution[pcs2, MixtureDistribution[{p1, p2}, {BinormalDistribution[{m11, m12}, {s11, s12}, r1], BinormalDistribution[{m21, m22}, {s21, s22}, r2]}]];

En vous basant sur le modèle de mélange, tracez la limite de décision (courbe noire) et les contours de densité de probabilité (courbe rouge) du modèle de mélange et montrez-les avec le diagramme de dispersion. La première composante du mélange gaussien a une probabilité élevée à l'intérieur de la limite de décision.

Afficher l'entrée complète de Wolfram Language
In[10]:=
Click for copyable input
Module[{p = edist[[1, 1]], dist1 = edist[[2, 1]], dist2 = edist[[2, 2]], prob}, prob[x_, y_] := p PDF[dist1, {x, y}]/(p PDF[dist1, {x, y}] + (1 - p) PDF[dist2, {x, y}]); Show[splot, ContourPlot[ PDF[edist, {x, y}] == {0.1, 0.05, 0.0125, 0.003, 0.0001}, {x, -4, 6}, {y, -4, 6}, ImageSize -> Medium, PlotTheme -> "Detailed", ContourStyle -> {Dashed, Thick, Red}, PlotLegends -> LineLegend[{Directive[Red, Dashed]}, {"Probability Density"}], PlotPoints -> 25], ContourPlot[prob[x, y] == 1/2, {x, -4, 6}, {y, -4, 6}, ImageSize -> Medium, PlotTheme -> "Detailed", ContourStyle -> {Thickness[.01], Black}, PlotLegends -> LineLegend[{Directive[Black, AbsoluteDashing[{1, 1}]]}, {"Decision Boundary"}], PlotPoints -> 25]] ]
Out[10]=

Exemples connexes

de en es ja ko pt-br ru