卸売データを再訪する:「最適な」k
第2章の最後では、階層的クラスタリングを使って卸売業者のデータ customers_spend を分析しました。今回は、この章で学んだk-meansクラスタリングのツールを使って、同じデータを分析してみましょう。
最初のステップは、平均シルエット幅を用いて「最適な」kの値を決定することです。
データについて確認しておきましょう。このデータには、ある卸売業者の45の取引先が、Milk(乳製品)、Grocery(食料雑貨)、Frozen(冷凍食品)の各カテゴリに費やした金額の記録が含まれています。データはデータフレーム customers_spend に格納されています。今回はすべてのデータが同じ種類(支出金額)であるため、スケーリングは不要です。
この演習はコースの一部です
Rによるクラスター分析
演習の手順
map_dbl()を使って、customers_spendデータに対してkを2から10まで変化させながらpam()を実行し、各モデルから平均シルエット幅の値を取り出しましょう:model$silinfo$avg.width。 結果のベクトルをsil_widthとして保存します。- kの値と平均シルエット幅のベクトルを含む新しいデータフレーム
sil_dfを作成します。 sil_dfの値を使って、k と平均シルエット幅の関係を示す折れ線グラフを作成しましょう。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Use map_dbl to run many models with varying value of k
sil_width <- map_dbl(2:10, function(k){
model <- pam(x = ___, k = ___)
model$silinfo$avg.width
})
# Generate a data frame containing both k and sil_width
sil_df <- data.frame(
k = ___,
sil_width = ___
)
# Plot the relationship between k and sil_width
ggplot(___, aes(x = ___, y = ___)) +
geom_line() +
scale_x_continuous(breaks = 2:10)