Aujourd'hui, [SciPy et NumPy] suivent Hier Optimiser et booster votre programmation Python](http://it-ebooks.info/book/1280/) avec scikit-learn Je vais vous expliquer brièvement. En ce qui concerne le regroupement, Identifier les champignons comestibles et Réutiliser les résultats du regroupement ) Et [regroupement avec scikit-learn] ](Http://qiita.com/ynakayama/items/ab2d89be36d3cdaeb4f2) Je l'ai traité, donc je pense que c'est une méthode familière dans l'apprentissage automatique.
Points de base avec plus de points de données par rapport aux [kmeans] populaires (http://ja.wikipedia.org/wiki/K%E5%B9%B3%E5%9D%87%E6%B3%95) L'algorithme DBSCAN (http://en.wikipedia.org/wiki/DBSCAN) répète le processus dans le rayon spécifié lorsque le noyau est défini. Cette technique est souvent comparée aux kmeans pour les données bruyantes.
L'œuvre originale compare et visualise également ces méthodes. Essayons-le tout de suite.
import numpy as np
import matplotlib.pyplot as mpl
from scipy.spatial import distance
from sklearn.cluster import DBSCAN
#Tout d'abord, générez des échantillons de données avec des nombres aléatoires
c1 = np.random.randn(100, 2) + 5
c2 = np.random.randn(50, 2)
#Générer et empiler une distribution uniforme
u1 = np.random.uniform(low=-10, high=10, size=100)
u2 = np.random.uniform(low=-10, high=10, size=100)
c3 = np.column_stack([u1, u2])
#Stockez toutes les données dans un tableau 150 x 2
data = np.vstack([c1, c2, c3])
#Clustering à l'aide de DBSCAN
# db.labels_Est un tableau avec des identifiants pour différents clusters dans les données
db = DBSCAN().fit(data)
labels = db.labels_
#Obtenez les coordonnées de chaque noyau
#Deux clusters sont 0 et 1, le bruit est-Classé comme 1
#Divisez ces
dbc1 = data[labels == 0] #Exemple négatif
dbc2 = data[labels == 1] #Exemple positif
noise = data[labels == -1] #bruit
La particularité est que le bruit peut être séparé de cette manière.
Visualisons-le avec le familier matplotlib.
x1, x2 = -12, 12
y1, y2 = -12, 12
fig = mpl.figure()
fig.subplots_adjust(hspace=0.1, wspace=0.1)
ax1 = fig.add_subplot(121, aspect='equal')
ax1.scatter(c1[:, 0], c1[:, 1], lw=0.5, color='#00CC00')
ax1.scatter(c2[:, 0], c2[:, 1], lw=0.5, color='#028E9B')
ax1.scatter(c3[:, 0], c3[:, 1], lw=0.5, color='#FF7800')
ax1.xaxis.set_visible(False)
ax1.yaxis.set_visible(False)
ax1.set_xlim(x1, x2)
ax1.set_ylim(y1, y2)
ax1.text(-11, 10, 'Original')
ax2 = fig.add_subplot(122, aspect='equal')
ax2.scatter(dbc1[:, 0], dbc1[:, 1], lw=0.5, color='#00CC00')
ax2.scatter(dbc2[:, 0], dbc2[:, 1], lw=0.5, color='#028E9B')
ax2.scatter(noise[:, 0], noise[:, 1], lw=0.5, color='#FF7800')
ax2.xaxis.set_visible(False)
ax2.yaxis.set_visible(False)
ax2.set_xlim(x1, x2)
ax2.set_ylim(y1, y2)
ax2.text(-11, 10, 'DBSCAN identified')
fig.savefig('image.png', bbox_inches='tight')
Recommended Posts