8000字詳解“聚類算法”,從理論實(shí)現(xiàn)到案例說明

0 評(píng)論 5682 瀏覽 42 收藏 34 分鐘

算法可以說是AI技術(shù)的核心,想入門AI的同學(xué),了解一些算法知識(shí)是很有必要的。這篇文章里,作者就介紹并梳理分析了AI無監(jiān)督學(xué)習(xí)中的聚類算法,一起來看看其工作原理和應(yīng)用場景吧。

各位看官:

歡迎一起探索AI的世界。就在開年的2月21日,國務(wù)院國資委召開中央企業(yè)人工智能專題推進(jìn)會(huì)扎實(shí)推動(dòng)AI賦能產(chǎn)業(yè)煥新,這一消息在國務(wù)院國有資產(chǎn)監(jiān)督管理委員會(huì)官網(wǎng)上公布,國家隊(duì)的重視也是全民擁抱AI的大好時(shí)機(jī)。

OpenAI和Sora掀起了一股全民科技熱潮,又加之當(dāng)前經(jīng)濟(jì)需要新的科技和新的需求來推動(dòng)市場發(fā)展,原因很多,錯(cuò)綜復(fù)雜。但無論是因?yàn)槭裁?,擁抱AI都會(huì)成為當(dāng)今互聯(lián)網(wǎng)從業(yè)人員的不二選擇。

現(xiàn)如今,大家都多多少少知道一些AI,特別是一些AI應(yīng)用的名稱,但論及AI的技術(shù)原理,并非人人皆知。當(dāng)然,大部分人也不需要知道背后的原理,就像我們?nèi)ゲ蛷d吃飯時(shí),會(huì)盡情品嘗菜肴的美味但不一定需要知道每樣食材的品種和產(chǎn)地。

那么,哪一類人群需要在擁抱AI的浪潮中還需習(xí)得AI的技術(shù)原理呢?

是原互聯(lián)網(wǎng)行業(yè)要轉(zhuǎn)型AI行業(yè)的一批人,或者剛畢業(yè)要進(jìn)入AI行業(yè)的新手小白,這些人是市場上新誕生的一群AI從業(yè)人員,也正是這些人,將有更大的機(jī)會(huì)在AI行業(yè)創(chuàng)造出新的社會(huì)價(jià)值。

互聯(lián)網(wǎng)科技人員是市場上最早一批接觸AI的人,在OpenAI還未火遍全球之前,就已經(jīng)有一批人在一些細(xì)分領(lǐng)域做著AI相關(guān)的工作,只不過那時(shí)候的AI市場還沒那么大。

而且那時(shí)候,互聯(lián)網(wǎng)領(lǐng)域無論是C端還是B端都存在著大量的市場機(jī)會(huì),大量的市場需求未被滿足,就算不涉及AI,無論是個(gè)人還是公司,都有著巨大的增長空間。

但是現(xiàn)在,一切都在改變,擁抱變化將是我們面對(duì)市場不確定性的主要節(jié)奏,原互聯(lián)網(wǎng)從業(yè)人員,上至大廠下至小初創(chuàng)公司,都不能固守著原先互聯(lián)網(wǎng)模式的一畝三分地,止步不前只會(huì)將自己圈禁待死。

所以說,無論是想轉(zhuǎn)型AI,還是新手入門AI,都必須具備AI領(lǐng)域一定程度的專業(yè)能力。為了了解AI,我們可以去學(xué)習(xí)如何操作市面上的AI工具,把現(xiàn)今流行的文生文,文生圖,文生視頻都玩一個(gè)遍。

但重點(diǎn)是,我們?cè)隗w驗(yàn)之余,也要靜下心來想想,如果想在AI這條路上走出自己的核心競爭力,僅僅會(huì)操作AI工具是否足以支撐自己走得穩(wěn),走得遠(yuǎn)?

若想成為AI行業(yè)中有獨(dú)特競爭力的一員,首要就是打好AI基本功。形成這個(gè)觀點(diǎn),不僅是基于我在互聯(lián)網(wǎng)多年的從業(yè)經(jīng)驗(yàn),也是基于國內(nèi)外大量公司和個(gè)人的成功案例。

也許功能或產(chǎn)品會(huì)被借鑒,人才會(huì)被挖走,但有些競爭力形成的護(hù)城河,就算公開于眾,也是奪不走的,這就是真正的實(shí)力,背后也是因?yàn)橛兄鷮?shí)的基本功做支撐。

入門AI,無論從哪個(gè)角度切入,都要先克服畏難情緒,日拱一卒,一步一腳印地磨練AI基本功。我們從AI的專業(yè)知識(shí)開始,逐步構(gòu)建自身的核心競爭力。

