在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

代碼實現密度聚類DBSCAN

汽車電子技術 ? 來源:神經網絡研究所 ? 作者:NNResearcher ? 2023-03-01 10:25 ? 次閱讀

一提到密度聚類,腦海中立馬就能呈現出一個聚類結果圖,不自然的就感覺非常的簡單,不就是基于密度的聚類嘛,原理不用看也懂了,但是真的實現起來,仿佛又不知道從哪里開始下手。這時候再仔細回想一下腦海中的密度聚類結果圖,好像和K-means聚類的結果圖是一樣的,那真實的密度聚類是什么樣子的呢?看了西瓜書的偽代碼后還是沒法實現?今天小編就帶大家解決一下密度聚類的難點。

實現一個神經網絡,一定一定要先明白這個網絡的結構,**輸入是什么?輸出是什么?網絡的層級結構是什么?權值是什么?每個節點代表的是什么?網絡的工作流程是什么?**

    對于密度聚類,有兩個關鍵的要素,一個是密度的最小值,另一個是兩個樣本之間的最大距離。規定了密度最小值就規定了核心樣本鄰域包含數據的最小值,規定兩個樣本之間的最大距離就規定了兩個樣本相聚多遠才算是一類。而且,這兩個值都是需要不斷測試之后才選取的,并不是一次就那么容易定下來的。另一個需要了解的就是,密度聚類中有 **核心對象、密度直達、密度可達、和密度相連** ,這幾個概念。

    核心對象就是指的一個類的核心,滿足兩個條密度聚類的關鍵要素,初始的核心對象有很多,但是經過不斷迭代整合后,核心對象越來越少,到最后一個類形成后,核心對象就是一個抽象的概念,并不能明確的指出這個類的核心對象是哪一個,但一定是初始核心對象中的一個。初始的核心對象的鄰域中,一定包含多個核心對象。

    用下圖來區分密度直達,密度可達和密度相連,假設X1為核心對象,那么X1和X2密度直達,X1和X3是密度可達,X3和X4是密度相連。密度相連就是兩個相聚比較遠的邊緣節點了,密度直達和密度可達距離都比較近。

圖片

我們先理清一下密度聚類的過程:

  1. 首先要找到核心對象,即滿足周圍數據距離小于密度最小值的數據數量大于密度最小值,并且記錄下核心對象的鄰居節點。
  2. 隨機選取一個核心對象,找到對應的鄰居節點,即密度直達的節點,查看鄰居節點中包含的核心對象,將這幾個節點記錄下來,并在核心對象列表中刪除包含的核心對象,然后依次遍歷這幾個核心對象和它們的鄰居,按照相同的方法,記錄下的就是密度可達的節點。在遍歷開始時,添加一個判斷條件,判斷這個節點是不是滿足核心節點的條件,如果不滿足,那么就不再查找它的鄰域,這些節點就是密度相連節點,也就是這一個類的邊緣節點。

下面就是整個密度聚類的代碼:

#密度聚類
import numpy as np
import random
import time
import copy
np.set_printoptions(suppress=True)
def euclidean_distance(x, w):  # 歐式距離公式√∑(xi﹣wi)2
    return round(np.linalg.norm(np.subtract(x, w), axis=-1),8)


def find_neighbor(j, x, eps):
    N = list()
    for i in range(x.shape[0]):
        temp = euclidean_distance(X[i],X[j])  # 計算歐式距離
        print(str(j)+"到",str(i)+"的距離",'%.8f' % temp)
        if temp <= eps:
            N.append(i)
    return set(N)




