Wolfram Language

Probabilidade e estatística aprofundadas

Análise de dados de doenças cardíacas

A análise de dados é um processo de extração, apresentação e modelagem com base em informações obtidas em fontes primárias. O exemplo a seguir mostra um fluxo de trabalho de análise de dados na Wolfram Language. O conjunto de dados usado aqui vem do repositório UCI Machine Learning Repository, que consiste em dados de diagnósticos de doenças cardíacas de 1.541 pacientes.

Importe os dados de diagnóstico de doenças cardíacas e analise-os de modo que as linhas correspondam a pacientes diferentes, e as colunas correspondam a atributos diferentes.

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

Extraia os traibutos relevantes em "marcas" e "propriedades". Os valores armazenados em "marcas" são 0 e 1, os quais correspondem à presença e ausência de doença cardíaca, 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, o vetor propriedade é uma lista de valores numéricos. No entanto, os dados não estão completos e possuem campos ausentes armazenados como -9.

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

Substitua os valores ausentes pela média dos dados disponíveis no atributo correspondente, em seguida, visualize a correlação entre diferentes atributos.

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

Para visualizar a distribuição dos dados, a PCA é feita para extrair os dois primeiros componentes principais, em seguida, os dados projetados são apresentados em um gráfico de dispersão.

In[7]:=
Click for copyable input
pcs2 = Take[PrincipalComponents[features, Method -> "Correlation"], All, 2];
mostre o input completo da 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 as duas classes, os dados projetados são ajustados em um modelo de gaussiano misto de dois 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]}]];

Com base no modelo misto, faça um gráfico dos limites de decisão (curva preta) e contornos de densidade de probabilidade (curva vermelha) do modelo misto, e mostre-os em conjunto com o gráfico de dispersão. O primeiro componente da mistura gaussiana tem maior probabilidade dentro do limite de decisão.

mostre o input completo da 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]=

Exemplos Relacionados

de en es fr ja ko ru