本章要說的主要內(nèi)容就是AI無監(jiān)督學(xué)習(xí)中的算法。算法是AI技術(shù)的核心。了解算法對(duì)于提高AI應(yīng)用的性能和效率至關(guān)重要。

類似ChatGPT,背后的算法能夠從數(shù)據(jù)中學(xué)習(xí)并生成新的內(nèi)容,我們需要了解這些AI算法的工作原理和應(yīng)用方式,以便更好地將它們?nèi)谌胱约旱漠a(chǎn)品和業(yè)務(wù)中。

全文8000字左右,預(yù)計(jì)閱讀時(shí)間15分鐘,若是碎片時(shí)間不夠,建議先收藏后看,便于找回。

照例,開篇提供本篇文章的目錄大綱,方便大家在閱讀前總攬全局,對(duì)內(nèi)容框架有預(yù)先了解。

一、無監(jiān)督學(xué)習(xí)算法

1. 算法是什么,能吃嗎?

哈哈,開個(gè)小玩笑,算法當(dāng)然不能吃了。算法是一系列定義明確的操作步驟,用于解決特定問題或完成特定任務(wù)。

我們常見的算法通常指的是計(jì)算機(jī)科學(xué)中的一個(gè)概念,它涉及到數(shù)據(jù)的處理、轉(zhuǎn)換和計(jì)算,用于實(shí)現(xiàn)某個(gè)目標(biāo)或解決某個(gè)問題。

也可以簡單理解成,算法是通過數(shù)據(jù)來解決問題的一種工具。往小了說,像四則運(yùn)算、定理公式都可以稱之為算法。嗯,1+1=2,也是一種算法。所以,算法并沒有我們以為的那么高深莫測。

在AI和機(jī)器學(xué)習(xí)領(lǐng)域,算法被設(shè)計(jì)用于從數(shù)據(jù)中學(xué)習(xí)、發(fā)現(xiàn)模式、做出預(yù)測或執(zhí)行決策,而無需顯式的編程。

算法可以是簡單的,比如排序一組數(shù)字,也可以是復(fù)雜的,比如識(shí)別圖像中的對(duì)象或理解自然語言文本。在AI領(lǐng)域,算法被用來處理人力所不及的領(lǐng)域,像“1+1=2”這類的問題,就犯不著用上算法啦。

算法概念很廣,我們主要圍繞機(jī)器學(xué)習(xí)中的算法展開討論。在機(jī)器學(xué)習(xí)中,算法通常分為以下幾類:

【監(jiān)督學(xué)習(xí)算法】

監(jiān)督學(xué)習(xí)算法通過使用已標(biāo)記的訓(xùn)練數(shù)據(jù)(輸入和相應(yīng)的輸出)來學(xué)習(xí)模型。通過建立一個(gè)從輸入到輸出的映射,讓模型能夠?qū)π碌奈礃?biāo)記數(shù)據(jù)進(jìn)行預(yù)測。

常見的監(jiān)督學(xué)習(xí)算法包括線性回歸、決策樹、支持向量機(jī)等。

【無監(jiān)督學(xué)習(xí)算法】

無監(jiān)督學(xué)習(xí)算法則需要在沒有明確標(biāo)簽的情況下從數(shù)據(jù)中學(xué)習(xí)結(jié)構(gòu)和模式。這類算法主要用于聚類、降維和關(guān)聯(lián)規(guī)則挖掘等任務(wù)。

比如,K均值聚類、主成分分析(PCA)和關(guān)聯(lián)規(guī)則挖掘都是常見的無監(jiān)督學(xué)習(xí)算法。

如果對(duì)無監(jiān)督學(xué)習(xí)的基本概念還不太清楚的,推薦我上一篇寫的《現(xiàn)在入門“AI無監(jiān)督學(xué)習(xí)”還來得及(9000字干貨)》,和本篇有相關(guān)聯(lián)之處,一起看看有助于加深理解。

【半監(jiān)督學(xué)習(xí)算法】

半監(jiān)督學(xué)習(xí)算法通常會(huì)結(jié)合監(jiān)督學(xué)習(xí)算法和無監(jiān)督學(xué)習(xí)算法的優(yōu)勢,利用同時(shí)包含有標(biāo)簽和無標(biāo)簽數(shù)據(jù)的訓(xùn)練集進(jìn)行模型訓(xùn)練。

這樣的組合允許算法在一部分?jǐn)?shù)據(jù)上學(xué)習(xí)有監(jiān)督的模式,又從未標(biāo)記的數(shù)據(jù)中學(xué)習(xí)無監(jiān)督的結(jié)構(gòu)。常見的半監(jiān)督學(xué)習(xí)算法包括半監(jiān)督支持向量機(jī)(SVM)、自訓(xùn)練(Self-training)和混合模型(Mixture Models)等。

