12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- from sklearn.cluster import DBSCAN
- from sklearn import metrics
- import numpy as np
- import matplotlib.pyplot as plt
- import csv_parser
- import recog
- import metric
- if __name__ == '__main__':
- data = csv_parser.parse_data_from_csv('test.csv')
- entries = recog.recognize_entries(data)
- x = []
- for e in entries:
- x.append([e.lon, e.lat])
- x = np.array(x)
- db = DBSCAN(eps = 10/6400000, min_samples = 3,
- metric = lambda x,y:metric.spherical_distance(x,y)).fit(x)
- labels = db.labels_
- core_samples_mask = np.zeros_like(db.labels_, dtype = bool)
- core_samples_mask[db.core_sample_indices_] = True
- n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
- n_noise_ = list(labels).count(-1)
- print('Estimated number of clusters: %d' % n_clusters_)
- print('Estimated number of noise points: %d' % n_noise_)
- if n_clusters_ == 0:
- print('can not get any clusters')
- plt.plot(x[:,0], x[:,1], 'o')
- plt.show()
- exit(0)
- print("Silhouette Coefficient: %0.3f"
- % metrics.silhouette_score(x, labels))
- unique_labels = set(labels)
- colors = [plt.cm.Spectral(each)
- for each in np.linspace(0, 1, len(unique_labels))]
- for k, col in zip(unique_labels, colors):
- if k == -1:
- # Black used for noise.
- col = [0, 0, 0, 1]
- class_member_mask = (labels == k)
- xy = x[class_member_mask & core_samples_mask]
- plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
- markeredgecolor='k', markersize=14)
- xy = x[class_member_mask & ~core_samples_mask]
- plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
- markeredgecolor='k', markersize=6)
- plt.show()
|