elsur.jpn.org >

« 読了: Gower (1971) 質と量が混じっているときの類似性係数(人呼んでGower距離) | メイン | 読了:Burnham et al. (2001) PLS回帰モデルの「回帰係数」をどう解釈するか »

2019年12月26日 (木)

Szepannek, G. (2018) clustMixType: User-Friendly Clustering of Mixed-Type Data in R. The R Journal, 10(2), 200-208.

 数値変数とカテゴリカル変数が混じったデータを一発でクラスタリングするRパッケージclustMixTypeの紹介。実戦投入前の儀式として目を通した。ただのR Journalの記事だけど、読んだものはなんでも記録しておくのだ...

 いわく。
 Rで量質混合データをクラスタリングする方法としては以下がある。

 最近ではHuangのk-prototypeクラスタリングに基づく提案がたくさん出てきている。
 というわけで、お待たせしました、clustMixTypeパッケージのご紹介です。

 k-prototypesアルゴリズムというのは、次のような目的関数をとる分割クラスタリングである。$x_i$を個体$i$のベクトル, $mu_j$をプロトタイプ$j$のベクトルとして
 $E = \sum_i^n \sum_j^k u_{ij} d(x_i, \mu_j)$
$u_{ij}$は分割を表す二値変数で、任意の$i$について$\sum_j^k u_{ij} = 1$となる。
 さて、問題は距離の定義である。変数の数は$p$個、うち最初の$q$個の変数は数値で残りはカテゴリカルだとして、[以下、原文の表記がわかりにくいので、ベクトル$x_i$の$m$番目の要素を$x_{im}$と書く]
 $d(x_i, \mu_j) = \sum_m^q (x_{im} - \mu_{jm})^2 + \lambda \sum_{m=q+1}^p \delta(x_{im}, \mu_{jm})$
ただし、$\delta(a,b)$は$a=b$のときに1, そうでないときに0となる関数。
 $d()$はユークリッド距離と単純一致距離の重みづけ和となる。
 あとはk-meansアルゴリズムと似ていて、(1)プロトタイプをランダムに選び (2)それぞれの個体について、それを$d()$が一番小さいプロトタイプに割り当て、プロトタイプを更新、(3)動かなくなるか反復数が最大に達するまで(2)を繰り返す。
 プロトタイプとは、数値変数については平均、カテゴリカル変数についてはモードである。

 というわけで、clustMixTypeパッケージではkproto()関数をご用意している。
 この関数は重み$\lambda$をいい感じに決める。どうやるのかというと...
 もともとHuangは$(1/3)\sigma \leq \lambda \leq (2/3)\sigma$がいいんじゃないかと云っていた($\sigma$は数値変数のSDの平均)。
 いっぽうこの関数では、$\sigma$ないし$\sigma^2$と、カテゴリカル変数の集中度を測る$h_{cat}$の両方を考える。
 $h_{cat}$の決め方はふたつある。その1, $h_m = 1-\sum_c p^2_{mc}$の平均とする[つまり、各変数について水準の割合の平方和を1から引いて、平均をとるわけね]。その2, $h_m = 1-max_c p_{mc}$の平均とする[各変数について最大の水準の割合を1から引いて、平均をとるわけね]。デフォルトではその1。
 で、$\lambda$は$\sigma/h_{cat}$か$\sigma^2/h_{cat}$のどちらかにする。デフォルトでは前者。
 [えーと、分子は数値変数の分散が大きいときに大きくなり、分母はカテゴリカル変数の分布が分散しているときに大きくなる。要は分散のバランスをみているわけだ]

 [欠損はどう扱うかとか、アルゴリズムの高速化とか。メモ略]
 [事例。省略]

 ...うーむ。読めば読むほど、そんなことでいいんすか?という疑念がわくぞ。要するに、全部カテゴリカル変数だったら、個体間の距離は単純なハミング距離ってことですよね。それってどうなの。

論文:データ解析(2018-) - 読了: Szepannek (2018) RのclustMixTypeパッケージ

rebuilt: 2020年11月16日 22:53
validate this page