Mathematica 9.0, 10.0, 10.1, 10.2, 10.3, 10.4.1, 11.2, 11.3 for Microsoft Windows (64-bit)と10.0.0 for Linux ARM (32-bit)でのことです。
Mathematicaには、階層的クラスタリングができる関数が3つ用意されています。FindClustersとAgglomerate、ClusteringComponentsです。
FindClustersにはバグがありました。(FindClustersのバグは11で解決)
バグではありませんが、ClusteringComponentsにも困ったところがあります。データをn個のクラスタに分けたいと思ってClusteringComponents[array,n]
としても、できるクラスタがnより少ないことがあるのです。マニュアルには「最高でn個のクラスタを求める」とあるので、nより少ないのはバグでは無いのですが、ちょうどn個のクラスタを作りたいときに使えないのは困ります。
次のコードで再現できます。
data = Import["https://gist.github.com/taroyabuki/4996086/raw/be3b2d537a51b803790fa1149cc714663a8b6ee9/clustering_test_data2.csv"]; Length[Union[ClusteringComponents[data, 13, 1, DistanceFunction -> EuclideanDistance, Method -> "Optimize"]]] (* 12 *)
13個のクラスタを作りたかったのですが、できたクラスタは12個でした。
データをシャッフルしてからならうまくいきます。
Length[Union[ClusteringComponents[RandomSample@data, 13, 1, DistanceFunction -> EuclideanDistance, Method -> "Optimize"]]] (* 13 *)
というわけで、階層的クラスタリングをしたいときはRを使うのがよさそうです(参考)。