8000字詳解“聚類算法”,從理論實現到案例說明
算法可以說是AI技術的核心,想入門AI的同學,了解一些算法知識是很有必要的。這篇文章里,作者就介紹并梳理分析了AI無監督學習中的聚類算法,一起來看看其工作原理和應用場景吧。
各位看官:
歡迎一起探索AI的世界。就在開年的2月21日,國務院國資委召開中央企業人工智能專題推進會扎實推動AI賦能產業煥新,這一消息在國務院國有資產監督管理委員會官網上公布,國家隊的重視也是全民擁抱AI的大好時機。
OpenAI和Sora掀起了一股全民科技熱潮,又加之當前經濟需要新的科技和新的需求來推動市場發展,原因很多,錯綜復雜。但無論是因為什么,擁抱AI都會成為當今互聯網從業人員的不二選擇。
現如今,大家都多多少少知道一些AI,特別是一些AI應用的名稱,但論及AI的技術原理,并非人人皆知。當然,大部分人也不需要知道背后的原理,就像我們去餐廳吃飯時,會盡情品嘗菜肴的美味但不一定需要知道每樣食材的品種和產地。
那么,哪一類人群需要在擁抱AI的浪潮中還需習得AI的技術原理呢?
是原互聯網行業要轉型AI行業的一批人,或者剛畢業要進入AI行業的新手小白,這些人是市場上新誕生的一群AI從業人員,也正是這些人,將有更大的機會在AI行業創造出新的社會價值。
互聯網科技人員是市場上最早一批接觸AI的人,在OpenAI還未火遍全球之前,就已經有一批人在一些細分領域做著AI相關的工作,只不過那時候的AI市場還沒那么大。
而且那時候,互聯網領域無論是C端還是B端都存在著大量的市場機會,大量的市場需求未被滿足,就算不涉及AI,無論是個人還是公司,都有著巨大的增長空間。
但是現在,一切都在改變,擁抱變化將是我們面對市場不確定性的主要節奏,原互聯網從業人員,上至大廠下至小初創公司,都不能固守著原先互聯網模式的一畝三分地,止步不前只會將自己圈禁待死。
所以說,無論是想轉型AI,還是新手入門AI,都必須具備AI領域一定程度的專業能力。為了了解AI,我們可以去學習如何操作市面上的AI工具,把現今流行的文生文,文生圖,文生視頻都玩一個遍。
但重點是,我們在體驗之余,也要靜下心來想想,如果想在AI這條路上走出自己的核心競爭力,僅僅會操作AI工具是否足以支撐自己走得穩,走得遠?
若想成為AI行業中有獨特競爭力的一員,首要就是打好AI基本功。形成這個觀點,不僅是基于我在互聯網多年的從業經驗,也是基于國內外大量公司和個人的成功案例。
也許功能或產品會被借鑒,人才會被挖走,但有些競爭力形成的護城河,就算公開于眾,也是奪不走的,這就是真正的實力,背后也是因為有著扎實的基本功做支撐。
入門AI,無論從哪個角度切入,都要先克服畏難情緒,日拱一卒,一步一腳印地磨練AI基本功。我們從AI的專業知識開始,逐步構建自身的核心競爭力。
本章要說的主要內容就是AI無監督學習中的算法。算法是AI技術的核心。了解算法對于提高AI應用的性能和效率至關重要。
類似ChatGPT,背后的算法能夠從數據中學習并生成新的內容,我們需要了解這些AI算法的工作原理和應用方式,以便更好地將它們融入自己的產品和業務中。
全文8000字左右,預計閱讀時間15分鐘,若是碎片時間不夠,建議先收藏后看,便于找回。
照例,開篇提供本篇文章的目錄大綱,方便大家在閱讀前總攬全局,對內容框架有預先了解。
一、無監督學習算法
1. 算法是什么,能吃嗎?
哈哈,開個小玩笑,算法當然不能吃了。算法是一系列定義明確的操作步驟,用于解決特定問題或完成特定任務。
我們常見的算法通常指的是計算機科學中的一個概念,它涉及到數據的處理、轉換和計算,用于實現某個目標或解決某個問題。
也可以簡單理解成,算法是通過數據來解決問題的一種工具。往小了說,像四則運算、定理公式都可以稱之為算法。嗯,1+1=2,也是一種算法。所以,算法并沒有我們以為的那么高深莫測。
在AI和機器學習領域,算法被設計用于從數據中學習、發現模式、做出預測或執行決策,而無需顯式的編程。
算法可以是簡單的,比如排序一組數字,也可以是復雜的,比如識別圖像中的對象或理解自然語言文本。在AI領域,算法被用來處理人力所不及的領域,像“1+1=2”這類的問題,就犯不著用上算法啦。
算法概念很廣,我們主要圍繞機器學習中的算法展開討論。在機器學習中,算法通常分為以下幾類:
【監督學習算法】
監督學習算法通過使用已標記的訓練數據(輸入和相應的輸出)來學習模型。通過建立一個從輸入到輸出的映射,讓模型能夠對新的未標記數據進行預測。
常見的監督學習算法包括線性回歸、決策樹、支持向量機等。
【無監督學習算法】
無監督學習算法則需要在沒有明確標簽的情況下從數據中學習結構和模式。這類算法主要用于聚類、降維和關聯規則挖掘等任務。
比如,K均值聚類、主成分分析(PCA)和關聯規則挖掘都是常見的無監督學習算法。
如果對無監督學習的基本概念還不太清楚的,推薦我上一篇寫的《現在入門“AI無監督學習”還來得及(9000字干貨)》,和本篇有相關聯之處,一起看看有助于加深理解。
【半監督學習算法】
半監督學習算法通常會結合監督學習算法和無監督學習算法的優勢,利用同時包含有標簽和無標簽數據的訓練集進行模型訓練。
這樣的組合允許算法在一部分數據上學習有監督的模式,又從未標記的數據中學習無監督的結構。常見的半監督學習算法包括半監督支持向量機(SVM)、自訓練(Self-training)和混合模型(Mixture Models)等。
【強化學習算法】
強化學習是一種通過與環境的交互來學習行為的方法,強化學習算法的核心思想是通過試錯來學習。
在這種學習方式下,智能體嘗試通過不同的行為來觀察環境的反饋,選擇在不同狀態下采取動作,而后進行學習并優化,目的就是實現最大化預期的總獎勵。
一些經典的強化學習算法包括Q-learning、Deep Q Network(DQN)、Policy Gradient等。
在本篇,我會重點說說無監督學習的算法。在監督學習的算法中,關于線性回歸部分,之前在《(萬字干貨)如何訓練優化“AI神經網絡”模型?》中有提到,而半監督學習和強化學習的相關內容,我會在以后的文章中,再和大家娓娓道來。
2. 我們為什么需要算法,價值幾何?
無監督學習是機器學習的一種方法,算法就是實現無監督學習的工具,更是無監督學習的核心。無監督學習的目標是發現數據中的內在關系,而算法的設計和選擇直接決定了這一目標能否實現以及實現的效率和效果。
在無監督學習中,算法的價值不言而喻,主要凸顯在以下幾處。
【數據探索與模式發現】
我們之前多次提到,無監督學習可以發現數據中的潛在結構和模式,幫助理解數據的內在特性。
但我們從未細細推敲過,無監督學習是如何發現數據中的結構和模式的。而算法,就是開啟這個盲盒的鑰匙。數據探索與模式發現的全部奧秘,都在算法之中。
【數據預處理】
從我之前寫的幾篇關于數據集的文章中可知,我們在AI訓練之前,需要對數據進行預處理,這是一個非常關鍵的步驟。
那么,問題又來了,我們該如何高效完成數據預處理的任務呢?答案是:善用算法。
比如,在實際情況中,我們拿到的初始數據往往包含缺失值、異常值或噪聲。而聚類或密度估計這類算法,可以幫助識別和處理這些不完整的或異常的數據點,從而提高數據質量。
【特征提取】
在特征提取方面,算法可以幫助識別數據中的重要特征,為后續的監督學習任務或其他分析提供更有用的數據表示。就像考試前,已經有一位學神幫你勾出了重要知識點,助你逢考必過。
再有,像是降維算法,也是無監督學習中常用的特征提取算法,它通過降低數據的維度,保留主要信息的同時減少冗余。這有助于簡化數據表示,提高計算效率,并減少過擬合的風險。
【降低標注成本】
通俗點說,算法還有一大價值,就是省錢省時省人力。在傳統的監督學習中,模型的訓練通常需要大量帶有標簽的數據,而這一標注過程既費時又費力。
無監督學習之所以能夠在大多數情況下利用未標注的大規模數據進行訓練,是因為算法在背后起著關鍵作用。
特別是當我們要涉足一個新領域時,獲取足夠數量的標注數據可能是一項昂貴且耗時的工程。這該如何解決?答案還是:善用算法。
我們通常會讓算法先在一個相關領域進行無監督學習,這樣AI模型就可以學到通用的特征和表示,就可以減少對于新領域標注數據的需求,也就有效地降低了在新任務上進行標注所需的成本,加速了模型的部署和應用。
縱觀算法價值,我總結了4個方面,分別是“數據探索與模式發現”、“數據預處理”、“特征提取”和“降低標注成本”。也許還有不完善之處,但力求可以幫助各位看官理解算法的重要性,即便只獲一二,都值得歡喜。
二、聚類算法
1. 聚類算法的基本概念
在無監督學習中,聚類算法是一類將數據集分成若干個群組的算法。這些群組稱為“簇”。每個簇內的數據點彼此之間相似度較高,而不同簇的數據點相似度較低。
聚類算法要做的就是,在沒有任何預先標注的情況下,將相似的數據點歸為一簇,將不相似的數據點劃分到不同的簇中。
基于聚類算法,我們可以更容易地理解數據的分布、發現數據中的異常值,解決數據壓縮、圖像分割、市場細分等各類問題。
常見的聚類算法包括: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年提出。他的研究是為了優化通信系統中的信號傳輸。
后來,該算法被MacQueen在1967年重新發現,他將其用于數據分析領域。MacQueen在他的論文中正式描述了K-means算法,并首次使用了“K-means”這個名稱。
層次聚類的概念最早由J.L. Ward于1963年提出,該方法特別關注于最小化整個數據集的總方差,通過這種方式來形成層次聚類的結構。
而DBSCAN,首次出現在1996年的論文中,由Martin Ester等人共同提出的。它能夠在有噪聲的數據集中發現任意形狀的簇,并且能夠識別并處理噪聲點。
至于高斯混合模型,有著更早的演進過程,其概念可以追溯到19世紀,但具體由誰提出就不得而知了。
本篇,我們就重點來說說聚類算法中的K均值聚類和層次聚類。
2. K均值聚類(K-Means Clustering)
K均值聚類(K-Means Clustering)是一種經典的聚類算法,其基本原理是將數據點分為K個簇,每個簇由簇中心(通常是簇內所有點的均值)表示。
所以,K-Means算法涉及到簇中心的計算,對于第i個簇,其簇中心(質心)的計算公式為:
K均值聚類的目標是最小化簇內平方誤差,即找到K個簇,使每個數據點與其所屬簇中心的距離之和最小。目標函數的數學公式是:
從公式可見,E值越小則簇內數據(樣本)相似度越高。K-Means算法通過迭代更新簇中心,不斷優化這個目標函數,來達到更好的聚類效果。
現在,我們已知數學公式,可以進一步了解K-Means算法是如何實現迭代優化的?
- K-Means算法是在不斷迭代中找到最優解的,大致步驟如下:
- 初始化:隨機選擇K個數據點作為初始簇中心。
- 分配數據點:對于數據集中的每個數據點,計算其與各個簇中心的距離,并將其分配到距離最近的簇中心所在的簇。
- 更新簇中心:計算每個簇內所有數據點的均值(或其它形式的中心),將其作為新的簇中心。這個均值可以是算術平均值、幾何平均值、中位數等。
- 重新計算誤差:重新計算每個簇內數據點到簇中心的距離,并計算總的平方誤差。
- 迭代:重復步驟(2)—(4),直到滿足停止條件。停止條件可以是簇中心的變化小于某個閾值,或是達到預設的最大迭代次數,又或是誤差函數的減少小于某個值。
從K-Means算法的步驟中,我們能發現該算法對初始簇中心的選擇敏感,不同的初始中心可能導致完全不同的聚類結果。
3. K均值聚類算法能解決什么問題?
我們不能讓算法只停留在理論層面,我們還需要讓K-Means算法可以解決一些實際問題。
在實際場景中,K-Means算法可以解決聚類問題,通俗點說,可以幫我們完成大量數據的分類任務。比如:市場細分、圖像分割、文檔分組、異常檢測或者數據壓縮等。
【K-Means算法-客戶分群】
假設公司的CRM系統中有大量的客戶交易信息,比如購買時間、購買金額、購買頻率、購買商品類型等。我們的目標是根據這些數據將客戶分為不同的群體,以便更好地定制營銷策略。
這時候采用K-Means算法就可以高效解決這個問題。
最開始,我們需要從CRM系統中提取相關的客戶交易信息,做好數據準備。原始數據的數量和質量是影響最終目標成敗的關鍵。
然后,我們需要對提取到的數據進行預處理。對數據進行清洗,處理缺失值、異常值,并可能進行歸一化或標準化處理,以便于算法能夠更好地處理這些數據。
K-Means算法需要預先指定簇的數量K,我們需要選擇合適的K值??梢試L試不同的K值,并使用如肘部法則(Elbow Method)或輪廓系數(Silhouette Score)來完成選擇。
然后是初始化簇中心。隨機選擇K個數據點作為初始簇中心,再使用選擇的 K 值執行 K-Means 算法,將客戶分為 K 個簇,每個簇代表一個客戶群體。執行K-Means算法的過程中會涉及到多次的更新迭代。
此后,我們需要評估聚類結果,還需要對每個簇進行分析,了解每個客戶群體的特征。這可能涉及到購買習慣、活躍度、商品偏好等方面的特征,還可以使用可視化工具展示每個簇的特征分布。
當我們一旦確定了最佳的聚類結果,就可以根據不同的客戶群體制定個性化的營銷策略。例如,對高價值客戶采取個性化服務,對潛在回流客戶采取促銷活動,對頻繁購買的客戶群提供額外獎勵等。
在整個假設案例的過程中,我們可以發現K-Means算法落地到實際應用場景中,能解決什么樣的問題。
我們可以利用K-Means算法對客戶交易數據進行聚類,從而實現客戶群體的細分,幫助公司高層和市場銷售人員更好地理解客戶群體,市場部門可以制定更加精準和有效的營銷策略,提高公司ROI,提高客戶滿意度,提高公司業務效益。
4. 層次聚類(Hierarchical Clustering)
層次聚類算法(Hierarchical Clustering)是一種基于數據點之間的相似性進行聚類的算法。與K-Means算法不同,層次聚類不需要預先指定簇的數量,它通過逐步合并或分裂現有的簇來構建一個簇的層次結構。
根據數據集的劃分是“自底向上”的聚合策略,還是“自頂而下”的分拆策略,層次聚類算法可以進一步分為凝聚的層次聚類算法AGNES(AGglomerative NESting)和分裂的層次聚類算法DIANA(DIvisive ANAlysis)。
初始時,AGNES將每個對象自成一簇,之后這些簇依照某一種準則逐步合并。DIANA則以相反的方法處理,初始時將所有對象歸為同一類簇,然后依據某種原則將該簇逐漸分裂。
層次聚類算法要比K均值聚類算法復雜,不依賴于一個單一的數學公式,而是通過一系列的步驟來構建一個簇的層次結構。
其中,凝聚的層次聚類算法AGNES的實現步驟是:
1)初始化:將每個數據點視為一個初始的單獨的簇。
2)計算簇間距離:計算所有簇之間的距離或相似度。通常使用最短連接(Single Linkage)或最長連接(Complete Linkage)來衡量簇之間的距離。
最短連接是指兩個簇中最近的兩個點之間的距離,而最長連接是指兩個簇中最遠的兩個點之間的距離。
3)合并最相似的簇:找到距離(相似度)最小的兩個簇,將它們合并成一個新的簇。
4)更新距離矩陣:合并兩個簇后,需要更新距離矩陣,以反映新合并的簇與其他簇之間的距離。主要表現在刪除合并的簇之間的距離,并更新剩余簇之間的距離。
5)迭代:反復執行步驟(3)和(4),直到所有數據點被合并成一個大簇或滿足某個停止準則。
6)形成簇樹:最終,通過逐步合并相似的簇,形成一個簇的層次結構,稱為簇樹。在簇樹中,每個節點代表一個簇,節點之間的邊表示兩個簇之間的距離。
AGNES這種自底向上的策略,從每個數據點開始,逐步將相似的簇合并,最終形成一個包含所有數據點的大簇。而且,它能夠構建一個簇的層次結構,可以反映簇之間的關系和數據點的層次分布。
與AGNES相反,分裂的層次聚類算法DIANA的實現步驟是:
1)初始化:將所有數據點作為一個初始的單獨的簇。
2)選擇簇分裂點:在當前簇中選擇一個數據點作為分裂點。通過計算當前簇中各個特征的方差,選擇具有最大方差的特征作為分裂點。也可以基于數據點的統計特性來選擇,比如選擇當前簇中最小值或最大值作為分裂點。
選擇分裂點的策略會影響最終的聚類結果,因此需要根據具體的數據集和應用場景來選擇最合適的策略。
3)分裂簇:根據選定的分裂點,將當前簇分裂成兩個子簇,形成一個新的層次結構。一個子簇包含所有小于或等于分裂點的數據點,另一個子簇包含所有大于分裂點的數據點。
4)迭代:重復步驟(2)和(3),直到滿足停止條件。停止條件可以是達到預設的迭代次數、簇的大小小于某個閾值,或者簇的分裂不再產生顯著的改進等。
5)形成簇樹:迭代結束后,DIANA 生成一個層次樹,也就是簇的層次結構,稱為簇樹。該樹反映了分裂過程,每個節點表示一個簇。
DIANA算法采用的是自頂向下的遞歸分裂策略,不是AGNES那樣的自底向上的合并策略。由于其在每個階段選擇分裂,逐步細化聚類結構,因此也被稱為“分而治之”的聚類算法。
從算法特性中我們可以發現,DIANA適用于相對小型的數據集,因為在每一步都需要計算所有簇對之間的相異度,如果數據規模較大,計算復雜度就會變高,效率就會降低。
5. 層次聚類算法能解決什么問題?
紙上得來終覺淺,絕知此事要躬行。當面對實際問題時,層次聚類算法能發揮什么作用?
接下來,我們分別就AGNES算法和DIANA算法的原理,一起來看看應用場景中的假設案例,從案例中進一步知曉它們能解決哪些問題。
【AGNES算法-文檔分類】
AGNES算法可以解決文檔分類的問題,比如將相似的文檔歸為一類。
假設公司的文件管理系統中有大量的文檔數據,需要我們在最短的時間內完成文檔的歸類工作。在文檔種類繁多,文檔數量龐大的情況下,我們就可以用AGNES算法來解決。
第一步就是數據準備,我們要先從文件管理系統中提取相關的文檔數據,包括文檔的內容、關鍵詞、作者、創建時間、文件格式等。
然后,對提取的文檔數據進行清洗,便于算法能夠更好地處理這些數據。
再然后,確定衡量文檔相似性的方法,常用的包括余弦相似度、歐氏距離等。選擇適當的相似度度量方法有助于聚類算法更好地識別相似文檔。
接下來,將每個文檔視為一個單獨的簇,或者隨機選擇一些文檔作為初始簇中心。完成初始化聚類的操作。
接下來的幾步,都是AGNES算法的迭代步驟,上一段有說過,這里可以簡單跳過,簡單來說,要做的就是“計算相似性—合并相似度最高的兩個簇—反復迭代—確定最終聚類”。
執行完AGNES算法后,我們要對聚類結果進行分析,檢查每個簇內的文檔是否具有相似的主題或內容。根據需要,我們可以做一些優化,比如,調整算法參數或特征表示等。
最后,我們將文檔按照聚類結果進行管理,就可以更方便地查找和理解文檔內容。若有需要,也可以基于文檔的聚類結果進行進一步的分析和決策。
【DIANA算法-學情分析】
如果在教育行業,DIANA算法可以用于進行細粒度的學情分析,給學生提供個性化的學科輔導和支持。
假設一所學校想要深入地了解并分析學生的學習情況,想知道學生是否達到了現階段的教學目標,還要了解學生的考試成績、作業完成質量、課堂表現等。通過DIANA算法可以解決這類問題。
照例,所有和算法相關的工作,數據收集都是首先要做的事情。我們要收集學生的學習數據,包括考試成績、作業完成情況、課堂表現、參與討論的頻率和質量、學習資源的使用情況等。
然后是數據預處理,也就是對收集的數據進行數據清洗。包括去除異常值、處理缺失數據、標準化或歸一化數據等。
拿著預處理后的數據,我們就可以使用DIANA算法對學生的學情數據進行聚類。算法的執行過程中需要進行反復迭代。
在每次迭代中,算法會找到在當前簇中具有最大或最小特征值(如考試分數、作業完成率等)的學生,并將其作為分裂點,將當前簇分裂成兩個子簇。
迭代完成后,DIANA算法會形成一個簇的層次結構,將學生分為不同的層次群體,每個群體代表了一組具有相似學情特征的學生,通過分析每個簇的特征,我們可以識別出影響學生學情的關鍵因素,如學習習慣、學習資源的使用、課堂參與度等。
最后,在DIANA算法的幫助下,我們可以為不同群體的學生提供個性化的學習支持,如制定個性化的教學策略、提供針對性的教材和輔導、采用符合學生自身特點的教學方法等。
通過以上的假設案例,我們不難發現,層次聚類算法在實際場景中能幫助我們解決不少問題。
其中,AGNES算法能夠將相似的文檔歸為一類,從而解決文檔分類的問題,有利于公司管理大量的文檔數據,提高文檔檢索的效率。
與其對應的,DIANA算法可以基于學生的學習數據,幫助老師們了解學生的學習情況,為學生提供個性化的學科輔導,幫助學生克服學習困難。擁有了這樣的學情數據,學生的學習成績提升,老師教學質量的提高,那都是遲早的事情。
三、總結與預告
在現在的信息爆炸時代,數據已經成為了我們生活和工作中不可或缺的一部分,我們需要更有效方法來處理海量的數據,特別是在AI領域。
而人工智能算法不僅可以提高我們的工作效率,還能幫助我們做出更準確的決策。
本篇重點介紹了聚類算法中的K均值聚類算法和層次聚類算法。我們從基本概念說起,聊到算法實現的步驟,通過假設案例帶入實際場景,將算法從書本中拉到現實世界中,看看算法能幫我們解決哪些問題。
比如,K均值聚類算法可以將客戶分為不同的群體,能幫助企業更好地了解客戶,制定更有效的營銷策略。
層次聚類算法中的AGNES算法可以將相似的文檔歸為一類,幫助企業更好地管理和分析文檔。DIANA算法可以完成學情分析,幫助學校或教育機構更好地了解學生的學習情況,制定更有效的教學策略。
最后,簡單預告一下,無監督學習的內容還未結束,后續的篇章我會繼續和大家聊聊關于無監督學習降維算法、落地場景和相關案例等。
AI真的很有意思,如果你也喜歡,那就一起吧。
作者:果釀,公眾號:果釀產品說
本文由 @果釀 原創發布于人人都是產品經理,未經作者許可,禁止轉載。
題圖來自 Unsplash,基于CC0協議。
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
- 目前還沒評論,等你發揮!