12 聚類算法 - 代碼案例五 - 密度聚類(DBSCAN)算法案例

11 聚類算法 - 密度聚類 - DBSCAN徒像、MDCA

需求: 使用scikit的相關(guān)API創(chuàng)建模擬數(shù)據(jù)触徐,然后使用DBSCAN密度聚類算法進(jìn)行數(shù)據(jù)聚類操作则北,并比較DBSCAN算法在不同參數(shù)情況下的密度聚類效果群发。

相關(guān)API:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

常規(guī)操作:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import sklearn.datasets as ds
import matplotlib.colors
from sklearn.cluster import DBSCAN
from sklearn.preprocessing import StandardScaler

## 設(shè)置屬性防止中文亂碼及攔截異常信息
mpl.rcParams['font.sans-serif'] = [u'SimHei']
mpl.rcParams['axes.unicode_minus'] = False

1川背、創(chuàng)建模擬數(shù)據(jù)

N = 1000
centers = [[1, 2], [-1, -1], [1, -1], [-1, 1]]
data1, y1 = ds.make_blobs(N, n_features=2, 
  centers=centers, cluster_std=(1,0.75, 0.5,0.25), random_state=0)
data1 = StandardScaler().fit_transform(data1)
params1 = ((0.15, 5), (0.2, 10), (0.2, 15), (0.3, 5), (0.3, 10), (0.3, 15))

t = np.arange(0, 2 * np.pi, 0.1)
data2_1 = np.vstack((np.cos(t), np.sin(t))).T
data2_2 = np.vstack((2*np.cos(t), 2*np.sin(t))).T
data2_3 = np.vstack((3*np.cos(t), 3*np.sin(t))).T
data2 = np.vstack((data2_1, data2_2, data2_3))
y2 = np.vstack(([0] * len(data2_1), [1] * len(data2_2), [2] * len(data2_3)))
params2 = ((0.5, 3), (0.5, 5), (0.5, 10), (1., 3), (1., 10), (1., 20))

datasets = [(data1, y1,params1), (data2, y2,params2)]


def expandBorder(a, b):
    d = (b - a) * 0.1
    return a-d, b+d

2砂轻、畫(huà)圖

colors = ['r', 'g', 'b', 'y', 'c', 'k']
cm = mpl.colors.ListedColormap(colors)

for i,(X, y, params) in enumerate(datasets):
    x1_min, x2_min = np.min(X, axis=0)
    x1_max, x2_max = np.max(X, axis=0)
    x1_min, x1_max = expandBorder(x1_min, x1_max)
    x2_min, x2_max = expandBorder(x2_min, x2_max)
    
    plt.figure(figsize=(12, 8), facecolor='w')
    plt.suptitle(u'DBSCAN聚類-數(shù)據(jù)%d' % (i+1), fontsize=20)
    plt.subplots_adjust(top=0.9,hspace=0.35)
    
    for j,param in enumerate(params):
        eps, min_samples = param
        model = DBSCAN(eps=eps, min_samples=min_samples)
        #eps 半徑猫十,控制鄰域的大小蚓再,值越大只损,越能容忍噪聲點(diǎn)一姿,
        #值越小,相比形成的簇就越多
        #min_samples 原理中所說(shuō)的M跃惫,控制哪個(gè)是核心點(diǎn)叮叹,
        #值越小,越可以容忍噪聲點(diǎn)爆存,越大蛉顽,就更容易把有效點(diǎn)劃分成噪聲點(diǎn)
        
        model.fit(X)
        y_hat = model.labels_

        unique_y_hat = np.unique(y_hat)
        n_clusters = len(unique_y_hat) - (1 if -1 in y_hat else 0)
        print ("類別:",unique_y_hat,";聚類簇?cái)?shù)目:",n_clusters)
        
        
        core_samples_mask = np.zeros_like(y_hat, dtype=bool)
        core_samples_mask[model.core_sample_indices_] = True
        
        ## 開(kāi)始畫(huà)圖
        plt.subplot(3,3,j+1)
        for k, col in zip(unique_y_hat, colors):
            if k == -1:
                col = 'k'
                
            class_member_mask = (y_hat == 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=6)
        plt.xlim((x1_min, x1_max))
        plt.ylim((x2_min, x2_max))
        plt.grid(True)
        plt.title('$\epsilon$ = %.1f  m = %d先较,聚類簇?cái)?shù)目:%d' % (eps, min_samples, 
          n_clusters), fontsize=16)
    ## 原始數(shù)據(jù)顯示
    plt.subplot(3,3,7)
    plt.scatter(X[:, 0], X[:, 1], c=y, s=30, cmap=cm, edgecolors='none')
    plt.xlim((x1_min, x1_max))
    plt.ylim((x2_min, x2_max))
    plt.title('原始數(shù)據(jù)携冤,聚類簇?cái)?shù)目:%d' % len(np.unique(y)))
    plt.grid(True)
    plt.show()   