【強(qiáng)化學(xué)習(xí)算法】

強(qiáng)化學(xué)習(xí)是一種通過與環(huán)境的交互來學(xué)習(xí)行為的方法,強(qiáng)化學(xué)習(xí)算法的核心思想是通過試錯(cuò)來學(xué)習(xí)。

在這種學(xué)習(xí)方式下,智能體嘗試通過不同的行為來觀察環(huán)境的反饋,選擇在不同狀態(tài)下采取動(dòng)作,而后進(jìn)行學(xué)習(xí)并優(yōu)化,目的就是實(shí)現(xiàn)最大化預(yù)期的總獎(jiǎng)勵(lì)。

一些經(jīng)典的強(qiáng)化學(xué)習(xí)算法包括Q-learning、Deep Q Network(DQN)、Policy Gradient等。

在本篇,我會(huì)重點(diǎn)說說無監(jiān)督學(xué)習(xí)的算法。在監(jiān)督學(xué)習(xí)的算法中,關(guān)于線性回歸部分,之前在《(萬字干貨)如何訓(xùn)練優(yōu)化“AI神經(jīng)網(wǎng)絡(luò)”模型?》中有提到,而半監(jiān)督學(xué)習(xí)和強(qiáng)化學(xué)習(xí)的相關(guān)內(nèi)容,我會(huì)在以后的文章中,再和大家娓娓道來。

2. 我們?yōu)槭裁葱枰惴?,價(jià)值幾何?

無監(jiān)督學(xué)習(xí)是機(jī)器學(xué)習(xí)的一種方法,算法就是實(shí)現(xiàn)無監(jiān)督學(xué)習(xí)的工具,更是無監(jiān)督學(xué)習(xí)的核心。無監(jiān)督學(xué)習(xí)的目標(biāo)是發(fā)現(xiàn)數(shù)據(jù)中的內(nèi)在關(guān)系,而算法的設(shè)計(jì)和選擇直接決定了這一目標(biāo)能否實(shí)現(xiàn)以及實(shí)現(xiàn)的效率和效果。

在無監(jiān)督學(xué)習(xí)中,算法的價(jià)值不言而喻,主要凸顯在以下幾處。

【數(shù)據(jù)探索與模式發(fā)現(xiàn)】

我們之前多次提到,無監(jiān)督學(xué)習(xí)可以發(fā)現(xiàn)數(shù)據(jù)中的潛在結(jié)構(gòu)和模式,幫助理解數(shù)據(jù)的內(nèi)在特性。

但我們從未細(xì)細(xì)推敲過,無監(jiān)督學(xué)習(xí)是如何發(fā)現(xiàn)數(shù)據(jù)中的結(jié)構(gòu)和模式的。而算法,就是開啟這個(gè)盲盒的鑰匙。數(shù)據(jù)探索與模式發(fā)現(xiàn)的全部奧秘,都在算法之中。

【數(shù)據(jù)預(yù)處理】

從我之前寫的幾篇關(guān)于數(shù)據(jù)集的文章中可知,我們?cè)贏I訓(xùn)練之前,需要對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,這是一個(gè)非常關(guān)鍵的步驟。

那么,問題又來了,我們?cè)撊绾胃咝瓿蓴?shù)據(jù)預(yù)處理的任務(wù)呢?答案是:善用算法。

比如,在實(shí)際情況中,我們拿到的初始數(shù)據(jù)往往包含缺失值、異常值或噪聲。而聚類或密度估計(jì)這類算法,可以幫助識(shí)別和處理這些不完整的或異常的數(shù)據(jù)點(diǎn),從而提高數(shù)據(jù)質(zhì)量。

【特征提取】

在特征提取方面,算法可以幫助識(shí)別數(shù)據(jù)中的重要特征,為后續(xù)的監(jiān)督學(xué)習(xí)任務(wù)或其他分析提供更有用的數(shù)據(jù)表示。就像考試前,已經(jīng)有一位學(xué)神幫你勾出了重要知識(shí)點(diǎn),助你逢考必過。

再有,像是降維算法,也是無監(jiān)督學(xué)習(xí)中常用的特征提取算法,它通過降低數(shù)據(jù)的維度,保留主要信息的同時(shí)減少冗余。這有助于簡化數(shù)據(jù)表示,提高計(jì)算效率,并減少過擬合的風(fēng)險(xiǎn)。

【降低標(biāo)注成本】

通俗點(diǎn)說,算法還有一大價(jià)值,就是省錢省時(shí)省人力。在傳統(tǒng)的監(jiān)督學(xué)習(xí)中,模型的訓(xùn)練通常需要大量帶有標(biāo)簽的數(shù)據(jù),而這一標(biāo)注過程既費(fèi)時(shí)又費(fèi)力。

