密度聚類的scikit-learn工程實現
import numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import DBSCANfrom sklearn import metricsfrom sklearn.datasets.samples_generator import make_blobsfrom sklearn.preprocessing import StandardScalerimport read_datax = read_data.xx = StandardScaler().fit_transform(x) #對數據進行歸一化navigation = DBSCAN(eps=0.1, min_samples=10000)core_samples_mask = np.zeros_like(navigation.labels_, dtype=bool)core_samples_mask[navigation.core_sample_indices_] = Truelabels = navigation.labels_n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)print(number of clusters: %d % n_clusters_)#上面是進行密度聚類#下面是將密度聚類結果上圖#兩個任務之間一定要湊夠三行unique_labels = set(labels)colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))for k, col in zip(unique_labels, colors): if k == -1: col = k class_member_mask = (labels == k) xy = X[class_member_mask & core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], o, markerfacecolor=col,markeredgecolor=k, markersize=14) xy = X[class_member_mask & ~core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], o, markerfacecolor=col,markeredgecolor=k, markersize=3)plt.title(Estimated number of clusters: %d % n_clusters_)plt.show()
scikit-learn本身有非常完整的說明文檔,DBSCAN這個函數的具體參數可以參見DBSCAN。這周不停地被插入需求很是煩躁,導致這段代碼寫的也很不好,根據官網的demo改編的,建議修改以後使用,另外不要使用我設置的參數,因為我目前解決的問題是非常特殊的,直接套用會導致聚類的結果非常極端且毀三觀。
推薦閱讀:
※機器學習-淺談隨機森林的幾個tricks-20170917
※全國之力,在2030年一定要搶佔人工智慧全球制高點!
※做python爬蟲需要會web後端嗎,不會的話能做嗎?
※【Python3網路爬蟲開發實戰】1.6.1-Flask的安裝
※Celery 實踐入門一