亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python聚類算法之凝聚層次聚類實(shí)例分析

 更新時(shí)間:2015年11月20日 11:15:20   作者:intergret  
這篇文章主要介紹了Python聚類算法之凝聚層次聚類的原理與具體使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

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

凝聚層次聚類:所謂凝聚的,指的是該算法初始時(shí),將每個(gè)點(diǎn)作為一個(gè)簇,每一步合并兩個(gè)最接近的簇。另外即使到最后,對(duì)于噪音點(diǎn)或是離群點(diǎn)也往往還是各占一簇的,除非過(guò)度合并。對(duì)于這里的“最接近”,有下面三種定義。我在實(shí)現(xiàn)是使用了MIN,該方法在合并時(shí),只要依次取當(dāng)前最近的點(diǎn)對(duì),如果這個(gè)點(diǎn)對(duì)當(dāng)前不在一個(gè)簇中,將所在的兩個(gè)簇合并就行:

單鏈(MIN):定義簇的鄰近度為不同兩個(gè)簇的兩個(gè)最近的點(diǎn)之間的距離。
全鏈(MAX):定義簇的鄰近度為不同兩個(gè)簇的兩個(gè)最遠(yuǎn)的點(diǎn)之間的距離。
組平均:定義簇的鄰近度為取自兩個(gè)不同簇的所有點(diǎn)對(duì)鄰近度的平均值。

# scoding=utf-8
# Agglomerative Hierarchical Clustering(AHC)
import pylab as pl
from operator import itemgetter
from collections import OrderedDict,Counter
points = [[int(eachpoint.split('#')[0]), int(eachpoint.split('#')[1])] for eachpoint in open("points","r")]
# 初始時(shí)每個(gè)點(diǎn)指派為單獨(dú)一簇
groups = [idx for idx in range(len(points))]
# 計(jì)算每個(gè)點(diǎn)對(duì)之間的距離
disP2P = {}
for idx1,point1 in enumerate(points):
  for idx2,point2 in enumerate(points):
    if (idx1 < idx2):
      distance = pow(abs(point1[0]-point2[0]),2) + pow(abs(point1[1]-point2[1]),2)
      disP2P[str(idx1)+"#"+str(idx2)] = distance
# 按距離降序?qū)⒏鱾€(gè)點(diǎn)對(duì)排序
disP2P = OrderedDict(sorted(disP2P.iteritems(), key=itemgetter(1), reverse=True))
# 當(dāng)前有的簇個(gè)數(shù)
groupNum = len(groups)
# 過(guò)分合并會(huì)帶入噪音點(diǎn)的影響,當(dāng)簇?cái)?shù)減為finalGroupNum時(shí),停止合并
finalGroupNum = int(groupNum*0.1)
while groupNum > finalGroupNum:
  # 選取下一個(gè)距離最近的點(diǎn)對(duì)
  twopoins,distance = disP2P.popitem()
  pointA = int(twopoins.split('#')[0])
  pointB = int(twopoins.split('#')[1])
  pointAGroup = groups[pointA]
  pointBGroup = groups[pointB]
  # 當(dāng)前距離最近兩點(diǎn)若不在同一簇中,將點(diǎn)B所在的簇中的所有點(diǎn)合并到點(diǎn)A所在的簇中,此時(shí)當(dāng)前簇?cái)?shù)減1
  if(pointAGroup != pointBGroup):
    for idx in range(len(groups)):
      if groups[idx] == pointBGroup:
        groups[idx] = pointAGroup
    groupNum -= 1
# 選取規(guī)模最大的3個(gè)簇,其他簇歸為噪音點(diǎn)
wantGroupNum = 3
finalGroup = Counter(groups).most_common(wantGroupNum)
finalGroup = [onecount[0] for onecount in finalGroup]
dropPoints = [points[idx] for idx in range(len(points)) if groups[idx] not in finalGroup]
# 打印規(guī)模最大的3個(gè)簇中的點(diǎn)
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 dropPoints], [eachpoint[1] for eachpoint in dropPoints], 'ok')  
pl.show()

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

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

