Skip to content

Instantly share code, notes, and snippets.

@agramfort
Created December 20, 2011 10:19
Show Gist options
  • Save agramfort/1501065 to your computer and use it in GitHub Desktop.
Save agramfort/1501065 to your computer and use it in GitHub Desktop.
scikit hierarchical refactoring pseudo code
Dendogram = namedtuple('Dendogram', ['children', 'n_leaves', 'n_components'])
def hierarchical_tree(X, linkage_criterion='ward', connectivity=None, n_components=None, copy=True):
...
for ...:
if linkage_criterion == 'ward':
# merge base on inertia criteria
if linkage_criterion == 'complete':
# merge base on complete criteria
children = np.array(children) # return numpy array for efficient caching
dendogram = Dendogram(children, n_components, n_leaves)
return dendogram
class HierarchicalClustering(BaseEstimator):
def __init__(self, linkage_criterion='ward', metric='euclidean', n_clusters=2,
memory=Memory(cachedir=None, verbose=0),
connectivity=None, copy=True, n_components=None):
self.linkage_criterion = linkage_criterion
self.metric = metric
self.n_clusters = n_clusters
self.memory = memory
self.copy = copy
self.n_components = n_components
self.connectivity = connectivity
def fit(X):
if iscallable(linkage_criterion):
self.dendogram_ = linkage_criterion(X, ...)
else:
if self.connectivity is None:
out = hierarchy.linkage(X, method=self.linkage_criterion, metric=self.metric)
children = out[:, :2].astype(np.int)
self.dendogram_ = Dendogram(children, 1, X.shape[0])
else:
self.dendogram_ = hierarchical_tree(X, ...)
return self
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment