Как использовать метод DBSCAN из sklearn для кластеризации - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть три базы данных параметров для кластеризации. Например, я могу легко получить результат изображения из Kmean с помощью sklearn, например: (val - это моя база данных, его форма (3000,3))

y_pred = KMeans(n_clusters= 4 , random_state=0).fit_predict(val)
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1,projection='3d')
ax1.scatter(val[:, 0], val[:, 1], val[:, 2], c=y_pred)
plt.show()

Однако в DBSCAN я просто использую напрямую вот этот:

from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
val = StandardScaler().fit_transform(val)
db = DBSCAN(eps=3, min_samples=4).fit(val)
labels = db.labels_
core_samples = np.zeros_like(labels, dtype=bool)
core_samples[db.core_sample_indices_] =True

# Number of clusters in labels, ignoring noise if present.
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
n_noise_ = list(labels).count(-1)

Итак, как получить результат изображения DBSCAN, как Kmean?

1 Ответ

3 голосов
/ 30 апреля 2020

Вы можете повторно использовать тот же код из вашей модели KMeans. Все, что вам нужно сделать, это переназначить val и y_pred, чтобы игнорировать помехи.

# DBSCAN snippet from the question
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler
val = StandardScaler().fit_transform(val)
db = DBSCAN(eps=3, min_samples=4).fit(val)
labels = db.labels_

# re-assign y_pred and core (as val)
y_pred, core = labels[labels != -1], val[labels != -1]

# plotting snippet from the question
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1,projection='3d')
ax1.scatter(core[:, 0], core[:, 1], core[:, 2], c=y_pred)
plt.show()
...