相關(guān)文章

  • Python 功能和特點(diǎn)(新手必學(xué))

    Python 功能和特點(diǎn)(新手必學(xué))

    Python是一門簡(jiǎn)單而文字簡(jiǎn)約的語(yǔ)言。閱讀好的Python程序感覺(jué)就像閱讀英語(yǔ),盡管是非常嚴(yán)格的英語(yǔ)。Python的這種偽代碼特性是其最大強(qiáng)項(xiàng)之一,它可讓你專注于解決問(wèn)題的辦法而不是語(yǔ)言本身,通過(guò)本篇文章給大家介紹python功能和特點(diǎn)相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • pandas數(shù)據(jù)處理之繪圖的實(shí)現(xiàn)

    pandas數(shù)據(jù)處理之繪圖的實(shí)現(xiàn)

    這篇文章主要介紹了pandas數(shù)據(jù)處理之繪圖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • python字符串中的單雙引

    python字符串中的單雙引

    下面小編就為大家?guī)?lái)一篇python字符串中的單雙引。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 利用python實(shí)現(xiàn)聚類分析K-means算法的詳細(xì)過(guò)程

    利用python實(shí)現(xiàn)聚類分析K-means算法的詳細(xì)過(guò)程

    K-means算法是很典型的基于距離的聚類算法,采用距離作為相似性的評(píng)價(jià)指標(biāo),即認(rèn)為兩個(gè)對(duì)象的距離越近,其相似度就越大,下面通過(guò)本文給大家介紹利用python實(shí)現(xiàn)聚類分析K-means算法的詳細(xì)過(guò)程,感興趣的朋友一起看看吧
    2021-11-11
  • Python實(shí)現(xiàn)隨機(jī)從圖像中獲取多個(gè)patch

    Python實(shí)現(xiàn)隨機(jī)從圖像中獲取多個(gè)patch

    經(jīng)常有一些圖像任務(wù)需要從一張大圖中截取固定大小的patch來(lái)進(jìn)行訓(xùn)練。本文就來(lái)和大家聊聊如何用Python實(shí)現(xiàn)隨機(jī)從圖像中獲取多個(gè)patch,感興趣的可以了解一下
    2022-08-08
  • python taipy庫(kù)輕松地將數(shù)據(jù)和機(jī)器學(xué)習(xí)模型轉(zhuǎn)為功能性Web應(yīng)用

    python taipy庫(kù)輕松地將數(shù)據(jù)和機(jī)器學(xué)習(xí)模型轉(zhuǎn)為功能性Web應(yīng)用

    taipy 是一個(gè)開(kāi)源的 Python 庫(kù),任何具有基本 Python 技能的人都可以使用,對(duì)于數(shù)據(jù)科學(xué)家、機(jī)器學(xué)習(xí)工程師和 Python 程序員來(lái)說(shuō),它是一個(gè)方便的工具,借助 Taipy,你可以輕松地將數(shù)據(jù)和機(jī)器學(xué)習(xí)模型轉(zhuǎn)變?yōu)楣δ苄缘?nbsp;Web 應(yīng)用程序
    2024-01-01
  • matplotlib bar()實(shí)現(xiàn)多組數(shù)據(jù)并列柱狀圖通用簡(jiǎn)便創(chuàng)建方法

    matplotlib bar()實(shí)現(xiàn)多組數(shù)據(jù)并列柱狀圖通用簡(jiǎn)便創(chuàng)建方法

    這篇文章主要介紹了matplotlib bar()實(shí)現(xiàn)多組數(shù)據(jù)并列柱狀圖通用簡(jiǎn)便創(chuàng)建方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 利用Python的pandas數(shù)據(jù)處理包將寬表變成窄表

    利用Python的pandas數(shù)據(jù)處理包將寬表變成窄表

    這篇文章主要介紹了利用Python的pandas數(shù)據(jù)處理包將寬表變成窄表,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • python變量的作用域是什么

    python變量的作用域是什么

    在本篇內(nèi)容里小編給大家分享了關(guān)于python變量的作用域的實(shí)例及用法,有興趣的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • python RSA加密的示例

    python RSA加密的示例

    這篇文章主要介紹了python RSA加密的示例,幫助大家更好的理解和使用加密算法,感興趣的朋友可以了解下
    2020-12-12

最新評(píng)論