精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

100天搞定機器學習:day54 聚類系列:層次聚類原理及案例

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-10 21:56 ? 次閱讀

幾張GIF理解K-均值聚類原理
k均值聚類數學推導與python實現
前文說了k均值聚類,他是基于中心的聚類方法,通過迭代將樣本分到k個類中,使每個樣本與其所屬類的中心或均值最近。

今天我們看一下無監督學習之聚類方法的另一種算法,層次聚類:

層次聚類前提假設類別直接存在層次關系,通過計算不同類別數據點間的相似度來創建一棵有層次的嵌套聚類樹。在聚類樹中,不同類別的原始數據點是樹的最低層,樹的頂層是一個聚類的根節點。創建聚類樹有聚合聚類(自下而上合并)和分裂聚類(自上而下分裂)兩種方法,分裂聚類一般很少使用,不做介紹。

聚合聚類

聚合聚類具體過程

對于給定的樣本集合,開始將每個樣本分到一個類,然后再按照一定的規則(比如類間距最小),將滿足規則的類進行合并,反復進行,直到滿足停止條件。聚合聚類三要素有:

①距離或相似度(閔可夫斯基距離,相關系數、夾角余弦)

②合并規則(最長/短距離,中心距離,平均距離)

③停止條件(類個數或類直徑達到或超過閾值)

聚合聚類算法

輸入:n個樣本組成的樣本集合及樣本間距離

輸出:樣本集合的層次化聚類

(1)計算n個樣本兩兩之間歐氏距離{dij}

(2)構造n個類,每個類只包含一個樣本

(3)合并類間距最小的兩個類,構造一個新類

(4)計算新類與其他各類的距離,若類的個數為1,終止計算,否則回到(3)

動畫表示:

python實現及案例

import queue
import math
import copy
import numpy as np
import matplotlib.pyplot as plt

class clusterNode:

def __init__(self, value, id=[],left=None, right=None, distance=-1,  count=-1, check = 0):
    '''
    value: 該節點的數值,合并節點時等于原來節點值的平均值
    id:節點的id,包含該節點下的所有單個元素
    left和right:合并得到該節點的兩個子節點
    distance:兩個子節點的距離
    count:該節點所包含的單個元素個數
    check:標識符,用于遍歷時記錄該節點是否被遍歷過
    '''
    self.value = value
    self.id = id
    self.left = left
    self.right = right
    self.distance = distance
    self.count = count
    self.check = check

def show(self):
    #顯示節點相關屬性
    print(self.value,' ',self.left.id if self.left!=None else None,' ',/
        self.right.id if self.right!=None else None,' ',self.distance,' ',self.count)

class hcluster:

def distance(self,x,y):
    #計算兩個節點的距離,可以換成別的距離
    return math.sqrt(pow((x.value-y.value),2))

def minDist(self,dataset):
    #計算所有節點中距離最小的節點對
    mindist = 1000
    for i in range(len(dataset)-1):
        if dataset[i].check == 1:
            #略過合并過的節點
            continue
        for j in range(i+1,len(dataset)):
            if dataset[j].check == 1:
                continue
            dist = self.distance(dataset[i],dataset[j])
            if dist < mindist:
                mindist = dist
                x, y = i, j
    return mindist, x, y
    #返回最小距離、距離最小的兩個節點的索引

def fit(self,data):
    dataset = [clusterNode(value=item,id=[(chr(ord('a')+i))],count=1) for i,item in enumerate(data)]
    #將輸入的數據元素轉化成節點,并存入節點的列表
    length = len(dataset)
    Backup = copy.deepcopy(dataset)
    #備份數據
    while(True):
        mindist, x, y = self.minDist(dataset)
        dataset[x].check = 1
        dataset[y].check = 1
        tmpid = copy.deepcopy(dataset[x].id)
        tmpid.extend(dataset[y].id)
        dataset.append(clusterNode(value=(dataset[x].value+dataset[y].value)/2,id=tmpid,/
            left=dataset[x],right=dataset[y],distance=mindist,count=dataset[x].count+dataset[y].count))
        #生成新節點
        if len(tmpid) == length:
            #當新生成的節點已經包含所有元素時,退出循環,完成聚類
            break
    for item in dataset:
        item.show()
    return dataset