def DBSCAN(X, eps, min_Pts):
    k = -1
    neighbor_list = []  # 用來保存每個數據的鄰域
    omega_list = []  # 核心對象集合
    gama = set([x for x in range(len(X))])  # 初始時將所有點標記為未訪問
    cluster = [-1 for _ in range(len(X))]  # 聚類
    for i in range(len(X)):
        neighbor_list.append(find_neighbor(i, X, eps))
        if len(neighbor_list[-1]) + int(count_matrix[i]) >= min_Pts:    #如果權值對應位置的數據樣本數量和相似權值的數量之和大于一定的數
            omega_list.append(i)  # 將樣本加入核心對象集合
    omega_list = set(omega_list)  # 轉化為集合便于操作
    while len(omega_list) > 0:
        gama_old = copy.deepcopy(gama)  #上一狀態未訪問的節點
        j = random.choice(list(omega_list))  # 隨機選取一個核心對象
        k = k + 1  #第幾個類別
        Q = list()
        Q.append(j)  #選出來的核心對象
        gama.remove(j)  #標記為訪問過
        while len(Q) > 0:#初始Q只有一個,但是后面會擴充
            q = Q[0]
            Q.remove(q)  #把遍歷完的節點刪除
            #正是下面這一個if決定了密度聚類的邊緣,不滿足if語句的就是密度相連,滿足就是密度直達或者密度可達
            if len(neighbor_list[q]) >= min_Pts:#驗證是不是核心對象,找出密度直達
                delta = neighbor_list[q] & gama #set的交集,鄰域中包含的未訪問過的數據
                deltalist = list(delta)
                for i in range(len(delta)):
                    Q.append(deltalist[i])#將沒訪問過的節點添加到隊列
                    gama = gama - delta #節點標記為訪問
        Ck = gama_old - gama  #記錄這一類中的節點
        Cklist = list(Ck)  
        for i in range(len(Ck)):
            cluster[Cklist[i]] = k  #標記這一類的數據
        omega_list = omega_list - Ck #刪除核心對象
    return cluster


加載數據
X = np.load("文件位置")
X = X.reshape((-1,向量維度)) #修改維度


eps = 0.0000002    #兩個樣本之間的最大距離
min_Pts = 20   #樣本的最小值
C = DBSCAN(X, eps, min_Pts)
C = np.array(C)
np.save("classify.npy",C)
print("C",C.reshape([X原來的維度]))

注意一點,密度聚類的輸入數據,不管是多少維,用這個代碼的話都要轉換成一維數據再進行密度聚類。舉個例子,二維數據row行,loc列,那么數據reshape成一維數據后,當前位置 i 對應的位置就是[(row*loc)+i]。如果有不懂或者有任何問題,歡迎留言討論!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 核心
    +關注

    關注

    0

    文章

    44

    瀏覽量

    15028
  • 對象
    +關注

    關注

    1

    文章

    38

    瀏覽量

    17391
  • 密度聚類
    +關注

    關注

    0

    文章

    3

    瀏覽量

    5755