無監(jiān)督學(xué)習(xí)之所以能夠在大多數(shù)情況下利用未標(biāo)注的大規(guī)模數(shù)據(jù)進(jìn)行訓(xùn)練,是因?yàn)樗惴ㄔ诒澈笃鹬P(guān)鍵作用。

特別是當(dāng)我們要涉足一個(gè)新領(lǐng)域時(shí),獲取足夠數(shù)量的標(biāo)注數(shù)據(jù)可能是一項(xiàng)昂貴且耗時(shí)的工程。這該如何解決?答案還是:善用算法。

我們通常會(huì)讓算法先在一個(gè)相關(guān)領(lǐng)域進(jìn)行無監(jiān)督學(xué)習(xí),這樣AI模型就可以學(xué)到通用的特征和表示,就可以減少對(duì)于新領(lǐng)域標(biāo)注數(shù)據(jù)的需求,也就有效地降低了在新任務(wù)上進(jìn)行標(biāo)注所需的成本,加速了模型的部署和應(yīng)用。

縱觀算法價(jià)值,我總結(jié)了4個(gè)方面,分別是“數(shù)據(jù)探索與模式發(fā)現(xiàn)”、“數(shù)據(jù)預(yù)處理”、“特征提取”和“降低標(biāo)注成本”。也許還有不完善之處,但力求可以幫助各位看官理解算法的重要性,即便只獲一二,都值得歡喜。

二、聚類算法

1. 聚類算法的基本概念

在無監(jiān)督學(xué)習(xí)中,聚類算法是一類將數(shù)據(jù)集分成若干個(gè)群組的算法。這些群組稱為“簇”。每個(gè)簇內(nèi)的數(shù)據(jù)點(diǎn)彼此之間相似度較高,而不同簇的數(shù)據(jù)點(diǎn)相似度較低。

聚類算法要做的就是,在沒有任何預(yù)先標(biāo)注的情況下,將相似的數(shù)據(jù)點(diǎn)歸為一簇,將不相似的數(shù)據(jù)點(diǎn)劃分到不同的簇中。

基于聚類算法,我們可以更容易地理解數(shù)據(jù)的分布、發(fā)現(xiàn)數(shù)據(jù)中的異常值,解決數(shù)據(jù)壓縮、圖像分割、市場細(xì)分等各類問題。

常見的聚類算法包括:K均值聚類(K-Means Clustering)、層次聚類(Hierarchical Clustering)、DBSCAN(Density-Based Spatial Clustering of Applications with Noise)、高斯混合模型(Gaussian Mixture Model,GMM)等。

其中,K均值聚類算法(通常稱為K-means算法)的早期版本由Stuart Lloyd在1957年提出。他的研究是為了優(yōu)化通信系統(tǒng)中的信號(hào)傳輸。

后來,該算法被MacQueen在1967年重新發(fā)現(xiàn),他將其用于數(shù)據(jù)分析領(lǐng)域。MacQueen在他的論文中正式描述了K-means算法,并首次使用了“K-means”這個(gè)名稱。

層次聚類的概念最早由J.L. Ward于1963年提出,該方法特別關(guān)注于最小化整個(gè)數(shù)據(jù)集的總方差,通過這種方式來形成層次聚類的結(jié)構(gòu)。

而DBSCAN,首次出現(xiàn)在1996年的論文中,由Martin Ester等人共同提出的。它能夠在有噪聲的數(shù)據(jù)集中發(fā)現(xiàn)任意形狀的簇,并且能夠識(shí)別并處理噪聲點(diǎn)。

至于高斯混合模型,有著更早的演進(jìn)過程,其概念可以追溯到19世紀(jì),但具體由誰提出就不得而知了。

本篇,我們就重點(diǎn)來說說聚類算法中的K均值聚類和層次聚類。

2. K均值聚類(K-Means Clustering)

K均值聚類(K-Means Clustering)是一種經(jīng)典的聚類算法,其基本原理是將數(shù)據(jù)點(diǎn)分為K個(gè)簇,每個(gè)簇由簇中心(通常是簇內(nèi)所有點(diǎn)的均值)表示。

所以,K-Means算法涉及到簇中心的計(jì)算,對(duì)于第i個(gè)簇,其簇中心(質(zhì)心)的計(jì)算公式為:

K均值聚類的目標(biāo)是最小化簇內(nèi)平方誤差,即找到K個(gè)簇,使每個(gè)數(shù)據(jù)點(diǎn)與其所屬簇中心的距離之和最小。目標(biāo)函數(shù)的數(shù)學(xué)公式是:

