Agglomeratives Clustering unter einer Bedingung in Mathematica stoppen

  • Wie kann ich das Agglomerative Clustering anweisen, zwei bestimmte Cluster zu beenden / NICHT zu verbinden, wenn der Abstand zwischen den beiden Clustern größer als ein Schwellenwert ist?

    Ich weiß, dass wir ein benutzerdefiniertes Entfernungsmaß und eine benutzerdefinierte Verbindungsfunktion implementieren können. Distanzmessung gibt an, wie die Distanz zwischen zwei beliebigen Datenpunkten gemessen werden soll. Selbst wenn ich ein benutzerdefiniertes Abstandsmaß implementiere, wird lediglich der Abstand zwischen zwei beliebigen Datenpunkten angegeben.

    Wo im Code sollte / kann ich einen Schwellenwert angeben Wenn dies nicht der Fall ist, sollten die Cluster nicht zusammengeführt werden. Wenn also am Ende nur noch zwei Cluster vorhanden sind und der Schwellenwert zwischen diesen beiden Clustern nicht erreicht wird, sollten diese beiden Cluster nicht zu einem globalen Cluster zusammengefügt werden.

    < Ist dies in Mathematica möglich?

    23 April 2012
    rcollyer
1 answer
  • (Nach dem Kommentar von belisarius)

    Das hierarchische Clustering, das mit Method -> "Agglomerate" aufgerufen wird, kann weiter angepasst werden, indem die undokumentierte Unteroption "Linkage" verwendet wird. Ich gehe davon aus, dass dies letztlich die gleiche Funktionalität bietet wie die Option Linkage in der HierarchicalClustering Paket, das die folgenden Werte akzeptiert:

     "Single"          smallest intercluster dissimilarity
    "Average"         average intercluster dissimilarity
    "Complete"        largest intercluster dissimilarity
    "WeightedAverage" weighted average intercluster dissimilarity
    "Centroid"        distance from cluster centroids
    "Median"          distance from cluster medians 
    "Ward"            Ward's minimum variance dissimilarity
    f                 a pure function
     
     data = {{-1.1, 2.6}, {3.9, -0.8}, {4.2, -3.7}, {3.3, 3.5}, {3.9, 5.2},
        {4.1, -4.8}, {3.8, 3.7}, {5.6, 0.1}, {3.1, -5.2}, {-0.9, 2.3},
        {2.9, 4.1}, {-2.3, 3.9}, {-2.5, 3.}, {2.6, -5.5}, {5.2, 1.9},
        {-0.7, 1.3}, {0.9, 2.8}, {-1.5, 3.3}, {3.8, 1.2}, {2.6, -5.1},
        {-0.8, 3.2}, {4.7, 0.7}, {3., 3.}, {3.9, 3.6}, {4.5, 1.4},
        {4.2, 1.3}, {-1.1, 2.6}, {4.8, 2.4}, {3.3, -3.5}, {3.2, -4.6},
        {3.3, -4.9}, {3., 3.5}, {0.7, 2.1}, {3.2, -4.3}, {-2., 0.5},
        {-1.2, 2.}, {-1.6, 1.8}, {-3.5, 3.7}, {4.8, 0.2}, {3.3, 2.4},
        {-0.1, 2.1}, {-1.3, 2.5}, {4.4, 3.9}, {3.5, 0.2}, {0.1, 2.9},
        {-1., 1.6}, {-1.4, 4.5}, {3.2, 2.5}, {-1.6, 2.4}, {2.6, -5.1}};
    
    {
     ListPlot[FindClusters[data], PlotStyle -> PointSize@.05],
     ListPlot[FindClusters[data, 
       Method -> {"Agglomerate",
          "Linkage" -> (If[#3 > 1.9`*^-6, #1 + #2, (#1 + #2)^2] &)}], 
      PlotStyle -> PointSize@.05]
     }
     

    Agglomeratives Clustering unter einer Bedingung in Mathematica stoppen

    12 January 2014
    Alexandre VaillancourtJoachim Velzel