始める無料で始める

卸売データを再訪する:「最適な」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)
コードを編集して実行