從公式可見,E值越小則簇內(nèi)數(shù)據(jù)(樣本)相似度越高。K-Means算法通過迭代更新簇中心,不斷優(yōu)化這個(gè)目標(biāo)函數(shù),來達(dá)到更好的聚類效果。

現(xiàn)在,我們已知數(shù)學(xué)公式,可以進(jìn)一步了解K-Means算法是如何實(shí)現(xiàn)迭代優(yōu)化的?

  1. K-Means算法是在不斷迭代中找到最優(yōu)解的,大致步驟如下:
  2. 初始化:隨機(jī)選擇K個(gè)數(shù)據(jù)點(diǎn)作為初始簇中心。
  3. 分配數(shù)據(jù)點(diǎn):對(duì)于數(shù)據(jù)集中的每個(gè)數(shù)據(jù)點(diǎn),計(jì)算其與各個(gè)簇中心的距離,并將其分配到距離最近的簇中心所在的簇。
  4. 更新簇中心:計(jì)算每個(gè)簇內(nèi)所有數(shù)據(jù)點(diǎn)的均值(或其它形式的中心),將其作為新的簇中心。這個(gè)均值可以是算術(shù)平均值、幾何平均值、中位數(shù)等。
  5. 重新計(jì)算誤差:重新計(jì)算每個(gè)簇內(nèi)數(shù)據(jù)點(diǎn)到簇中心的距離,并計(jì)算總的平方誤差。
  6. 迭代:重復(fù)步驟(2)—(4),直到滿足停止條件。停止條件可以是簇中心的變化小于某個(gè)閾值,或是達(dá)到預(yù)設(shè)的最大迭代次數(shù),又或是誤差函數(shù)的減少小于某個(gè)值。

從K-Means算法的步驟中,我們能發(fā)現(xiàn)該算法對(duì)初始簇中心的選擇敏感,不同的初始中心可能導(dǎo)致完全不同的聚類結(jié)果。

3. K均值聚類算法能解決什么問題?

我們不能讓算法只停留在理論層面,我們還需要讓K-Means算法可以解決一些實(shí)際問題。

在實(shí)際場景中,K-Means算法可以解決聚類問題,通俗點(diǎn)說,可以幫我們完成大量數(shù)據(jù)的分類任務(wù)。比如:市場細(xì)分、圖像分割、文檔分組、異常檢測或者數(shù)據(jù)壓縮等。

【K-Means算法-客戶分群】

假設(shè)公司的CRM系統(tǒng)中有大量的客戶交易信息,比如購買時(shí)間、購買金額、購買頻率、購買商品類型等。我們的目標(biāo)是根據(jù)這些數(shù)據(jù)將客戶分為不同的群體,以便更好地定制營銷策略。

這時(shí)候采用K-Means算法就可以高效解決這個(gè)問題。

最開始,我們需要從CRM系統(tǒng)中提取相關(guān)的客戶交易信息,做好數(shù)據(jù)準(zhǔn)備。原始數(shù)據(jù)的數(shù)量和質(zhì)量是影響最終目標(biāo)成敗的關(guān)鍵。

然后,我們需要對(duì)提取到的數(shù)據(jù)進(jìn)行預(yù)處理。對(duì)數(shù)據(jù)進(jìn)行清洗,處理缺失值、異常值,并可能進(jìn)行歸一化或標(biāo)準(zhǔn)化處理,以便于算法能夠更好地處理這些數(shù)據(jù)。

K-Means算法需要預(yù)先指定簇的數(shù)量K,我們需要選擇合適的K值??梢試L試不同的K值,并使用如肘部法則(Elbow Method)或輪廓系數(shù)(Silhouette Score)來完成選擇。

然后是初始化簇中心。隨機(jī)選擇K個(gè)數(shù)據(jù)點(diǎn)作為初始簇中心,再使用選擇的 K 值執(zhí)行 K-Means 算法,將客戶分為 K 個(gè)簇,每個(gè)簇代表一個(gè)客戶群體。執(zhí)行K-Means算法的過程中會(huì)涉及到多次的更新迭代。

此后,我們需要評(píng)估聚類結(jié)果,還需要對(duì)每個(gè)簇進(jìn)行分析,了解每個(gè)客戶群體的特征。這可能涉及到購買習(xí)慣、活躍度、商品偏好等方面的特征,還可以使用可視化工具展示每個(gè)簇的特征分布。

當(dāng)我們一旦確定了最佳的聚類結(jié)果,就可以根據(jù)不同的客戶群體制定個(gè)性化的營銷策略。例如,對(duì)高價(jià)值客戶采取個(gè)性化服務(wù),對(duì)潛在回流客戶采取促銷活動(dòng),對(duì)頻繁購買的客戶群提供額外獎(jiǎng)勵(lì)等。

