心臓病データの解析
データ解析は,生のソースから取り出した情報に基づく抽出,表示,モデリングのプロセスである.この例では,Wolfram言語を使ってデータ解析を行うワークフローを示す.ここで使用されるデータ集合は,UCI Machine Learning Repositoryからのもので,1541人の患者の心臓病診断データである.
心臓病診断データをインポートし,各行がそれぞれの患者,各列がさまざまな属性に対応するように,データを構文解析する.
In[1]:=
![Click for copyable input](assets.ja/heart-disease-data-analysis/In_111.png)
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}];
関連のある属性を「labels」と「features」に抽出する.「labels」に入れられた値は0と1であり,それぞれ心臓病の有無に対応する.
In[2]:=
![Click for copyable input](assets.ja/heart-disease-data-analysis/In_112.png)
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](assets.ja/heart-disease-data-analysis/In_113.png)
Take[labels, 10]
Out[3]=
![](assets.ja/heart-disease-data-analysis/O_81.png)
それぞれの患者に対して,特徴のベクトルは数値のリストである.しかし,データは完全ではなく,欠測値がとして保存されている.
In[4]:=
![Click for copyable input](assets.ja/heart-disease-data-analysis/In_114.png)
features[[-3]]
Out[4]=
![](assets.ja/heart-disease-data-analysis/O_82.png)
欠測値を,対応する属性内で使用可能なデータの平均で置換してから,さまざまな属性間の相関関係を可視化する.
In[5]:=
![Click for copyable input](assets.ja/heart-disease-data-analysis/In_115.png)
features = Transpose[Table[
N[attribute /. {-9 -> Mean[N[DeleteCases[attribute, -9]]]}]
, {attribute, Transpose[features]}]];
cormat = Correlation[features];
完全なWolfram言語入力を表示する
Out[6]=
![](assets.ja/heart-disease-data-analysis/O_83.png)
データの分布を可視化するために,PCAを行い,2つの主要なコンポーネントを抽出し,投影されたデータを散布図で表す.
In[7]:=
![Click for copyable input](assets.ja/heart-disease-data-analysis/In_117.png)
pcs2 = Take[PrincipalComponents[features, Method -> "Correlation"],
All, 2];
完全なWolfram言語入力を表示する
Out[8]=
![](assets.ja/heart-disease-data-analysis/O_84.png)
2つのクラスを区別するために,投影されたデータを2つのコンポーネントのガウス混合モデルにフィットする.
In[9]:=
![Click for copyable input](assets.ja/heart-disease-data-analysis/In_119.png)
edist = EstimatedDistribution[pcs2,
MixtureDistribution[{p1,
p2}, {BinormalDistribution[{m11, m12}, {s11, s12}, r1],
BinormalDistribution[{m21, m22}, {s21, s22}, r2]}]];
混合モデルに基づき,混合モデルの決定境界(黒の曲線)と確率密度等高線(赤の曲線)をプロットし,散布図に重ね合せて表示する.ガウス混合モデルの1つ目のコンポーネントの方が決定境界内で高い確率を持つ.
完全なWolfram言語入力を表示する
Out[10]=
![](assets.ja/heart-disease-data-analysis/O_85.png)