Wolfram Language

Probabilidad y estadística extendidas

Análisis de datos de enfermedades cardíacas

El análisis de datos es un proceso de extracción, presentación y modelado basado en información extraída de fuentes primarias. En este ejemplo, se muestra un flujo de trabajo de análisis de datos en Wolfram Language. El conjunto de datos utilizado aquí proviene del repositorio UCI Machine Learning Repository, el cual consiste en datos de diagnósticos de enfermedades cardíacas en 1.541 pacientes.

Importe los datos de diagnóstico de enfermedades cardíacas y segméntelos, con el fin de que las filas correspondan con distintos pacientes, y las columnas correspondan con distintas propiedades.

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}];

Extraiga las propiedades relevantes como "etiquetas" y "propiedades". Los valores almacenados en "etiquetas" son 0 y 1, los cuales corresponden a la presencia u ausencia de enfermedades cardíacas, respectivamente.

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]=

Para cada paciente, el vector propiedad es una lista de valores numéricos. Sin embargo, los datos no están completos y posee campos faltantes almacenados como .

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

Remplace los valores faltantes por el promedio de los datos disponibles en el atributo correspondiente, luego visualice la correlación entre distintos atributos.

In[5]:=
Click for copyable input
features = Transpose[Table[ N[attribute /. {-9 -> Mean[N[DeleteCases[attribute, -9]]]}] , {attribute, Transpose[features]}]]; cormat = Correlation[features];
muestre la entrada completa de Wolfram Language
In[6]:=
Click for copyable input
MatrixPlot[cormat, ImageSize -> Medium, PlotTheme -> "Detailed"]
Out[6]=

Para visualizar la distribución de los datos, se realiza PCA para extraer los primeros dos componentes principales, luego los datos proyectados son presentados en un gráfico de dispersión.

In[7]:=
Click for copyable input
pcs2 = Take[PrincipalComponents[features, Method -> "Correlation"], All, 2];
muestre la entrada completa 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]=

Para distinguir las dos clases, los datos proyectados son ajustados en un modelo gaussiano mixto de dos componentes.

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

Con base en el modelo mixto, grafique los límites de decisión (curva negra) y los contornos de densidad de probabilidad (curva roja) del modelo mixto, y muéstrelos junto con el gráfico de dispersión. El primer componente de la mezcla gaussiana tiene mayor probabilidad dentro del límite de decisión.

muestre la entrada completa 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]=

Ejemplos relacionados

de en fr ja ko pt-br ru