在整個(gè)假設(shè)案例的過程中,我們可以發(fā)現(xiàn)K-Means算法落地到實(shí)際應(yīng)用場景中,能解決什么樣的問題。

我們可以利用K-Means算法對(duì)客戶交易數(shù)據(jù)進(jìn)行聚類,從而實(shí)現(xiàn)客戶群體的細(xì)分,幫助公司高層和市場銷售人員更好地理解客戶群體,市場部門可以制定更加精準(zhǔn)和有效的營銷策略,提高公司ROI,提高客戶滿意度,提高公司業(yè)務(wù)效益。

4. 層次聚類(Hierarchical Clustering)

層次聚類算法(Hierarchical Clustering)是一種基于數(shù)據(jù)點(diǎn)之間的相似性進(jìn)行聚類的算法。與K-Means算法不同,層次聚類不需要預(yù)先指定簇的數(shù)量,它通過逐步合并或分裂現(xiàn)有的簇來構(gòu)建一個(gè)簇的層次結(jié)構(gòu)。

根據(jù)數(shù)據(jù)集的劃分是“自底向上”的聚合策略,還是“自頂而下”的分拆策略,層次聚類算法可以進(jìn)一步分為凝聚的層次聚類算法AGNES(AGglomerative NESting)和分裂的層次聚類算法DIANA(DIvisive ANAlysis)。

初始時(shí),AGNES將每個(gè)對(duì)象自成一簇,之后這些簇依照某一種準(zhǔn)則逐步合并。DIANA則以相反的方法處理,初始時(shí)將所有對(duì)象歸為同一類簇,然后依據(jù)某種原則將該簇逐漸分裂。

層次聚類算法要比K均值聚類算法復(fù)雜,不依賴于一個(gè)單一的數(shù)學(xué)公式,而是通過一系列的步驟來構(gòu)建一個(gè)簇的層次結(jié)構(gòu)。

其中,凝聚的層次聚類算法AGNES的實(shí)現(xiàn)步驟是:

1)初始化:將每個(gè)數(shù)據(jù)點(diǎn)視為一個(gè)初始的單獨(dú)的簇。

2)計(jì)算簇間距離:計(jì)算所有簇之間的距離或相似度。通常使用最短連接(Single Linkage)或最長連接(Complete Linkage)來衡量簇之間的距離。

最短連接是指兩個(gè)簇中最近的兩個(gè)點(diǎn)之間的距離,而最長連接是指兩個(gè)簇中最遠(yuǎn)的兩個(gè)點(diǎn)之間的距離。

3)合并最相似的簇:找到距離(相似度)最小的兩個(gè)簇,將它們合并成一個(gè)新的簇。

4)更新距離矩陣:合并兩個(gè)簇后,需要更新距離矩陣,以反映新合并的簇與其他簇之間的距離。主要表現(xiàn)在刪除合并的簇之間的距離,并更新剩余簇之間的距離。

5)迭代:反復(fù)執(zhí)行步驟(3)和(4),直到所有數(shù)據(jù)點(diǎn)被合并成一個(gè)大簇或滿足某個(gè)停止準(zhǔn)則。

6)形成簇樹:最終,通過逐步合并相似的簇,形成一個(gè)簇的層次結(jié)構(gòu),稱為簇樹。在簇樹中,每個(gè)節(jié)點(diǎn)代表一個(gè)簇,節(jié)點(diǎn)之間的邊表示兩個(gè)簇之間的距離。

AGNES這種自底向上的策略,從每個(gè)數(shù)據(jù)點(diǎn)開始,逐步將相似的簇合并,最終形成一個(gè)包含所有數(shù)據(jù)點(diǎn)的大簇。而且,它能夠構(gòu)建一個(gè)簇的層次結(jié)構(gòu),可以反映簇之間的關(guān)系和數(shù)據(jù)點(diǎn)的層次分布。

與AGNES相反,分裂的層次聚類算法DIANA的實(shí)現(xiàn)步驟是:

1)初始化:將所有數(shù)據(jù)點(diǎn)作為一個(gè)初始的單獨(dú)的簇。

2)選擇簇分裂點(diǎn):在當(dāng)前簇中選擇一個(gè)數(shù)據(jù)點(diǎn)作為分裂點(diǎn)。通過計(jì)算當(dāng)前簇中各個(gè)特征的方差,選擇具有最大方差的特征作為分裂點(diǎn)。也可以基于數(shù)據(jù)點(diǎn)的統(tǒng)計(jì)特性來選擇,比如選擇當(dāng)前簇中最小值或最大值作為分裂點(diǎn)。

選擇分裂點(diǎn)的策略會(huì)影響最終的聚類結(jié)果,因此需要根據(jù)具體的數(shù)據(jù)集和應(yīng)用場景來選擇最合適的策略。