收藏 人收藏

    評論

    相關推薦

    一種改進的基于密度模糊支持向量機

    為了提高模糊支持向量機在數據集上的訓練效率,提出一種改進的基于密度(DBSCAN)的模糊支持向量機算法。運用DBSCAN算法對原始數據進
    發表于 03-20 16:21 ?12次下載

    基于DBSCAN的批量更新算法

    為更新批量數據,提出一種基于DBSCAN的新方法。該算法通過掃描原對象確定它們同增量對象間的關系,得到一個相關對象集,同時根據該相關對象和增量對象之間的關系獲得新
    發表于 03-31 10:03 ?19次下載

    適用于公交站點DBSCAN改進算法

    提出一種適用于公交站點DBSCAN改進算法,縮小搜索半徑ε,從而提高正確度,同時通過共享對象判定連接簇的合并,防止簇的過分割,減少
    發表于 04-23 09:26 ?30次下載

    一種改進的基于密度的入侵檢測算法

    密度算法DBSCAN是一種有效的聚類分析方法。本文構建了網絡入侵檢測系統模型,并將一種改進的基于密度
    發表于 08-24 08:41 ?4次下載

    基于網格的多密度算法

    提出了一種多密度網格算法GDD。該算法主要采用密度閾值遞減的多階段技術提取不同
    發表于 08-27 14:35 ?11次下載

    基于網格的快速搜尋密度峰值的算法優化研究

    CFSFDP是基于密度的新型算法,可非球形數據集,具有
    發表于 11-21 15:08 ?15次下載

    基于層次劃分的密度優化算法

    針對傳統的算法對數據集反復,且在大型數據集上計算效率欠佳的問題,提出一種基于層次劃分的最佳
    發表于 12-17 11:27 ?0次下載
    基于層次劃分的<b class='flag-5'>密度</b>優化<b class='flag-5'>聚</b><b class='flag-5'>類</b>算法

    基于密度差分的自動算法

    作為無監督學習技術,已在實際中得到了廣泛的應用,但是對于帶有噪聲的數據集,一些主流算法仍然存在著噪聲去除不徹底和結果不準確等問題.本文提出了一種基于
    發表于 12-18 11:16 ?0次下載

    中點密度函數的模糊算法

    針對傳統模糊C一均值( FCM)算法初始中心不確定,且需要人為預先設定聚類別數,從而導致結果不準確的問題,提出了一種基于中點
    發表于 12-26 15:54 ?0次下載

    基于數據劃分和融合策略的并行DBSCAN算法

    歸為一,而將不具有該特征的項排除在外。主流的方法包括基于劃分的方法,如K-means;層次
    發表于 02-08 14:58 ?0次下載

    基于密度DBSCAN算法

    本文開始介紹了算法概念,其次闡述了算法的分類,最后詳細介紹了算法中
    的頭像 發表于 04-26 10:56 ?2.2w次閱讀
    基于<b class='flag-5'>密度</b><b class='flag-5'>DBSCAN</b>的<b class='flag-5'>聚</b><b class='flag-5'>類</b>算法

    Python無監督學習的幾種算法包括K-Means,分層等詳細概述

    無監督學習是機器學習技術中的一,用于發現數據中的模式。本文介紹用Python進行無監督學習的幾種算法,包括K-Means、分層
    的頭像 發表于 05-27 09:59 ?3w次閱讀
    Python無監督學習的幾種<b class='flag-5'>聚</b><b class='flag-5'>類</b>算法包括K-Means<b class='flag-5'>聚</b><b class='flag-5'>類</b>,分層<b class='flag-5'>聚</b><b class='flag-5'>類</b>等詳細概述

    改進的DBSCAN算法在Spark平臺上的應用

    針對 DBSCAN( Density- based Spatial Clustering of Applications with Noise)算法內存占用率較高的問題,文中
    發表于 04-26 15:14 ?9次下載
    改進的<b class='flag-5'>DBSCAN</b><b class='flag-5'>聚</b><b class='flag-5'>類</b>算法在Spark平臺上的應用

    基于特征提取和密度的鋼軌識別算法

    解決上述問題,文中提出一種基于擴展Har特征提取和 DBSCAN密度的鋼軌識別算法。首先通過仿射變換、池化、灰度均衡仳、邊緣檢測等算法對圖像進行預處理,然后基于擴展Haar特征提取
    發表于 06-16 15:03 ?5次下載

    10種介紹和Python代碼

    分享一篇關于的文章,10種介紹和Python代碼
    的頭像 發表于 07-30 10:25 ?3054次閱讀
    主站蜘蛛池模板: 激情五月五月婷婷| 一级免费黄色片| 天堂资源最新版在线官网| 看黄网站在线| 五月婷婷六月天| 国产视频日本| 国产精品偷伦费观看| 曰本性l交片视频视频| 精品一区二区视频| 日日夜操| 超h 高h 污肉1v1御书屋| 久久这里只有精品免费视频| 特黄十八岁大片| 九九免费久久这里有精品23| 免费播放特黄特色毛片| 理论片午午伦夜理片影院99| 中文天堂在线视频| 国产三级毛片视频| 国产aa| 五夜婷婷| 午夜精品视频在线观看| 视频一区 中文字幕| 美国一级毛片片aa久久综合| 奇米影视四色7777久久精品| 中文字幕婷婷| 国产tube| 一区二区在线看| 免费爱爱网址| 国产大片免费观看中文字幕| 四虎影院官网| 天天影院网| 诱人的老师bd高清日本在线观看| 国产成人综合久久| h黄色| 久久激情综合网| 日本人xxxxxxxx6969| 日本网站免费观看| 久久九九国产| 色噜噜狠狠狠狠色综合久一| 日本加勒比视频在线观看| 性做久久久久久久久|