ベクトル(10^5前後の長さ)を5つのクラスに分割したいと思います。関数classIntervals
のパッケージclassInt
からは、style = "jenks"
の自然なブレークを使用したかったのですが、これはほんの僅か500のベクトルであっても過度の時間がかかります。style = "kmeans"
はほとんど瞬時に実行されます。クラスへの分割:jenksとkmeans
library(classInt)
my_n <- 100
set.seed(1)
x <- mapply(rnorm, n = my_n, mean = (1:5) * 5)
system.time(classIntervals(x, n = 5, style = "jenks"))
R> system.time(classIntervals(x, n = 5, style = "jenks"))
user system elapsed
13.46 0.00 13.45
system.time(classIntervals(x, n = 5, style = "kmeans"))
R> system.time(classIntervals(x, n = 5, style = "kmeans"))
user system elapsed
0.02 0.00 0.02
Jenksアルゴリズムは非常に遅くて、実行速度が速いのはなぜですか?
必要であれば、私はstats.stackexchange.comするために、質問の最後の二つの部分に移動します:ジェンクスのための合理的な代替を関数kmeansさ
- どのような状況下では?
- データポイントのランダムな1%サブセットでclassIntを実行してクラスを定義することは妥当ですか?
巨大です。 'kmeans'は最初のクラスタ中心としてサンプルのランダムなセットを使います。再現性のある結果を得るには、 'set.seed()'を介してシードを設定し、k-meansとローカルとグローバルの最小値について読んでください。これは '?classIntervals'に記述されています。 –
ありがとうございました。私はその部分を投稿した直後に見つけて、その質問を編集しました。 –
私は、ジンクの休憩がクオンタイルよりも優れていると示唆する証拠はほとんどないと思います。 – hadley