3)分裂簇:根據(jù)選定的分裂點(diǎn),將當(dāng)前簇分裂成兩個(gè)子簇,形成一個(gè)新的層次結(jié)構(gòu)。一個(gè)子簇包含所有小于或等于分裂點(diǎn)的數(shù)據(jù)點(diǎn),另一個(gè)子簇包含所有大于分裂點(diǎn)的數(shù)據(jù)點(diǎn)。

4)迭代:重復(fù)步驟(2)和(3),直到滿足停止條件。停止條件可以是達(dá)到預(yù)設(shè)的迭代次數(shù)、簇的大小小于某個(gè)閾值,或者簇的分裂不再產(chǎn)生顯著的改進(jìn)等。

5)形成簇樹:迭代結(jié)束后,DIANA 生成一個(gè)層次樹,也就是簇的層次結(jié)構(gòu),稱為簇樹。該樹反映了分裂過程,每個(gè)節(jié)點(diǎn)表示一個(gè)簇。

DIANA算法采用的是自頂向下的遞歸分裂策略,不是AGNES那樣的自底向上的合并策略。由于其在每個(gè)階段選擇分裂,逐步細(xì)化聚類結(jié)構(gòu),因此也被稱為“分而治之”的聚類算法。

從算法特性中我們可以發(fā)現(xiàn),DIANA適用于相對(duì)小型的數(shù)據(jù)集,因?yàn)樵诿恳徊蕉夹枰?jì)算所有簇對(duì)之間的相異度,如果數(shù)據(jù)規(guī)模較大,計(jì)算復(fù)雜度就會(huì)變高,效率就會(huì)降低。

5. 層次聚類算法能解決什么問題?

紙上得來終覺淺,絕知此事要躬行。當(dāng)面對(duì)實(shí)際問題時(shí),層次聚類算法能發(fā)揮什么作用?

接下來,我們分別就AGNES算法和DIANA算法的原理,一起來看看應(yīng)用場景中的假設(shè)案例,從案例中進(jìn)一步知曉它們能解決哪些問題。

【AGNES算法-文檔分類】

AGNES算法可以解決文檔分類的問題,比如將相似的文檔歸為一類。

假設(shè)公司的文件管理系統(tǒng)中有大量的文檔數(shù)據(jù),需要我們?cè)谧疃痰臅r(shí)間內(nèi)完成文檔的歸類工作。在文檔種類繁多,文檔數(shù)量龐大的情況下,我們就可以用AGNES算法來解決。

第一步就是數(shù)據(jù)準(zhǔn)備,我們要先從文件管理系統(tǒng)中提取相關(guān)的文檔數(shù)據(jù),包括文檔的內(nèi)容、關(guān)鍵詞、作者、創(chuàng)建時(shí)間、文件格式等。

然后,對(duì)提取的文檔數(shù)據(jù)進(jìn)行清洗,便于算法能夠更好地處理這些數(shù)據(jù)。

再然后,確定衡量文檔相似性的方法,常用的包括余弦相似度、歐氏距離等。選擇適當(dāng)?shù)南嗨贫榷攘糠椒ㄓ兄诰垲愃惴ǜ玫刈R(shí)別相似文檔。

接下來,將每個(gè)文檔視為一個(gè)單獨(dú)的簇,或者隨機(jī)選擇一些文檔作為初始簇中心。完成初始化聚類的操作。

接下來的幾步,都是AGNES算法的迭代步驟,上一段有說過,這里可以簡單跳過,簡單來說,要做的就是“計(jì)算相似性—合并相似度最高的兩個(gè)簇—反復(fù)迭代—確定最終聚類”。

執(zhí)行完AGNES算法后,我們要對(duì)聚類結(jié)果進(jìn)行分析,檢查每個(gè)簇內(nèi)的文檔是否具有相似的主題或內(nèi)容。根據(jù)需要,我們可以做一些優(yōu)化,比如,調(diào)整算法參數(shù)或特征表示等。

最后,我們將文檔按照聚類結(jié)果進(jìn)行管理,就可以更方便地查找和理解文檔內(nèi)容。若有需要,也可以基于文檔的聚類結(jié)果進(jìn)行進(jìn)一步的分析和決策。

【DIANA算法-學(xué)情分析】

如果在教育行業(yè),DIANA算法可以用于進(jìn)行細(xì)粒度的學(xué)情分析,給學(xué)生提供個(gè)性化的學(xué)科輔導(dǎo)和支持。

假設(shè)一所學(xué)校想要深入地了解并分析學(xué)生的學(xué)習(xí)情況,想知道學(xué)生是否達(dá)到了現(xiàn)階段的教學(xué)目標(biāo),還要了解學(xué)生的考試成績、作業(yè)完成質(zhì)量、課堂表現(xiàn)等。通過DIANA算法可以解決這類問題。

