1. ホーム
  2. r

[解決済み] kmeans Quick-TRANSferのステージステップが最大値を超えた

2022-02-15 06:06:39

質問内容

636,688行、7列のデータセットに対して、Rでk-meansクラスタリングを実行する場合、標準の stats パッケージを使用します。 kmeans(dataset, centers = 100, nstart = 25, iter.max = 20) .

次のようなエラーが発生します。 Quick-TRANSfer stage steps exceeded maximum (= 31834400) でコードを見ることができますが http://svn.r-project.org/R/trunk/src/library/stats/R/kmeans.R - 何が問題なのか、よくわかりません。私の問題は、私のデータセットのサイズに関係していると思いますが、この問題を軽減するために何ができるのか、誰かが一度明らかにしてくれるとありがたいのですが。

解決方法は?

私もちょうど同じ問題を抱えていました。

R の kmeans のドキュメントを参照してください。 ?kmeans :

<ブロッククオート

ハーティガン-ウォン・アルゴリズム は、一般にこれらのいずれよりも良い仕事をしますが、試してみてください。 複数のランダムスタート('nstart'> 1)を推奨することが多いです。 まれに いくつかの点(xの行)が極端に近い場合。 アルゴリズムは "Quick-Transfer "ステージで収束しないかもしれません。 , は警告を発し、'ifault = 4'を返します。 わずかな その場合、データの丸めが推奨されるかもしれません。

このような場合、LloydアルゴリズムやMacQueenアルゴリズムに変更する必要があるかもしれません。

ここでRの厄介なところは、気づかないうちに警告が続いていることです。私のベンチマーク目的では、これを失敗した実行とみなし、したがって、私は使用します。

if (kms$ifault==4) { stop("Failed in Quick-Transfer"); }

ユースケースによっては、次のようにすることもできます。

if (kms$ifault==4) { kms = kmeans(X, kms$centers, algorithm="MacQueen"); }

でなく、別のアルゴリズムで継続する。

K-meansのベンチマークを行う場合、Rでは iter.max=10 をデフォルトで使用します。収束するのに10回以上かかる場合があります。