Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

How do I instruct Agglomerative clustering to stop/NOT merging two particular clusters if the distance between the two clusters is larger than a threshold value?

I know that we can implement a custom distance measure and a custom linkage function. Distance measure says how to measure the distance between any two data points. So even if I implement a custom distance measure, it just says what is the distance between any two data points.

Where in the code should/can I mention a threshold value, that if not met, should prevent thw clusters from being merged. Thus, at the end, if only two clusters are remaining, and if the threshold value is not met between these two clusters, then these two clusters should not be merged into one global cluster.

Is this possible in Mathematica?

share|improve this question
1  
Could you please provide sample code of what you are trying to do. –  Timo Apr 20 '12 at 10:20
    
Did you look at the "Hierarchical Clustering Package"? –  belisarius Apr 20 '12 at 13:28
    
Most active Mathematica answerers have moved to the dedicated site Mathematica.stackexchange.com. You'll probably have better luck there. –  Sjoerd C. de Vries Apr 21 '12 at 0:14
2  
Try With a linkage function. something like FindClusters[datapairs, Method -> {"Agglomerate", "Linkage" -> (If[#3 > 1.9`*^-6, #1 + #2, (#1 + #2)^2] &)}] –  belisarius Apr 21 '12 at 17:24
add comment

migrated from stackoverflow.com Apr 23 '12 at 2:44

This question came from our site for professional and enthusiast programmers.

1 Answer

(After belisarius's comment)

The hierarchical clustering invoked by using Method -> "Agglomerate" can be further customized, by using the undocumented "Linkage" suboption. I assume this is ultimately provides the same functionality as the Linkage option in the HierarchicalClustering package, which accepts the following values:

"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]
 }

Mathematica graphics

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.