照例,所有和算法相關(guān)的工作,數(shù)據(jù)收集都是首先要做的事情。我們要收集學(xué)生的學(xué)習(xí)數(shù)據(jù),包括考試成績、作業(yè)完成情況、課堂表現(xiàn)、參與討論的頻率和質(zhì)量、學(xué)習(xí)資源的使用情況等。

然后是數(shù)據(jù)預(yù)處理,也就是對(duì)收集的數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗。包括去除異常值、處理缺失數(shù)據(jù)、標(biāo)準(zhǔn)化或歸一化數(shù)據(jù)等。

拿著預(yù)處理后的數(shù)據(jù),我們就可以使用DIANA算法對(duì)學(xué)生的學(xué)情數(shù)據(jù)進(jìn)行聚類。算法的執(zhí)行過程中需要進(jìn)行反復(fù)迭代。

在每次迭代中,算法會(huì)找到在當(dāng)前簇中具有最大或最小特征值(如考試分?jǐn)?shù)、作業(yè)完成率等)的學(xué)生,并將其作為分裂點(diǎn),將當(dāng)前簇分裂成兩個(gè)子簇。

迭代完成后,DIANA算法會(huì)形成一個(gè)簇的層次結(jié)構(gòu),將學(xué)生分為不同的層次群體,每個(gè)群體代表了一組具有相似學(xué)情特征的學(xué)生,通過分析每個(gè)簇的特征,我們可以識(shí)別出影響學(xué)生學(xué)情的關(guān)鍵因素,如學(xué)習(xí)習(xí)慣、學(xué)習(xí)資源的使用、課堂參與度等。

最后,在DIANA算法的幫助下,我們可以為不同群體的學(xué)生提供個(gè)性化的學(xué)習(xí)支持,如制定個(gè)性化的教學(xué)策略、提供針對(duì)性的教材和輔導(dǎo)、采用符合學(xué)生自身特點(diǎn)的教學(xué)方法等。

通過以上的假設(shè)案例,我們不難發(fā)現(xiàn),層次聚類算法在實(shí)際場景中能幫助我們解決不少問題。

其中,AGNES算法能夠?qū)⑾嗨频奈臋n歸為一類,從而解決文檔分類的問題,有利于公司管理大量的文檔數(shù)據(jù),提高文檔檢索的效率。

與其對(duì)應(yīng)的,DIANA算法可以基于學(xué)生的學(xué)習(xí)數(shù)據(jù),幫助老師們了解學(xué)生的學(xué)習(xí)情況,為學(xué)生提供個(gè)性化的學(xué)科輔導(dǎo),幫助學(xué)生克服學(xué)習(xí)困難。擁有了這樣的學(xué)情數(shù)據(jù),學(xué)生的學(xué)習(xí)成績提升,老師教學(xué)質(zhì)量的提高,那都是遲早的事情。

三、總結(jié)與預(yù)告

在現(xiàn)在的信息爆炸時(shí)代,數(shù)據(jù)已經(jīng)成為了我們生活和工作中不可或缺的一部分,我們需要更有效方法來處理海量的數(shù)據(jù),特別是在AI領(lǐng)域。

而人工智能算法不僅可以提高我們的工作效率,還能幫助我們做出更準(zhǔn)確的決策。

本篇重點(diǎn)介紹了聚類算法中的K均值聚類算法和層次聚類算法。我們從基本概念說起,聊到算法實(shí)現(xiàn)的步驟,通過假設(shè)案例帶入實(shí)際場景,將算法從書本中拉到現(xiàn)實(shí)世界中,看看算法能幫我們解決哪些問題。

比如,K均值聚類算法可以將客戶分為不同的群體,能幫助企業(yè)更好地了解客戶,制定更有效的營銷策略。

層次聚類算法中的AGNES算法可以將相似的文檔歸為一類,幫助企業(yè)更好地管理和分析文檔。DIANA算法可以完成學(xué)情分析,幫助學(xué)?;蚪逃龣C(jī)構(gòu)更好地了解學(xué)生的學(xué)習(xí)情況,制定更有效的教學(xué)策略。

最后,簡單預(yù)告一下,無監(jiān)督學(xué)習(xí)的內(nèi)容還未結(jié)束,后續(xù)的篇章我會(huì)繼續(xù)和大家聊聊關(guān)于無監(jiān)督學(xué)習(xí)降維算法、落地場景和相關(guān)案例等。

AI真的很有意思,如果你也喜歡,那就一起吧。

作者:果釀,公眾號(hào):果釀產(chǎn)品說

本文由 @果釀 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于CC0協(xié)議。

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!