欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python聚類算法之DBSACN實(shí)例分析

 更新時(shí)間:2015年11月20日 11:23:06   作者:intergret  
這篇文章主要介紹了Python聚類算法之DBSACN,結(jié)合實(shí)例形式詳細(xì)分析了DBSACN算法的原理與具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了Python聚類算法之DBSACN。分享給大家供大家參考,具體如下:

DBSCAN:是一種簡單的,基于密度的聚類算法。本次實(shí)現(xiàn)中,DBSCAN使用了基于中心的方法。在基于中心的方法中,每個(gè)數(shù)據(jù)點(diǎn)的密度通過對(duì)以該點(diǎn)為中心以邊長為2*EPs的網(wǎng)格(鄰域)內(nèi)的其他數(shù)據(jù)點(diǎn)的個(gè)數(shù)來度量。根據(jù)數(shù)據(jù)點(diǎn)的密度分為三類點(diǎn):

核心點(diǎn):該點(diǎn)在鄰域內(nèi)的密度超過給定的閥值MinPs。
邊界點(diǎn):該點(diǎn)不是核心點(diǎn),但是其鄰域內(nèi)包含至少一個(gè)核心點(diǎn)。
噪音點(diǎn):不是核心點(diǎn),也不是邊界點(diǎn)。

有了以上對(duì)數(shù)據(jù)點(diǎn)的劃分,聚合可以這樣進(jìn)行:各個(gè)核心點(diǎn)與其鄰域內(nèi)的所有核心點(diǎn)放在同一個(gè)簇中,把邊界點(diǎn)跟其鄰域內(nèi)的某個(gè)核心點(diǎn)放在同一個(gè)簇中。

# scoding=utf-8
import pylab as pl
from collections import defaultdict,Counter
points = [[int(eachpoint.split("#")[0]), int(eachpoint.split("#")[1])] for eachpoint in open("points","r")]
# 計(jì)算每個(gè)數(shù)據(jù)點(diǎn)相鄰的數(shù)據(jù)點(diǎn),鄰域定義為以該點(diǎn)為中心以邊長為2*EPs的網(wǎng)格
Eps = 10
surroundPoints = defaultdict(list)
for idx1,point1 in enumerate(points):
  for idx2,point2 in enumerate(points):
    if (idx1 < idx2):
      if(abs(point1[0]-point2[0])<=Eps and abs(point1[1]-point2[1])<=Eps):
        surroundPoints[idx1].append(idx2)
        surroundPoints[idx2].append(idx1)
# 定義鄰域內(nèi)相鄰的數(shù)據(jù)點(diǎn)的個(gè)數(shù)大于4的為核心點(diǎn)
MinPts = 5
corePointIdx = [pointIdx for pointIdx,surPointIdxs in surroundPoints.iteritems() if len(surPointIdxs)>=MinPts]
# 鄰域內(nèi)包含某個(gè)核心點(diǎn)的非核心點(diǎn),定義為邊界點(diǎn)
borderPointIdx = []
for pointIdx,surPointIdxs in surroundPoints.iteritems():
  if (pointIdx not in corePointIdx):
    for onesurPointIdx in surPointIdxs:
      if onesurPointIdx in corePointIdx:
        borderPointIdx.append(pointIdx)
        break
# 噪音點(diǎn)既不是邊界點(diǎn)也不是核心點(diǎn)
noisePointIdx = [pointIdx for pointIdx in range(len(points)) if pointIdx not in corePointIdx and pointIdx not in borderPointIdx]
corePoint = [points[pointIdx] for pointIdx in corePointIdx] 
borderPoint = [points[pointIdx] for pointIdx in borderPointIdx]
noisePoint = [points[pointIdx] for pointIdx in noisePointIdx]
# pl.plot([eachpoint[0] for eachpoint in corePoint], [eachpoint[1] for eachpoint in corePoint], 'or')
# pl.plot([eachpoint[0] for eachpoint in borderPoint], [eachpoint[1] for eachpoint in borderPoint], 'oy')
# pl.plot([eachpoint[0] for eachpoint in noisePoint], [eachpoint[1] for eachpoint in noisePoint], 'ok')
groups = [idx for idx in range(len(points))]
# 各個(gè)核心點(diǎn)與其鄰域內(nèi)的所有核心點(diǎn)放在同一個(gè)簇中
for pointidx,surroundIdxs in surroundPoints.iteritems():
  for oneSurroundIdx in surroundIdxs:
    if (pointidx in corePointIdx and oneSurroundIdx in corePointIdx and pointidx < oneSurroundIdx):
      for idx in range(len(groups)):
        if groups[idx] == groups[oneSurroundIdx]:
          groups[idx] = groups[pointidx]