下章開(kāi)始講圖形聚類 - 譜聚類
13 聚類算法 - 譜聚類

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闲勺,隨后出現(xiàn)的幾起案子曾棕,更是在濱河造成了極大的恐慌,老刑警劉巖菜循,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翘地,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡债朵,警方通過(guò)查閱死者的電腦和手機(jī)子眶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)瀑凝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)序芦,“玉大人,你說(shuō)我怎么就攤上這事粤咪⊙柚校” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)宪塔。 經(jīng)常有香客問(wèn)我磁奖,道長(zhǎng),這世上最難降的妖魔是什么某筐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任比搭,我火速辦了婚禮,結(jié)果婚禮上南誊,老公的妹妹穿的比我還像新娘身诺。我一直安慰自己,他們只是感情好抄囚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布霉赡。 她就那樣靜靜地躺著,像睡著了一般幔托。 火紅的嫁衣襯著肌膚如雪穴亏。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天重挑,我揣著相機(jī)與錄音嗓化,去河邊找鬼。 笑死攒驰,一個(gè)胖子當(dāng)著我的面吹牛蟆湖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播玻粪,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼隅津,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了劲室?” 一聲冷哼從身側(cè)響起伦仍,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎很洋,沒(méi)想到半個(gè)月后充蓝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喉磁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谓苟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片协怒。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涝焙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出孕暇,到底是詐尸還是另有隱情仑撞,我是刑警寧澤赤兴,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站隧哮,受9級(jí)特大地震影響桶良,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沮翔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一陨帆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧采蚀,春花似錦歧譬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至璧眠,卻和暖如春缩焦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背责静。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工袁滥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灾螃。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓题翻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腰鬼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嵌赠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 09 聚類算法 - 層次聚類 需求: 基于scikit的API創(chuàng)建模擬數(shù)據(jù),使用BIRCH算法對(duì)數(shù)據(jù)進(jìn)行聚類操作熄赡,...
    白爾摩斯閱讀 8,507評(píng)論 0 15
  • 一年前需要用聚類算法時(shí)姜挺,自己從一些sklearn文檔和博客粗略整理了一些相關(guān)的知識(shí),記錄在電子筆記里備忘彼硫,現(xiàn)在發(fā)到...
    wong11閱讀 44,330評(píng)論 0 19
  • 09 聚類算法 - 層次聚類10 聚類算法 - 代碼案例四 - 層次聚類(BIRCH)算法參數(shù)比較 七拧篮、密度聚類概...
    白爾摩斯閱讀 13,527評(píng)論 0 29
  • 最好的愛(ài)情不過(guò)是一見(jiàn)鐘情基礎(chǔ)上的日久生情词渤。 不論是前者還是后者,都是需要用心付出才能得到的串绩。 寄希望于不經(jīng)意和偶然...
    溱小洧閱讀 146評(píng)論 1 3
  • 清明三天小假缺虐,倒也沒(méi)有閑著,好像比平日里還忙赏参。插花志笼、賞魚(yú)、吃大鍋菜把篓、朋友聚會(huì)也是一茬一茬兒的纫溃,除了噪子啞到...
    慈開(kāi)閱讀 446評(píng)論 2 5