def show(self,dataset,num):
    plt.figure(1)
    showqueue = queue.Queue()
    #存放節點信息的隊列
    showqueue.put(dataset[len(dataset) - 1])
    #存入根節點
    showqueue.put(num)
    #存入根節點的中心橫坐標
    while not showqueue.empty():
        index = showqueue.get()
        #當前繪制的節點
        i = showqueue.get()
        #當前繪制節點中心的橫坐標
        left = i - (index.count)/2
        right = i + (index.count)/2
        if index.left != None:
            x = [left,right]
            y = [index.distance,index.distance]
            plt.plot(x,y)
            x = [left,left]
            y = [index.distance,index.left.distance]
            plt.plot(x,y)
            showqueue.put(index.left)
            showqueue.put(left)
        if index.right != None:
            x = [right,right]
            y = [index.distance,index.right.distance]
            plt.plot(x,y)
            showqueue.put(index.right)
            showqueue.put(right)
    plt.show()

def setData(num):

#生成num個隨機數據
Data = list(np.random.randint(1,100,size=num))
return Data

if name == '__main__':

num = 20
dataset = setData(num)
h = hcluster()
resultset = h.fit(dataset)
h.show(resultset,num)

本文由博客一文多發平臺 OpenWrite 發布!

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

    關注

    66

    文章

    8377

    瀏覽量

    132409
  • 深度學習
    +關注

    關注

    73

    文章

    5492

    瀏覽量

    120977