# 邊界點(diǎn)跟其鄰域內(nèi)的某個(gè)核心點(diǎn)放在同一個(gè)簇中
for pointidx,surroundIdxs in surroundPoints.iteritems():
  for oneSurroundIdx in surroundIdxs:
    if (pointidx in borderPointIdx and oneSurroundIdx in corePointIdx):
      groups[pointidx] = groups[oneSurroundIdx]
      break
# 取簇規(guī)模最大的5個(gè)簇
wantGroupNum = 3
finalGroup = Counter(groups).most_common(3)
finalGroup = [onecount[0] for onecount in finalGroup]
group1 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[0]]
group2 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[1]]
group3 = [points[idx] for idx in xrange(len(points)) if groups[idx]==finalGroup[2]]
pl.plot([eachpoint[0] for eachpoint in group1], [eachpoint[1] for eachpoint in group1], 'or')
pl.plot([eachpoint[0] for eachpoint in group2], [eachpoint[1] for eachpoint in group2], 'oy')
pl.plot([eachpoint[0] for eachpoint in group3], [eachpoint[1] for eachpoint in group3], 'og')
# 打印噪音點(diǎn),黑色
pl.plot([eachpoint[0] for eachpoint in noisePoint], [eachpoint[1] for eachpoint in noisePoint], 'ok')  
pl.show()

運(yùn)行效果截圖如下:

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 基于Python制作公交車站查詢系統(tǒng)

    基于Python制作公交車站查詢系統(tǒng)

    這篇文章主要介紹了如何利用Python制作一個(gè)簡單的公交車站查詢系統(tǒng)。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下
    2022-01-01
  • flask應(yīng)用部署到服務(wù)器的方法

    flask應(yīng)用部署到服務(wù)器的方法

    這篇文章主要介紹了flask應(yīng)用部署到服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Windows10下Tensorflow2.0 安裝及環(huán)境配置教程(圖文)

    Windows10下Tensorflow2.0 安裝及環(huán)境配置教程(圖文)

    這篇文章主要介紹了Windows10下Tensorflow2.0 安裝及環(huán)境配置教程(圖文),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python機(jī)器學(xué)習(xí)之決策樹算法

    Python機(jī)器學(xué)習(xí)之決策樹算法

    這篇文章主要為大家詳細(xì)介紹了Python機(jī)器學(xué)習(xí)之決策樹算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Python實(shí)現(xiàn)批量上傳本地maven庫到nexus

    Python實(shí)現(xiàn)批量上傳本地maven庫到nexus

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)批量上傳本地maven庫到nexus,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考下
    2024-01-01
  • cmd輸入python命令無反應(yīng)的解決方案

    cmd輸入python命令無反應(yīng)的解決方案

    這篇文章主要介紹了cmd輸入python命令無反應(yīng)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python+樹莓派+YOLO打造一款人工智能照相機(jī)

    Python+樹莓派+YOLO打造一款人工智能照相機(jī)

    今天,我們將自己動(dòng)手打造出一款基于深度學(xué)習(xí)的照相機(jī),當(dāng)小鳥出現(xiàn)在攝像頭畫面中時(shí),它將能檢測到小鳥并自動(dòng)進(jìn)行拍照
    2018-01-01
  • pyCharm中python對(duì)象的自動(dòng)提示方式

    pyCharm中python對(duì)象的自動(dòng)提示方式

    這篇文章主要介紹了pyCharm中python對(duì)象的自動(dòng)提示方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Django獲取該數(shù)據(jù)的上一條和下一條方法

    Django獲取該數(shù)據(jù)的上一條和下一條方法

    今天小編就為大家分享一篇Django獲取該數(shù)據(jù)的上一條和下一條方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python 使用PIL numpy 實(shí)現(xiàn)拼接圖片的示例

    Python 使用PIL numpy 實(shí)現(xiàn)拼接圖片的示例

    今天小編就為大家分享一篇Python 使用PIL numpy 實(shí)現(xiàn)拼接圖片的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論