最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python聚類算法之DBSACN實例分析

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

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

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

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

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

# 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")]
# 計算每個數(shù)據點相鄰的數(shù)據點,鄰域定義為以該點為中心以邊長為2*EPs的網格
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)
# 定義鄰域內相鄰的數(shù)據點的個數(shù)大于4的為核心點
MinPts = 5
corePointIdx = [pointIdx for pointIdx,surPointIdxs in surroundPoints.iteritems() if len(surPointIdxs)>=MinPts]
# 鄰域內包含某個核心點的非核心點,定義為邊界點
borderPointIdx = []
for pointIdx,surPointIdxs in surroundPoints.iteritems():
  if (pointIdx not in corePointIdx):
    for onesurPointIdx in surPointIdxs:
      if onesurPointIdx in corePointIdx:
        borderPointIdx.append(pointIdx)
        break
# 噪音點既不是邊界點也不是核心點
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))]
# 各個核心點與其鄰域內的所有核心點放在同一個簇中
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]
# 邊界點跟其鄰域內的某個核心點放在同一個簇中
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個簇
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')
# 打印噪音點,黑色
pl.plot([eachpoint[0] for eachpoint in noisePoint], [eachpoint[1] for eachpoint in noisePoint], 'ok')  
pl.show()

運行效果截圖如下:

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • Python獲取服務器信息的最簡單實現(xiàn)方法

    Python獲取服務器信息的最簡單實現(xiàn)方法

    這篇文章主要介紹了Python獲取服務器信息的最簡單實現(xiàn)方法,涉及Python中urllib2庫的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python中用append()連接后多出一列Unnamed的解決

    Python中用append()連接后多出一列Unnamed的解決

    Python中用append()連接后多出一列Unnamed的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • pandas中提取DataFrame某些列的一些方法

    pandas中提取DataFrame某些列的一些方法

    dataframe是pandas包的重要對象,熟練掌握dataframe的基本操作是很有必要的,下面這篇文章主要給大家介紹了關于pandas中提取DataFrame某些列的一些方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • 關于python常見異常以及處理方法

    關于python常見異常以及處理方法

    這篇文章主要介紹了關于python常見異常以及處理方法,python用異常對象(exception object)來表示異常情況。遇到錯誤后,會引發(fā)異常,需要的朋友可以參考下
    2023-04-04
  • PyCharm中如何直接使用Anaconda已安裝的庫

    PyCharm中如何直接使用Anaconda已安裝的庫

    這篇文章主要介紹了PyCharm中如何直接使用Anaconda已安裝的庫,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • Python 詳解通過Scrapy框架實現(xiàn)爬取CSDN全站熱榜標題熱詞流程

    Python 詳解通過Scrapy框架實現(xiàn)爬取CSDN全站熱榜標題熱詞流程

    Scrapy是用純Python實現(xiàn)一個為了爬取網站數(shù)據、提取結構性數(shù)據而編寫的應用框架,用途非常廣泛,框架的力量,用戶只需要定制開發(fā)幾個模塊就可以輕松的實現(xiàn)一個爬蟲,用來抓取網頁內容以及各種圖片,非常之方便
    2021-11-11
  • mac在matplotlib中顯示中文的操作方法

    mac在matplotlib中顯示中文的操作方法

    這篇文章主要介紹了mac如何在matplotlib中顯示中文,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • python字符串,數(shù)值計算

    python字符串,數(shù)值計算

    這篇文章主要介紹了python字符串,數(shù)值計算的相關資料,需要的朋友可以參考下
    2016-10-10
  • python:pandas合并csv文件的方法(圖書數(shù)據集成)

    python:pandas合并csv文件的方法(圖書數(shù)據集成)

    下面小編就為大家分享一篇python:pandas合并csv文件的方法(圖書數(shù)據集成),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python高階函數(shù)之filter()函數(shù)代碼示例

    Python高階函數(shù)之filter()函數(shù)代碼示例

    這篇文章主要介紹了Python高階函數(shù)之filter()函數(shù)代碼示例,獲取了一個序列的時候,想要把一些內容去掉,保留一部分內容的時候可以使用高效的filter()函數(shù),需要的朋友可以參考下
    2023-07-07

最新評論

托克逊县| 岳阳县| 定安县| 武威市| 武穴市| 泸西县| 穆棱市| 永康市| 金门县| 潮安县| 卢湾区| 永兴县| 富阳市| 拜泉县| 武义县| 句容市| 顺义区| 德安县| 大宁县| 盘锦市| 怀集县| 溆浦县| 沙田区| 海南省| 常州市| 喜德县| 新乐市| 客服| 芜湖县| 渭源县| 濉溪县| 黎城县| 永清县| 道真| 马山县| 阳西县| 蓬安县| 郁南县| 龙泉市| 晋宁县| 黑龙江省|