Случайный лес и CAH (классификация Ascendante Hiérarchique) - PullRequest
0 голосов
/ 01 июля 2018

У меня было несколько трудностей с доступом к узлам дендограммы (CAH). Мне удалось получить координаты этих узлов, но я не мог найти, как применить алгоритм Случайного леса к этим точкам, зная, что это векторы, а не матрица.

from scipy.cluster.hierarchy import dendrogram, linkage
Z = linkage(centroids, 'average')
plt.figure(figsize=(25, 10))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('sample index')
plt.ylabel('distance')
dendrogram(
    Z,
    leaf_rotation=90.,  # rotates the x axis labels
    leaf_font_size=8.,  # font size for the x axis labels
)
plt.show()

def fancy_dendrogram(*args, **kwargs):
    max_d = kwargs.pop('max_d', None)
    if max_d and 'color_threshold' not in kwargs:
        kwargs['color_threshold'] = max_d
    annotate_above = kwargs.pop('annotate_above', 0)

    ddata = dendrogram(*args, **kwargs)
    if not kwargs.get('no_plot', False):
        plt.title('Hierarchical Clustering Dendrogram (truncated)')
        plt.xlabel('sample index or (cluster size)')
        plt.ylabel('distance')
        for i, d, c in zip(ddata['icoord'], ddata['dcoord'], ddata['color_list']):
            x = 0.5 * sum(i[1:3])
            y = d[1]
            if y > annotate_above:
                #print("%.3g" % y)
                #print("%.3g" % x)
                plt.plot(x, y, 'o', c=c)
                plt.annotate("%.3g" % y, (x, y), xytext=(0, -5),
                             textcoords='offset points',
                             va='top', ha='center')
        if max_d:
            plt.axhline(y=max_d, c='k')
    return ddata



fancy_dendrogram(
    Z,
    #truncate_mode='lastp',
    leaf_rotation=90.,
    leaf_font_size=8.,
    #show_contracted=True,
    annotate_above=0.1,  # useful in small plots so annotations don't overlap
)
# Get current size
fig_size = plt.rcParams["figure.figsize"]

# Prints: [8.0, 6.0]
print "Current size:", fig_size

# Set figure width to 12 and height to 9
fig_size[0] = 20
fig_size[1] = 500
plt.rcParams["figure.figsize"] = fig_size
plt.show()
...