收藏 人收藏

    評論

    相關推薦

    Java 枚舉與策略模式、函數式接口的結合:實現高內低耦合的設計

    作者:京東物流 楊唯一 一、Java 枚舉 Java 枚舉是一個特殊的,一般表示一組常量,比如一年的 4 個季節,一年的 12 個月份,一個星期的 7 ,方向有東南西北等。 我們在業務需求開發
    的頭像 發表于 11-21 14:06 ?101次閱讀

    使用CUDA-Q實現量子算法

    量子計算機能夠利用疊加、糾纏和干涉等量子特性,從數據中歸納出知識點并獲得洞察。這些量子機器學習(QML)技術最終將在量子加速的超級計算機上運行,這種超級計算機結合了 CPU、GPU 和 QPU 的處理能力,能夠解決一些世界上最復雜的難題。
    的頭像 發表于 11-20 10:14 ?142次閱讀
    使用CUDA-Q實現量子<b class='flag-5'>聚</b><b class='flag-5'>類</b>算法

    【《時間序列與機器學習》閱讀體驗】+ 了解時間序列

    收到《時間序列與機器學習》一書,彩色印刷,公式代碼清晰,非常精美。感謝作者,感謝電子發燒友提供了一個讓我學習時間序列及應用的機會! 前言第一段描述了編寫背景: 由此可知,這是一本關于時間序列進行大數
    發表于 08-11 17:55

    6網線和5網線的區別

    網線(Cat6)和五網線(Cat5)是兩種不同類型的網絡線纜,它們在多個方面存在顯著差異。以下是它們之間的主要區別: 1. 傳輸速率與帶寬 五網線:傳輸速率為100Mbps,帶
    的頭像 發表于 08-05 09:50 ?3721次閱讀

    名單公布!【書籍評測活動NO.35】如何用「時間序列與機器學習」解鎖未來?

    的從業經驗。 針對工業界的相關從業者,本書將為你提供實用的工具和技術,以幫助你更好地處理時間序列數據。你將學習到如何使用不同的模型和算法來預測未來、檢測異常、進行等。本書中包含大量的示例和案例研究
    發表于 06-25 15:00

    機器人與江蘇亨通攜手研發人形機器人專用線束

    近日,樂(深圳)機器人技術有限公司與江蘇亨通集團達成重要戰略合作,共同致力于人形機器人專用線束及相關線纜產品的研發工作。這一舉措旨在推動人形機器人線材和線纜連接器的標準化與產業化,為
    的頭像 發表于 06-19 09:33 ?665次閱讀

    清華腦視覺芯片取得重大突破,“眸芯”登上Nature封面

    電子發燒友網報道(文/李寧遠)5月30日,來自清華大學腦計算研究中心團隊的腦互補視覺芯片“眸芯”登上了《Nature》封面。 文章名為“A vision chip
    的頭像 發表于 06-01 00:54 ?4629次閱讀
    清華<b class='flag-5'>類</b>腦視覺芯片取得重大突破,“<b class='flag-5'>天</b>眸芯”登上Nature封面

    沃科技SDK使用指南

    本文主要針對SDK如何重定義硬件接口和外設參數進行說明,方便讓大家快速靈活使用沃科技SDK。
    的頭像 發表于 05-06 10:23 ?473次閱讀
    <b class='flag-5'>聚</b>沃科技SDK使用指南

    全球首創!能技術使信號增強50倍,能型外測液位計解決氯乙烯自(立罐)測量難題!

    本期案例中,用戶長期被氯乙烯立罐自的問題所困擾,后期在測量中選用了定華電子創新研發的能型外測液位計,使聲吶信號增大50倍,克服立罐內介質自的影響,實現更穩定、更精準的液位測量。 氯乙烯立罐自
    的頭像 發表于 04-26 14:22 ?306次閱讀
    全球首創!<b class='flag-5'>聚</b>能技術使信號增強50倍,<b class='flag-5'>聚</b>能型外測液位計解決氯乙烯自<b class='flag-5'>聚</b>(立罐)測量難題!

    水晶頭怎么分五和六

    水晶頭分為五和六,主要存在以下區別: 標識與帶寬:五線的標識是“CAT5”,帶寬為100M,適用于百兆以下的網絡。而六線的標識是“C
    的頭像 發表于 04-17 10:54 ?4876次閱讀

    鴻蒙語言TypeScript學習第16:【

    TypeScript 支持面向對象的所有特性,比如 、接口等。
    的頭像 發表于 04-15 09:29 ?965次閱讀
    鴻蒙語言TypeScript<b class='flag-5'>學習</b>第16<b class='flag-5'>天</b>:【<b class='flag-5'>類</b>】

    華為云與樂機器人簽署戰略合作協議

    華為云與領先的人形機器人創業企業樂機器人近日正式簽署戰略合作協議,共同致力于探索“華為盤古大模型+夸父人形機器人”的前沿應用場景。此次合作標志著華為云在智能
    的頭像 發表于 03-25 10:50 ?545次閱讀

    華為云攜手樂機器人,探索人形機器人大模型開發

    根據雙方約定,他們還將共同設計并打造一款通用的具身智能解決方案,以構建互通互聯的“人形機器人+”開放生態系統。據悉,華為云的先行者——盤古大模型,擁有卓越的語義理解、動態規劃以及多模態信號理解等多項能力,為樂機器人大模型的研發
    的頭像 發表于 03-22 11:53 ?698次閱讀

    海爾與樂聯手推出人形機器人“夸父”

    在近日舉行的AWE 2024展會上,海爾機器人與樂機器人共同展出了一款備受矚目的人形機器人——Kuavo(夸父)。這款機器人不僅是國內首款
    的頭像 發表于 03-19 11:33 ?995次閱讀

    元微電子無線溫度傳感SOC PL51NTXX系列芯片為冷鏈追溯量身定制

    冷鏈追溯因要求不同,實現方式有所不同。從現狀來看,可實現高精度溫度監控、低系統成本的全電子追溯是行業難點。蘇州元微電子股份有限公司(下文簡稱“元微電子”)的無線溫度傳感SoC PL51NTXX系列,提供了較為理想的解決方案。
    的頭像 發表于 12-13 10:18 ?471次閱讀
    <b class='flag-5'>聚</b>元微電子無線溫度傳感SOC PL51NTXX<b class='flag-5'>系列</b>芯片為冷鏈追溯量身定制