血圧のデータは、時系列データなので日時データもいれた3次元でクラス分けを試みる。
日時データは、経過日数を数値で表すこととする。例えば計測2日目の正午のデータは、2.5。 OpenOfficeのcalcであらかじめ数字にして用意した。data2.csvで、3列目が最高血圧、4列目が最低血圧、6列目が経過日時である。
import pandas as pd
df = pd.read_csv('data2.csv')
なお、最高/最低血圧には強い相関があるので、最高血圧だけを時系列でみるとこんな感じ
import matplotlib.pyplot as plt
plt.scatter(df.iloc[:,6],df.iloc[:,2])
これを、最高血圧、最低血圧、経過日時の3次元データとして GaussianMixtureで2クラスタに分けるとこうなる。
from sklearn.mixture import GaussianMixture
gm = GaussianMixture(n_components=2)
gm.fit(df.iloc[:,[2,3,6]])
gm_pred = gm.predict(df.iloc[:,[2,3,6]])
計測の前半の血圧の分散の小さい塊と後半の血圧の分散が大きい塊とに分割されている。
同じデータを最高血圧、最低血圧の2次元データとして GaussianMixtureで2クラスタに分けるとこうなる。
gm2 = GaussianMixture(n_components=2)
gm.fit(df.iloc[:,[2,3]])
gm_pred = gm.predict(df.iloc[:,[2,3]])
こちらは、最高血圧がせいぜい160までの塊とそれからはみ出した塊とに分け、測定日時の1/3頃からはみ出した塊があらわれだしたということが見える。
あるデータを全て使えば良いということではない事を示しているのだろう。
日時データは、経過日数を数値で表すこととする。例えば計測2日目の正午のデータは、2.5。 OpenOfficeのcalcであらかじめ数字にして用意した。data2.csvで、3列目が最高血圧、4列目が最低血圧、6列目が経過日時である。
import pandas as pd
df = pd.read_csv('data2.csv')
なお、最高/最低血圧には強い相関があるので、最高血圧だけを時系列でみるとこんな感じ
import matplotlib.pyplot as plt
plt.scatter(df.iloc[:,6],df.iloc[:,2])
これを、最高血圧、最低血圧、経過日時の3次元データとして GaussianMixtureで2クラスタに分けるとこうなる。
from sklearn.mixture import GaussianMixture
gm = GaussianMixture(n_components=2)
gm.fit(df.iloc[:,[2,3,6]])
gm_pred = gm.predict(df.iloc[:,[2,3,6]])
計測の前半の血圧の分散の小さい塊と後半の血圧の分散が大きい塊とに分割されている。
同じデータを最高血圧、最低血圧の2次元データとして GaussianMixtureで2クラスタに分けるとこうなる。
gm2 = GaussianMixture(n_components=2)
gm.fit(df.iloc[:,[2,3]])
gm_pred = gm.predict(df.iloc[:,[2,3]])
こちらは、最高血圧がせいぜい160までの塊とそれからはみ出した塊とに分け、測定日時の1/3頃からはみ出した塊があらわれだしたということが見える。
あるデータを全て使えば良いということではない事を示しているのだろう。