質問: KShape(n_clusters=2, n_init=10, verbose=True, random_state=seed) ``` とコードを書いてKShape法を使っています。 https://tslearn.readthedocs.io/en/latest/gen_modules/clustering/tslearn.clustering.KShape.html?highlight=KShape のドキュメントを見ながらKShapeメソッドのn_initとrandom_stateの役割を理解しようとしています。 まず、n_init に関してですが、 異なるセントロイドでKShapeのアルゴリズムが走る回数を設定する、という説明ですが、この説明がよく理解できません。 > > n_init (int (default: 1)) – Number of time the k-Shape algorithm will be run with different centroid seeds. The final results will be the best output of n_init consecutive runs in terms of inertia. > > > 学習回数、という意味に取れそうですが、それはmax_iter引数の役割であると思うので違うとは思います。 random_stateはセントロイドを初期化するのに使うという説明ですが、次のセントロイドはそれぞれのデータの中心が選ばれるはずなので、なぜ乱数で決定するのか理解できません。 > > random_state (integer or numpy.RandomState, optional) – Generator used to initialize the centers. If an integer is given, it fixes the seed. Defaults to the global numpy random number generator. > > > これらの引数の役割を理解されている方がいらっしゃいましたら教えてください、よろしくお願いいたします。
回答: 使用経験がないので推測込みになりますがコメントします。 n_initについて kshadeもkmeansと同じく非階層クラスターなので、クラスター数分の重心の初期値が必要です。クラスターの性能は初期値に依存するようで、kmeansの場合、何回か実行して良さげなものを選択することが推奨されています。そう考えると、n_initは指定した回数だけ初期値の異なるクラスター分析を行い最も性能の良いものを出力するという意味ではないでしょうか random_stateについて 初期値はランダムに設定されます。そのため、乱数の種を設定しないと実行するたびに結果が変わってしまいます。つまり、random.stateを設定することで結果の再現性が確保できるようになります