[PYTHON] Führen Sie (Visualisierung> Clustering> Funktionsbeschreibung) mit (t-SNE, DBSCAN, Entscheidungsbaum) durch.

Zusammenfassung

Ich habe es mit der Idee versucht. Tatsächlich habe ich nicht darüber nachgedacht, wie es angewendet werden kann.

Versuchen Sie es mit sklearns load_boston

Importieren Sie zuerst das, was Sie brauchen

import numpy as np
from sklearn import datasets
from sklearn.manifold import TSNE
from matplotlib import pyplot as plt

Laden Sie Boston und versuchen Sie es mit TSNE zu visualisieren Visuell werden einige Cluster angezeigt

boston = datasets.load_boston()
model = TSNE(n_components=2)
tsne_result = model.fit_transform(boston.data) 
plt.plot(tsne_result[:,0], tsne_result[:,1], ".")

boston_tsne.png

Versuchen Sie zum Vergleich einmal, mit kmeans zu gruppieren

from sklearn.cluster import MiniBatchKMeans
#Anzahl der Cluster`n_clusters`Sah auf die TSNE-Grafik und entschied durch Gefühl
kmeans = MiniBatchKMeans(n_clusters=10, max_iter=300)
kmeans_tsne = kmeans.fit_predict(tsne_result)

#Färbe es schön
color=cm.brg(np.linspace(0,1,np.max(kmeans_tsne) - np.min(kmeans_tsne)+1))
for i in range(np.min(kmeans_tsne), np.max(kmeans_tsne)+1):
    plt.plot(tsne_result[kmeans_tsne == i][:,0],
             tsne_result[kmeans_tsne == i][:,1],
             ".",
             color=color[i]
             )
    plt.text(tsne_result[kmeans_tsne == i][:,0][0],
             tsne_result[kmeans_tsne == i][:,1][0],
             str(i), color="black", size=16
             )

Die Cluster (1,5), (2,8) und (4,7,9) sind geteilt, aber strukturell verbunden, was (für mich) nicht sehr wünschenswert ist. boston_tsne_kmeans.png

Versuchen Sie das Clustering mit DBSCAN

from sklearn.cluster import DBSCAN
# `eps`Ist das Ergebnis von Versuch und Irrtum
dbscan = DBSCAN(eps=3)
dbscan_tsne = dbscan.fit_predict(tsne_result)

#Färbe es schön
color=cm.brg(np.linspace(0,1,np.max(dbscan_tsne) - np.min(dbscan_tsne)+1))
for i in range(np.min(dbscan_tsne), np.max(dbscan_tsne)+1):
    plt.plot(tsne_result[dbscan_tsne == i][:,0],
             tsne_result[dbscan_tsne == i][:,1],
             ".",
             color=color[i+1]
             )
    plt.text(tsne_result[dbscan_tsne == i][:,0][0],
             tsne_result[dbscan_tsne == i][:,1][0],
             str(i), color="black", size=16
             )

In DBSCAN ist dies wünschenswert, da sich die verbundenen Inseln im selben Cluster befinden. (-1 ist ein Cluster, der Dinge enthält, die nicht in Ordnung sind.)

boston_tsne_dbscan.png

Generieren Sie außerdem einen Entscheidungsbaum und versuchen Sie, jeden Cluster gut zu erklären.

from sklearn import tree
clf = tree.DecisionTreeClassifier()
#dbscan-Die Bezeichnung ist, weil 1 Cluster generiert wird-Beginnen Sie mit 1
clf.classes_ = np.max(dbscan_tsne) - np.min(dbscan_tsne) + 1
clf.fit(boston.data, dbscan_tsne)

#Generieren Sie eine Punktdatei für graphviz
with open("boston_tsne_dt.dot", 'w') as f:
    tree.export_graphviz(
        clf,
        out_file=f,
        feature_names=boston.feature_names,
        filled=True,
        rounded=True,  
        special_characters=True,
        impurity=False,
        proportion=False,
        class_names=map(str, range(-1, np.max(dbscan_tsne) - np.min(dbscan_tsne)+1))
    )
dot -T png boston_tsne_dt.dot > boston_tsne_dt.png

Das Ergebnis ist in der folgenden Abbildung dargestellt.

boston_tsne_dt.png

Zeichnen Sie als Referenz das Ziel (Hauspreis) jedes Clusters.

plt.boxplot([boston.target[dbscan_tsne == i]
             for i in range(np.min(dbscan_tsne), 
                            np.max(dbscan_tsne)+1)],
            labels=range(np.min(dbscan_tsne), 
                         np.max(dbscan_tsne)+1)
            )

boston_tsne_price.png

Erwägung

Um zusammenzufassen, woran ich interessiert war,

Wenn es jedoch darum geht, einige Informationen bereitzustellen, bin ich ziemlich misstrauisch. Übrigens, selbst wenn Sie "boston.target" mit den Originaldaten mischen, ist das Ergebnis ziemlich nahe.

Recommended Posts

Führen Sie (Visualisierung> Clustering> Funktionsbeschreibung) mit (t-SNE, DBSCAN, Entscheidungsbaum) durch.
DBSCAN (Clustering) mit Scikit-Learn
Erstellen eines bestimmten Baums mit Scikit-Learn
Fotosegmentierung und Clustering mit DBSCAN