1

私は次のようなデータセットを持っています: (私は簡単な例を挙げましたが、実際のデータセットはもっと大きいです)

     V1 V2 V3 V4
1    1  0  0  1
2    0  1  1  0 
3    0  0  1  0 
4    1  1  1  1
5    0  1  1  0
6    1  0  0  1 
7    0  0  0  1
8    0  1  1  1
9    1  0  1  0 
10   0  1  1  0 
...

ここで、V1、V2、V3...Vn はアイテムで、1,2,3,4...1000 はトランザクションです。これらのアイテムを k 個のクラスターに分割して、各クラスターに、同じトランザクションで最も頻繁に一緒に表示されるアイテムがあるようにします。アイテムの各カップルが一緒に表示される回数を決定するために、クロステーブルを試しました。次の結果が得られました。

   V1 V2 V3 V4
V1  4  1  2  3
V2  1  5  5  2
V3  2  5  7  2
V4  3  2  2  5

この小さな例では、2 つのクラスター (k=2) を作成して、クラスターに 2 つのアイテムを含める必要がある場合 (クラスター間のバランスを維持するため)、次のようになります。

Cluster1={V1,V4}

Cluster2={V2,V3}

なぜなら:

1) V1 は V4 (V1,V4)=3 > (V1,V3) > (V1,V2) でより頻繁に出現し、V4 についても同様です。

2) V2 (V2,V3)=5 > (V2,V4) > (V2, V1) で V2 がより頻繁に出現し、V3 についても同様です。

このパーティションをRで、より大きなデータセットに対してどのように行うことができますか?

4

4 に答える 4

0

テーブルを転置し、クラスタリングの標準的な方法を使用できます。したがって、アイテムをクラスター化します。特徴はトランザクションです。

幾何学的アプローチは、kmeans のように使用できます。または、クラスター数を選択するための情報基準 (BIC など) を提供する混合モデルを使用できます。ここにRスクリプトがあります

require(VarSelLCM)

my.data <- as.data.frame(t(df))
# To consider Gaussian mixture
# Alternatively Poisson mixture can be considered by converting each column into integer.
for (j in 1:ncol(my.data)) my.data[,j] <- as.numeric(my.data[,j])

## Clustering by considering all the variables as discriminative
# Number of clusters is between 1 and 6
res.all <- VarSelCluster(my.data, 1:6, vbleSelec = FALSE)

# partition
res.all@partitions@zMAP

# shiny application
VarSelShiny(res.all)


## Clustering with variable selection
# Number of clusters is between 1 and 6
res.selec <- VarSelCluster(my.data, 1:6, vbleSelec = TRUE)

# partition
res.selec@partitions@zMAP

# shiny application
VarSelShiny(res.selec)
于 2018-03-28T14:23:50.327 に答える