導航:首頁 > 源碼編譯 > 聚類是一種預測演算法

聚類是一種預測演算法

發布時間:2023-01-23 04:29:23

❶ 數據挖掘中分類、預測、聚類的定義和區別。

sc-cpda 數據分析師公眾交流平台 詳細看我資料

區分是將目標類數據對象的一般特性與一個或多個對比類對象的一般特性進行比較。例如,具有高GPA 的學生的一般特性可被用來與具有低GPA 的一般特性比較。最終的描述可能是學生的一個一般可比較的輪廓,就像具有高GPA 的學生的75%是四年級計算機科學專業的學生,而具有低
GPA 的學生的65%不是。

關聯是指發現關聯規則,這些規則表示一起頻繁發生在給定數據集的特徵值的條件。例如,一個數據挖掘系統可能發現的關聯規則為:major(X, 「computing science」) ⇒ owns(X, 「personal computer」) [support=12%, confidence=98%] 其中,X 是一個表示學生的變數。這個規則指出正在學習的學生,12% (支持度)主修計算機科學並且擁有一台個人計算機。這個組一個學生擁有一台個人電腦的概率是98%(置信度,或確定度)。

分類與預測
不同,因為前者的作用是構造一系列能描述和區分數據類型或概念的模型(或功能),而後者是建立一個模型去預測缺失的或無效的、並且通常是數字的數據值。它們的相似性是他們都是預測的工具:
分類被用作預測目標數據的類的標簽,而預測典型的應用是預測缺失的數字型數據的值。

聚類分析的數據對象不考慮已知的類標號。對象根據最大花蕾內部的相似性、最小化類之間的相似性的原則進行聚類或分組。形成的每一簇可以被看作一個對象類。聚類也便於分類法組織形式,將觀測組織成類分層結構,把類似的事件組織在一起。

數據演變分析描述和模型化隨時間變化的對象的規律或趨勢,盡管這可能包括時間相關數據的特徵化、區分、關聯和相關分析、分類、或預測,這種分析的明確特徵包括時間序列數據分析、序列或周期模式匹配、和基於相似性的數據分析

❷ 機器學習演算法中的SVM和聚類演算法

相信大家都知道,機器學習中有很多的演算法,我們在進行機器學習知識學習的時候一定會遇到過很多的演算法,而機器學習中的SVM演算法和聚類演算法都是比較重要的,我們在這篇文章中就重點給大家介紹一下這兩種演算法,希望這篇文章能夠幫助大家理解這兩種演算法。

機器學習演算法——SVM

提道機器學習演算法就不得不說一說SVM,這種演算法就是支持向量機,而支持向量機演算法是誕生於統計學習界,這也是機器學習中的經典演算法,而支持向量機演算法從某種意義上來說是邏輯回歸演算法的強化,這就是通過給予邏輯回歸演算法更嚴格的優化條件,支持向量機演算法可以獲得比邏輯回歸更好的分類界線。不過如果通過跟高斯核的結合,支持向量機可以表達出非常復雜的分類界線,從而達成很好的的分類效果。核事實上就是一種特殊的函數,最典型的特徵就是可以將低維的空間映射到高維的空間。

於是問題來了,如何在二維平面劃分出一個圓形的分類界線?其實我們在二維平面可能會很困難,但是通過核可以將二維空間映射到三維空間,然後使用一個線性平面就可以達成類似效果。也就是說,二維平面劃分出的非線性分類界線可以等價於三維平面的線性分類界線。接著,我們可以通過在三維空間中進行簡單的線性劃分就可以達到在二維平面中的非線性劃分效果。而支持向量機是一種數學成分很濃的機器學習演算法。在演算法的核心步驟中,有一步證明,即將數據從低維映射到高維不會帶來最後計算復雜性的提升。於是,通過支持向量機演算法,既可以維持計算效率,又可以獲得非常好的分類效果。因此支持向量機在90年代後期一直占據著機器學習中最核心的地位,基本取代了神經網路演算法。

機器學習演算法——聚類演算法

說完了SVM,下面我們給大家介紹一下聚類演算法,前面的演算法中的一個顯著特徵就是我的訓練數據中包含了標簽,訓練出的模型可以對其他未知數據預測標簽。在下面的演算法中,訓練數據都是不含標簽的,而演算法的目的則是通過訓練,推測出這些數據的標簽。這類演算法有一個統稱,即無監督演算法。無監督演算法中最典型的代表就是聚類演算法。而聚類演算法中最典型的代表就是K-Means演算法。這一演算法被廣大朋友所應用。

現在,我們可以清楚認識到機器學習是一個綜合性很強的學科。在這篇文章中我們給大家介紹了很多關於機器學習中的支持向量機和聚類演算法的相關知識,通過這些知識我們不難發現機器學習中有很多有用的演算法,熟練掌握這些演算法是我們真正學會機器學習的必經之路。

❸ 什麼是聚類分析聚類演算法有哪幾種

聚類分析是分類演算法中的一種,是無監督的,不需要訓練。
聚類演算法分為:硬聚類演算法和軟聚類演算法,硬聚類中最經典的是K均值聚類演算法,就是大家所說的K-means演算法,軟聚類演算法中最經典的是模糊C均值聚類演算法,就是FCM。後續的一些聚類演算法都是在這兩種上改進的

❹ K-Means 聚類演算法

問題導入

    假如有這樣一種情況,在一天你想去某個城市旅遊,這個城市裡你想去的有70個地方,現在你只有每一個地方的地址,這個地址列表很長,有70個位置。事先肯定要做好攻略,你要把一些比較接近的地方放在一起組成一組,這樣就可以安排交通工具抵達這些組的「某個地址」,然後步行到每個組內的地址。那麼,如何確定這些組,如何確定這些組的「某個地址」?答案就是聚類。而本文所提供的k-means聚類分析方法就可以用於解決這類問題。

一,聚類思想

        所謂聚類演算法是指將一堆沒有標簽的數據自動劃分成幾類的方法,屬於無監督學習方法,這個方法要保證同一類的數據有相似的特徵,如下圖:

        根據樣本之間的距離或者說相似性,把越相似,差異越小的樣本聚成一類(簇),最後形成多個簇,使同一個簇內部的樣本相似度高,不同簇之間差異性高。

二,K-Means聚類分析演算法

        K-Means是一種基於自下而上的聚類分析方法,基本概念就是空間中有N個點,初始選擇K個點作為中心聚類點,將N個點分別與K個點計算距離,選擇自己最近的點作為自己的中心點,不斷地更新中心聚集點。

相關概念:

        K值:要得到的簇的個數

        質心:每個簇的均值向量,即向量各維取品軍即可

        距離度量:常用歐幾里得距離和餘弦相似度(先標准化)

        兩點之間的距離:

演算法流程:

        1    首先確定一個K值,即我們希望將數據集經過聚類得到 K個集合;

        2    從數據集中隨機選擇K個數據點作為質心;

        3    對數據集中每一個點,計算其與每個質心的距離(如歐式距離),離哪個質心近,就劃分到哪個質心所屬的集合

        4    把所有數據歸好集合,一共有K個集合,然後重新計算每個集合的質心;

        5    如果新計算出來的質心和原來的質心之間的距離小於某一個設置的閾值(表示重新計算的質心的位置變化不大,趨於穩定,或者說收斂),我們可以認為聚類已經達到期望的結果,演算法終止。

        6    如果新質心和原質心距離變化大,需要迭代3-5步驟

K-means實現過程

K-means 聚類演算法是一種非監督學習演算法,被用於非標簽數據(data without defined categories or groups)。該演算法使用迭代細化來產生最終結果。演算法輸入的是集群的數量 K 和數據集。數據集是每個數據點的一組功能。

演算法從 Κ 質心的初始估計開始,其可以隨機生成或從數據集中隨機選擇 。然後演算法在下面兩個步驟之間迭代:

1.數據分配:

每個質心定義一個集群。在此步驟中,基於平方歐氏距離將每個數據點分配到其最近的質心。更正式一點, ci 屬於質心集合 C ,然後每個數據點 x 基於下面的公式被分配到一個集群中。

其中 dist(·)是標准(L2)歐氏距離。讓指向第 i 個集群質心的數據點集合定為 Si 。

2. 質心更新:

在此步驟中,重新計算質心。這是通過獲取分配給該質心集群的所有數據點的平均值來完成的。公式如下:

K-means 演算法在步驟 1 和步驟 2 之間迭代,直到滿足停止條件(即,沒有數據點改變集群,距離的總和最小化,或者達到一些最大迭代次數)。

K 值的選擇

上述演算法找到特定預選 K 值和數據集標簽。為了找到數據中的集群數,用戶需要針對一系列 K 值運行 K-means 聚類演算法並比較結果。通常,沒有用於確定 K 的精確值的方法,但是可以使用以下技術獲得准確的估計。

Elbow point 拐點方法

通常用於比較不同 K 值的結果的度量之一是數據點與其聚類質心之間的平均距離。由於增加集群的數量將總是減少到數據點的距離,因此當 K 與數據點的數量相同時,增加 K 將總是減小該度量,達到零的極值。因此,該指標不能用作唯一目標。相反,繪制了作為 K 到質心的平均距離的函數,並且可以使用減小率急劇變化的「拐點」來粗略地確定 K 。

DBI(Davies-Bouldin Index)

DBI 是一種評估度量的聚類演算法的指標,通常用於評估 K-means 演算法中 k 的取值。簡單的理解就是:DBI 是聚類內的距離與聚類外的距離的比值。所以,DBI 的數值越小,表示分散程度越低,聚類效果越好。

還存在許多用於驗證 K 的其他技術,包括交叉驗證,信息標准,信息理論跳躍方法,輪廓方法和 G 均值演算法等等。

三,數學原理

K-Means採用的啟發式很簡單,可以用下面一組圖來形象的描述:

上述a表達了初始的數據集,假設 k=2 。在圖b中,我們隨機選擇了兩個 k 類所對應的類別質點,即圖中的紅色質點和藍色質點,然後分別求樣本中所有點到這兩個質心的距離,並標記每個樣本類別為和該樣本距離最小的質心的類別,如圖c所示,經過計算樣本和紅色質心和藍色質心的距離,我們得到了所有樣本點的第一輪迭代後的類別。此時我們對我們當前標記為紅色和藍色的點分別求其新的質心,如圖d所示,新的紅色質心和藍色質心大熱位置已經發生了變化。圖e和圖f重復了我們在圖c和圖d的過程,即將所有點的類別標記為距離最近的質心的類別並求出新的質心。最終我們得到的兩個類別如圖f.

四,實例

坐標系中有六個點:

1、我們分兩組,令K等於2,我們隨機選擇兩個點:P1和P2

2、通過勾股定理計算剩餘點分別到這兩個點的距離:

3、第一次分組後結果:

        組A:P1

        組B:P2、P3、P4、P5、P6

4、分別計算A組和B組的質心:

        A組質心還是P1=(0,0)

        B組新的質心坐標為:P哥=((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2,5.6)

5、再次計算每個點到質心的距離:

6、第二次分組結果:

        組A:P1、P2、P3

        組B:P4、P5、P6

7、再次計算質心:

        P哥1=(1.33,1) 

        P哥2=(9,8.33)

8、再次計算每個點到質心的距離:

9、第三次分組結果:

        組A:P1、P2、P3

        組B:P4、P5、P6

可以發現,第三次分組結果和第二次分組結果一致,說明已經收斂,聚類結束。

五、K-Means的優缺點

優點:

1、原理比較簡單,實現也是很容易,收斂速度快。

2、當結果簇是密集的,而簇與簇之間區別明顯時, 它的效果較好。

3、主要需要調參的參數僅僅是簇數k。

缺點:

1、K值需要預先給定,很多情況下K值的估計是非常困難的。

2、K-Means演算法對初始選取的質心點是敏感的,不同的隨機種子點得到的聚類結果完全不同 ,對結果影響很大。

3、對噪音和異常點比較的敏感。用來檢測異常值。

4、採用迭代方法, 可能只能得到局部的最優解,而無法得到全局的最優解 。

六、細節問題

1、K值怎麼定?

答:分幾類主要取決於個人的經驗與感覺,通常的做法是多嘗試幾個K值,看分成幾類的結果更好解釋,更符合分析目的等。或者可以把各種K值算出的 E 做比較,取最小的 E 的K值。

2、初始的K個質心怎麼選?

        答:最常用的方法是隨機選,初始質心的選取對最終聚類結果有影響,因此演算法一定要多執行幾次,哪個結果更reasonable,就用哪個結果。      當然也有一些優化的方法,第一種是選擇彼此距離最遠的點,具體來說就是先選第一個點,然後選離第一個點最遠的當第二個點,然後選第三個點,第三個點到第一、第二兩點的距離之和最小,以此類推。第二種是先根據其他聚類演算法(如層次聚類)得到聚類結果,從結果中每個分類選一個點。

3、關於離群值?

        答:離群值就是遠離整體的,非常異常、非常特殊的數據點,在聚類之前應該將這些「極大」「極小」之類的離群數據都去掉,否則會對於聚類的結果有影響。但是,離群值往往自身就很有分析的價值,可以把離群值單獨作為一類來分析。

4、單位要一致!

        答:比如X的單位是米,Y也是米,那麼距離算出來的單位還是米,是有意義的。但是如果X是米,Y是噸,用距離公式計算就會出現「米的平方」加上「噸的平方」再開平方,最後算出的東西沒有數學意義,這就有問題了。

5、標准化

        答:如果數據中X整體都比較小,比如都是1到10之間的數,Y很大,比如都是1000以上的數,那麼,在計算距離的時候Y起到的作用就比X大很多,X對於距離的影響幾乎可以忽略,這也有問題。因此,如果K-Means聚類中選擇歐幾里德距離計算距離,數據集又出現了上面所述的情況,就一定要進行數據的標准化(normalization),即將數據按比例縮放,使之落入一個小的特定區間。

❺ 什麼是聚類分析聚類演算法有哪幾種

聚類分析又稱群分析,它是研究(樣品或指標)分類問題的一種統計分析方法。聚類分析起源於

分類學,在古老的分類學中,人們主要依靠經驗和專業知識來實現分類,很少利用數學工具進行

定量的分類。隨著人類科學技術的發展,對分類的要求越來越高,以致有時僅憑經驗和專業知識

難以確切地進行分類,於是人們逐漸地把數學工具引用到了分類學中,形成了數值分類學,之後又

將多元分析的技術引入到數值分類學形成了聚類分析。

聚類分析內容非常豐富,有系統聚類法、有序樣品聚類法、動態聚類法、模糊聚類法、圖論

聚類法、聚類預報法等。

聚類分析計算方法主要有如下幾種:分裂法(partitioning methods):層次法(hierarchical

methods):基於密度的方法(density-based methods): 基於網格的方法(grid-based

methods): 基於模型的方法(model-based methods)。

❻ 數據挖掘干貨總結(四)--聚類演算法

本文共計2680字,預計閱讀時長七分鍾

聚類演算法

 

本質

將數據劃分到不同的類里,使相似的數據在同一類里,不相似的數據在不同類里

 

分類演算法用來解決什麼問題

文本聚類、圖像聚類和商品聚類,便於發現規律,以解決數據稀疏問題

聚類演算法基礎知識

1. 層次聚類 vs 非層次聚類

– 不同類之間有無包含關系

2. 硬聚類 vs 軟聚類

– 硬聚類:每個對象只屬於一個類

– 軟聚類:每個對象以某個概率屬於每個類

3. 用向量表示對象

– 每個對象用一個向量表示,可以視為高維空間的一個點

– 所有對象形成數據空間(矩陣)

– 相似度計算:Cosine、點積、質心距離

4. 用矩陣列出對象之間的距離、相似度

5. 用字典保存上述矩陣(節省空間)

    D={(1,1):0,(1,2):2,(1,3):6...(5,5):0}

6. 評價方法

– 內部評價法(Internal Evalution):

• 沒有外部標准,非監督式

• 同類是否相似,跨類是否相異

DB值越小聚類效果越好,反之,越不好

– 外部評價法(External Evalution):

• 准確度(accuracy): (C11+C22) / (C11 + C12 + C21 + C22)

• 精度(Precision): C11 / (C11 + C21 )

• 召回(Recall): C11 / (C11 + C12 )

• F值(F-measure):

β表示對精度P的重視程度,越大越重視,默認設置為1,即變成了F值,F較高時則能說明聚類效果較好。

有哪些聚類演算法


主要分為 層次化聚類演算法 劃分式聚類演算法 基於密度的聚類演算法 基於網格的聚類演算法 基於模型的聚類演算法等

4.1 層次化聚類演算法

又稱樹聚類演算法,透過一種層次架構方式,反復將數據進行分裂或聚合。典型的有BIRCH演算法,CURE演算法,CHAMELEON演算法,Sequence data rough clustering演算法,Between groups average演算法,Furthest neighbor演算法,Neares neighbor演算法等。

凝聚型層次聚類

先將每個對象作為一個簇,然後合並這些原子簇為越來越大的簇,直到所有對象都在一個簇中,或者某個終結條件被滿足。

演算法流程:

1. 將每個對象看作一類,計算兩兩之間的最小距離;

2. 將距離最小的兩個類合並成一個新類;

3. 重新計算新類與所有類之間的距離;

4. 重復2、3,直到所有類最後合並成一類。

特點:

1. 演算法簡單

2. 層次用於概念聚類(生成概念、文檔層次樹)

3. 聚類對象的兩種表示法都適用

4. 處理大小不同的簇

5. 簇選取步驟在樹狀圖生成之後

4.2 劃分式聚類演算法

預先指定聚類數目或聚類中心,反復迭代逐步降低目標函數誤差值直至收斂,得到最終結果。K-means,K-modes-Huang,K-means-CP,MDS_CLUSTER, Feature weighted fuzzy clustering,CLARANS等

經典K-means:

演算法流程:

1. 隨機地選擇k個對象,每個對象初始地代表了一個簇的中心;

2. 對剩餘的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;

3. 重新計算每個簇的平均值,更新為新的簇中心;

4. 不斷重復2、3,直到准則函數收斂。

特點:

1.K的選擇

2.中心點的選擇

– 隨機

– 多輪隨機:選擇最小的WCSS

3.優點

– 演算法簡單、有效

– 時間復雜度:O(nkt)

4.缺點

– 不適於處理球面數據

– 密度、大小不同的聚類,受K的限制,難於發現自然的聚類


4.3 基於模型的聚類演算法

為每簇假定了一個模型,尋找數據對給定模型的最佳擬合,同一」類「的數據屬於同一種概率分布,即假設數據是根據潛在的概率分布生成的。主要有基於統計學模型的方法和基於神經網路模型的方法,尤其以基於概率模型的方法居多。一個基於模型的演算法可能通過構建反應數據點空間分布的密度函數來定位聚類。基於模型的聚類試圖優化給定的數據和某些數據模型之間的適應性。

SOM 神經網路演算法

該演算法假設在輸入對象中存在一些拓撲結構或順序,可以實現從輸入空間(n維)到輸出平面(2維)的降維映射,其映射具有拓撲特徵保持性質,與實際的大腦處理有很強的理論聯系。

SOM網路包含輸入層和輸出層。輸入層對應一個高維的輸入向量,輸出層由一系列組織在2維網格上的有序節點構成,輸入節點與輸出節點通過權重向量連接。學習過程中,找到與之距離最短的輸出層單元,即獲勝單元,對其更新。同時,將鄰近區域的權值更新,使輸出節點保持輸入向量的拓撲特徵。

演算法流程:

1. 網路初始化,對輸出層每個節點權重賦初值;

2. 將輸入樣本中隨機選取輸入向量,找到與輸入向量距離最小的權重向量;

3. 定義獲勝單元,在獲勝單元的鄰近區域調整權重使其向輸入向量靠攏;

4. 提供新樣本、進行訓練;

5. 收縮鄰域半徑、減小學習率、重復,直到小於允許值,輸出聚類結果。

4.4 基於密度聚類演算法

只要鄰近區域的密度(對象或數據點的數目)超過某個閾值,就繼續聚類,擅於解決不規則形狀的聚類問題,廣泛應用於空間信息處理,SGC,GCHL,DBSCAN演算法、OPTICS演算法、DENCLUE演算法。

DBSCAN:

對於集中區域效果較好,為了發現任意形狀的簇,這類方法將簇看做是數據空間中被低密度區域分割開的稠密對象區域;一種基於高密度連通區域的基於密度的聚類方法,該演算法將具有足夠高密度的區域劃分為簇,並在具有雜訊的空間數據中發現任意形狀的簇。

4.5 基於網格的聚類演算法

    基於網格的方法把對象空間量化為有限數目的單元,形成一個網格結構。所有的聚類操作都在這個網格結構(即量化空間)上進行。這種方法的主要優點是它的處理 速度很快,其處理速度獨立於數據對象的數目,只與量化空間中每一維的單元數目有關。但這種演算法效率的提高是以聚類結果的精確性為代價的。經常與基於密度的演算法結合使用。代表演算法有STING演算法、CLIQUE演算法、WAVE-CLUSTER演算法等。 

❼ 八:聚類演算法K-means(20191223-29)

學習內容:無監督聚類演算法K-Means

k-means:模型原理、收斂過程、超參數的選擇

聚類分析是在數據中發現數據對象之間的關系,將數據進行分組,組內的相似性越大,組間的差別越大,則聚類效果越好。

不同的簇類型: 聚類旨在發現有用的對象簇,在現實中我們用到很多的簇的類型,使用不同的簇類型劃分數據的結果是不同的。

基於原型的: 簇是對象的集合,其中每個對象到定義該簇的 原型 的距離比其他簇的原型距離更近,如(b)所示的原型即為中心點,在一個簇中的數據到其中心點比到另一個簇的中心點更近。這是一種常見的 基於中心的簇 ,最常用的K-Means就是這樣的一種簇類型。 這樣的簇趨向於球形。

基於密度的 :簇是對象的密度區域,(d)所示的是基於密度的簇,當簇不規則或相互盤繞,並且有早上和離群點事,常常使用基於密度的簇定義。

關於更多的簇介紹參考《數據挖掘導論》。

基本的聚類分析演算法

     1. K均值: 基於原型的、劃分的距離技術,它試圖發現用戶指定個數(K)的簇。

     2. 凝聚的層次距離: 思想是開始時,每個點都作為一個單點簇,然後,重復的合並兩個最靠近的簇,直到嘗試單個、包含所有點的簇。

     3. DBSCAN: 一種基於密度的劃分距離的演算法,簇的個數有演算法自動的確定,低密度中的點被視為雜訊而忽略,因此其不產生完全聚類。

不同的距離量度會對距離的結果產生影響,常見的距離量度如下所示:

優點:易於實現 

缺點:可能收斂於局部最小值,在大規模數據收斂慢

演算法思想:

選擇K個點作為初始質心 

repeat

    將每個點指派到最近的質心,形成K個簇 

    重新計算每個簇的質心  

until 簇不發生變化或達到最大迭代次數

這里的「重新計算每個簇的質心」,是根據目標函數來計算的,因此在開始時要考慮 距離度量和目標函數。

考慮歐幾里得距離的數據,使用 誤差平方和(Sum of the Squared Error,SSE) 作為聚類的目標函數,兩次運行K均值產生的兩個不同的簇集,使用SSE最小的那個。

k表示k個聚類中心,ci表示第幾個中心,dist表示的是歐幾里得距離。 

這里有一個問題就是為什麼,我們更新質心是讓所有的點的平均值,這里就是SSE所決定的。

k均值演算法非常簡單且使用廣泛,但是其有主要的兩個缺陷:

1. K值需要預先給定 ,屬於預先知識,很多情況下K值的估計是非常困難的,對於像計算全部微信用戶的交往圈這樣的場景就完全的沒辦法用K-Means進行。對於可以確定K值不會太大但不明確精確的K值的場景,可以進行迭代運算,然後找出Cost Function最小時所對應的K值,這個值往往能較好的描述有多少個簇類。

2. K-Means演算法對初始選取的聚類中心點是敏感的 ,不同的隨機種子點得到的聚類結果完全不同

3. K均值演算法並不是很所有的數據類型。 它不能處理非球形簇、不同尺寸和不同密度的簇,銀冠指定足夠大的簇的個數是他通常可以發現純子簇。

4. 對離群點的數據進行聚類時,K均值也有問題 ,這種情況下,離群點檢測和刪除有很大的幫助。

下面對初始質心的選擇進行討論:

當初始質心是隨機的進行初始化的時候,K均值的每次運行將會產生不同的SSE,而且隨機的選擇初始質心結果可能很糟糕,可能只能得到局部的最優解,而無法得到全局的最優解。

多次運行,每次使用一組不同的隨機初始質心,然後選擇一個具有最小的SSE的簇集。該策略非常的簡單,但是效果可能不是很好,這取決於數據集合尋找的簇的個數。

關於更多,參考《數據挖掘導論》

為了克服K-Means演算法收斂於局部最小值的問題,提出了一種 二分K-均值(bisecting K-means)

將所有的點看成是一個簇

當簇小於數目k時

    對於每一個簇

        計算總誤差

        在給定的簇上進行K-均值聚類,k值為2        計算將該簇劃分成兩個簇後總誤差

    選擇是的誤差最小的那個簇進行劃分

在原始的K-means演算法中,每一次的劃分所有的樣本都要參與運算,如果數據量非常大的話,這個時間是非常高的,因此有了一種分批處理的改進演算法。

使用Mini Batch(分批處理)的方法對數據點之間的距離進行計算。

Mini Batch的好處:不必使用所有的數據樣本,而是從不同類別的樣本中抽取一部分樣本來代表各自類型進行計算。n 由於計算樣本量少,所以會相應的減少運行時間n 但另一方面抽樣也必然會帶來准確度的下降。

聚類試圖將數據集中的樣本劃分為若干個通常是不相交的子集,每個子集成為一個「簇」。通過這樣的劃分,每個簇可能對應於一些潛在的概念(也就是類別);需說明的是,這些概念對聚類演算法而言事先是未知的,聚類過程僅能自動形成簇結構,簇對應的概念語義由使用者來把握和命名。

聚類是無監督的學習演算法,分類是有監督的學習演算法。所謂有監督就是有已知標簽的訓練集(也就是說提前知道訓練集里的數據屬於哪個類別),機器學習演算法在訓練集上學習到相應的參數,構建模型,然後應用到測試集上。而聚類演算法是沒有標簽的,聚類的時候,需要實現的目標只是把相似的東西聚到一起。

聚類的目的是把相似的樣本聚到一起,而將不相似的樣本分開,類似於「物以類聚」,很直觀的想法是同一個簇中的相似度要盡可能高,而簇與簇之間的相似度要盡可能的低。

性能度量大概可分為兩類: 一是外部指標, 二是內部指標 。

外部指標:將聚類結果和某個「參考模型」進行比較。

內部指標:不利用任何參考模型,直接考察聚類結果。

對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為K個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大

初學者會很容易就把K-Means和KNN搞混,其實兩者的差別還是很大的。

K-Means是無監督學習的聚類演算法,沒有樣本輸出;而KNN是監督學習的分類演算法,有對應的類別輸出。KNN基本不需要訓練,對測試集裡面的點,只需要找到在訓練集中最近的k個點,用這最近的k個點的類別來決定測試點的類別。而K-Means則有明顯的訓練過程,找到k個類別的最佳質心,從而決定樣本的簇類別。

當然,兩者也有一些相似點,兩個演算法都包含一個過程,即找出和某一個點最近的點。兩者都利用了最近鄰(nearest neighbors)的思想。

優點:

簡單, 易於理解和實現 ;收斂快,一般僅需5-10次迭代即可,高效

缺點:

    1,對K值得選取把握不同對結果有很大的不同

    2,對於初始點的選取敏感,不同的隨機初始點得到的聚類結果可能完全不同

    3,對於不是凸的數據集比較難收斂

    4,對噪點過於敏感,因為演算法是根據基於均值的

    5,結果不一定是全局最優,只能保證局部最優

    6,對球形簇的分組效果較好,對非球型簇、不同尺寸、不同密度的簇分組效果不好。

K-means演算法簡單理解,易於實現(局部最優),卻會有對初始點、雜訊點敏感等問題;還容易和監督學習的分類演算法KNN混淆。

參考閱讀:

1.《 深入理解K-Means聚類演算法 》

2.《 K-Means 》

❽ 聚類(Clustering)

無監督學習(Unsupervised learning) :訓練樣本的標記信息是未知的,目標是為了揭露訓練樣本的內在屬性,結構和信息,為進一步的數據挖掘提供基礎。

· 聚類(clustering)

· 降維(dimensionality rection)

· 異常檢測(outlier detection)

· 推薦系統(recommendation system)

監督學習(supervised learning) :訓練樣本帶有信息標記,利用已有的訓練樣本信息學習數據的規律預測未知的新樣本標簽

· 回歸分析(regression)

· 分類(classification)

聚類 :物以類聚。按照某一個特定的標准(比如距離),把一個數據集分割成不同的類或簇,使得同一個簇內的數據對象的相似性盡可能大,同時不再同一個簇內的數據對象的差異性也盡可能的大。

簇 (或類cluster):子集合。最大化簇內的相似性;最小化簇與簇之間的相似性。

聚類可以作為一個單獨過程,用於尋找數據內在分布結構,也可以作為其他學習任務前驅過程。

聚類和分類的區別:聚類是無監督學習任務,不知道真實的樣本標記,只把相似度搞得樣本聚合在一起;分類是監督學習任務,利用已知的樣本標記訓練學習器預測未知樣本的類別。

聚類相似度度量: 幾何距離

幾種距離度量方法:

· 歐式距離(Euclidean distance):p=2的Minkowski距離, 

· Minkowoski距離:

  · 曼哈頓距離 (Manhattan distance):p=1的Minkowski距離 

· 夾角餘弦 :

` 相關系數 (Pearson correlation coefficient): ,等式右面的x其實是 (x方向的均值),y其實是 (y方向的均值),對於這個表達式很不友好,所以在此說明一下。

聚類類別:

· 基於劃分的聚類(partitioning based clustering):k均值(K-means), Mean shift

· 層次聚類(hierarchical clustering):Agglomerative clustering, BIRCH

· 密度聚類(density based clustering):DBSCAN

· 基於模型的聚類(model based clustering):高斯混合模型(GMM)

· Affinity propagation

 · Spectral clustering

聚類原理:

劃分聚類(partition based clustering):給定包含N個點的數據集,劃分法將構造K個分組;每個分組代表一個聚類,這里每個分組至少包含一個數據點,每個數據點屬於且只屬於一個分組;對於給定的K值,演算法先給出一個初始化的分組方法,然後通過反復迭代的的方法改變分組,知道准則函數收斂。

K均值演算法(Kmeans):

` 給定樣本集:D={ , .... }, k均值演算法針對聚類所得簇:C={ , ... }

` 最小化平方差: ,其中:  簇 的質心,上面的2代表平方,下面的2代表范數2.

具體的K均值演算法過程 :

1. 隨機選擇K個對子女給,每個對象出事地代表了一個簇的質心,即選擇K個初始質心;2. 對剩餘的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;3. 重新計算每個簇的平均值。這個過程不斷重復,直到准則函數(誤差的平方和SSE作為全局的目標函數)收斂,直到質心不發生明顯的變化。

初始質心優化:Kmeans++:

輸入:樣本集D={ , ... } 聚類簇的數量K

選取初始質心的過程:

1. 隨機從m個樣本點中選擇一個樣本作為第一個簇的質心C1;2. 計算所有的樣本點到質心C1的距離: ;3. 從每個點的概率分布  中隨機選取一個點作為第二個質心C2。離C1越遠的點,被選擇的概率越大;4. 重新計算所有樣本點到質心的距離;5. 重復上述過程,直到初始的K個質心被選擇完成  ;按照Kmeans的演算法步驟完成聚類。

輸出:C= { , ... }

K均值演算法(Kmean)的優缺點 :

優點:1. 簡單直觀,抑鬱理解實現;2. 復雜度相對比較低,在K不是很大的情況下,Kmeans的計算時間相對很短;3. Kmean會產生緊密度比較高的簇,反映了簇內樣本圍繞質心的緊密程度的一種演算法。

缺點:1. 很難預測到准確的簇的數目;2. 對初始值設置很敏感(Kmeans++);3. Kmeans主要發現圓形或者球形簇,對不同形狀和密度的簇效果不好;4. Kmeans對雜訊和離群值非常敏感(Kmeadians對雜訊和離群值不敏感)

層次聚類(hierarchical clustering) :

· 主要在不同層次對數據集進行逐層分解,直到滿足某種條件為止;

· 先計算樣本之間的距離。每次將距離最近的點合並到同一個類,然後再計算類與類之間的距離,將距離最近的類合並為一個大類。不停的合並,直到合成一個類。

· 自底向上(bottom-up)和自頂向下(top-down)兩種方法:

top-down: 一開始每個個體都是一個初始的類,然後根據類與類之間的鏈接(linkage)尋找同類,最後形成一個最終的簇

bottom-up:一開始所有樣本都屬於一個大類,然後根據類與類之間的鏈接排除異己,打到聚類的目的。

類與類距離的計算方法 :

最短距離法,最長距離法,中間距離法,平均距離法

最小距離:

最大距離:

平均距離:

單鏈接(single-linkage):根據最小距離演算法

全連接(complete-linkage):根據最大距離演算法

均鏈接(average-linkage):根據平均距離演算法

凝聚層次聚類具體演算法流程:

1. 給定樣本集,決定聚類簇距離度量函數以及聚類簇數目k;2. 將每個樣本看作一類,計算兩兩之間的距離;3. 將距離最小的兩個類合並成一個心類;4.重新計算心類與所有類之間的距離;5. 重復(3-4),知道達到所需要的簇的數目

層次聚類的優缺點:

優點:1.可以得到任意形狀的簇,沒有Kmeans對形狀上的限制;2. 可以發現類之間的層次關系;3.不要制定簇的數目

缺點:1. 通常來說,計算復雜度高(很多merge/split);2.雜訊對層次聚類也會產生很大影響;3.不適合打樣本的聚類

密度聚類(density based clustering) :

  ` 基於密度的 方法的特點是不依賴於距離,而是依賴於密度,從而客服k均值只能發現「球形」聚簇的缺點

· 核心思想:只要一個區域中點的密度大於某個閾值,就把它加到與之相近的聚類中去

· 密度演算法從樣本密度的角度來考察樣本的可連接性,並基於可連接樣本不斷擴展聚類簇以獲得最終的聚類結果

· 對雜訊和離群值的處理有效

· 經典演算法:DBSCAN(density based spatial clutering of applications with noise)

DBSCAN 基於近鄰域(neighborhood)參數( )刻畫樣本分布的 緊密程度的一種演算法。

基本概念:

· 樣本集: D={ }

` 閾值: 

·  :對樣本點 的 包括樣本集中與 距離不大於 的樣本

· 核心對象(core object):如果 的 至少包含MinPts個樣本,那麼 就是一個核心對象 ,

假設MinPts=3,虛線標識為

·密度直達(directly density-reachable):如果 位於 的 中,並且 是和新對象,那麼 由 密度直達

· 密度可達(density-reachable):對 ,如果存在一串樣本點p1,p2.....pn =  ,pn =  ,且 由

` 密度直達,則稱 由 密度可達

· 密度相連:存在樣本集合中一點o,如果 和 均由O密度可達,那麼 和 密度相連

上圖中: 是核心對象,那麼從 出發, 由 密度直達; 由 密度可達; 與 密度相連。

DBSCAN演算法的過程:

1. 首先根據鄰域參數( )確定樣本集合D中所有的核心對象,存在集合P中。加入集合P的條件為 有不少於MinPts的樣本數。

2. 然後從核心對象集合P中任意選取一個核心對象作為初始點,找出其密度可達的樣本生成聚類簇,構成第一個聚類簇C1。

3. 將C1內多有核心對象從P中去除,再從更新後的核心對象集合任意選取下一個種子樣本。

4. 重復(2-3),直到核心對象被全部選擇完,也就是P為空集。

聚類演算法總結:

基於劃分的聚類:K均值(kmeans),kmeans++

層次聚類:Agglomerative聚類

密度聚類:DBSCAN

基於模型 的聚類:高斯混合模型(GMM),這篇博客里咩有介紹

雖然稀里糊塗,但是先跟下來再說吧:

❾ 大數據分析之聚類演算法

大數據分析之聚類演算法
1. 什麼是聚類演算法
所謂聚類,就是比如給定一些元素或者對象,分散存儲在資料庫中,然後根據我們感興趣的對象屬性,對其進行聚集,同類的對象之間相似度高,不同類之間差異較大。最大特點就是事先不確定類別。
這其中最經典的演算法就是KMeans演算法,這是最常用的聚類演算法,主要思想是:在給定K值和K個初始類簇中心點的情況下,把每個點(亦即數據記錄)分到離其最近的類簇中心點所代表的類簇中,所有點分配完畢之後,根據一個類簇內的所有點重新計算該類簇的中心點(取平均值),然後再迭代的進行分配點和更新類簇中心點的步驟,直至類簇中心點的變化很小,或者達到指定的迭代次數。
KMeans演算法本身思想比較簡單,但是合理的確定K值和K個初始類簇中心點對於聚類效果的好壞有很大的影響。
聚類演算法實現
假設對象集合為D,准備劃分為k個簇。
基本演算法步驟如下:
1、從D中隨機取k個元素,作為k個簇的各自的中心。
2、分別計算剩下的元素到k個簇中心的相異度,將這些元素分別劃歸到相異度最低的簇。
3、根據聚類結果,重新計算k個簇各自的中心,計算方法是取簇中所有元素各自維度的算術平均數。
4、將D中全部元素按照新的中心重新聚類。
5、重復第4步,直到聚類結果不再變化。
6、將結果輸出。

核心Java代碼如下:
/**
* 迭代計算每個點到各個中心點的距離,選擇最小距離將該點劃入到合適的分組聚類中,反復進行,直到
* 分組不再變化或者各個中心點不再變化為止。
* @return
*/
public List[] comput() {
List[] results = new ArrayList[k];//為k個分組,分別定義一個聚簇集合,未來放入元素。

boolean centerchange = true;//該變數存儲中心點是否發生變化
while (centerchange) {
iterCount++;//存儲迭代次數
centerchange = false;
for (int i = 0; i < k; i++) {
results[i] = new ArrayList<T>();
}
for (int i = 0; i < players.size(); i++) {
T p = players.get(i);
double[] dists = new double[k];
for (int j = 0; j < initPlayers.size(); j++) {
T initP = initPlayers.get(j);
/* 計算距離 這里採用的公式是兩個對象相關屬性的平方和,最後求開方*/
double dist = distance(initP, p);
dists[j] = dist;
}

int dist_index = computOrder(dists);//計算該點到各個質心的距離的最小值,獲得下標
results[dist_index].add(p);//劃分到對應的分組。
}
/*
* 將點聚類之後,重新尋找每個簇的新的中心點,根據每個點的關注屬性的平均值確立新的質心。
*/
for (int i = 0; i < k; i++) {
T player_new = findNewCenter(results[i]);
System.out.println("第"+iterCount+"次迭代,中心點是:"+player_new.toString());
T player_old = initPlayers.get(i);
if (!IsPlayerEqual(player_new, player_old)) {
centerchange = true;
initPlayers.set(i, player_new);
}

}

}

return results;
}
上面代碼是其中核心代碼,我們根據對象集合List和提前設定的k個聚集,最終完成聚類。我們測試一下,假設要測試根據NBA球員的場均得分情況,進行得分高中低的聚集,很簡單,高得分在一組,中等一組,低得分一組。
我們定義一個Player類,裡面有屬性goal,並錄入數據。並設定分組數目為k=3。
測試代碼如下:
List listPlayers = new ArrayList();
Player p1 = new Player();
p1.setName(「mrchi1」);
p1.setGoal(1);
p1.setAssists(8);
listPlayers.add(p1);

Player p2 = new Player();
p2.setName("mrchi2");
p2.setGoal(2);
listPlayers.add(p2);

Player p3 = new Player();
p3.setName("mrchi3");
p3.setGoal(3);
listPlayers.add(p3);
//其他對象定義此處略。製造幾個球員的對象即可。
Kmeans<Player> kmeans = new Kmeans<Player>(listPlayers, 3);
List<Player>[] results = kmeans.comput();
for (int i = 0; i < results.length; i++) {
System.out.println("類別" + (i + 1) + "聚集了以下球員:");
List<Player> list = results[i];
for (Player p : list) {
System.out.println(p.getName() + "--->" + p.getGoal()

}
}
演算法運行結果:

可以看出中心點經歷了四次迭代變化,最終分類結果也確實是相近得分的分到了一組。當然這種演算法有缺點,首先就是初始的k個中心點的確定非常重要,結果也有差異。可以選擇彼此距離盡可能遠的K個點,也可以先對數據用層次聚類演算法進行聚類,得到K個簇之後,從每個類簇中選擇一個點,該點可以是該類簇的中心點,或者是距離類簇中心點最近的那個點。

❿ 分類和聚類的區別及各自的常見演算法

1、分類和聚類的區別:
Classification (分類),對於一個classifier,通常需要你告訴它「這個東西被分為某某類」這樣一些例子,理想情況下,一個 classifier 會從它得到的訓練集中進行「學習」,從而具備對未知數據進行分類的能力,這種提供訓練數據的過程通常叫做supervised learning (監督學習),
Clustering (聚類),簡單地說就是把相似的東西分到一組,聚類的時候,我們並不關心某一類是什麼,我們需要實現的目標只是把相似的東西聚到一起。因此,一個聚類演算法通常只需要知道如何計算相似度就可以開始工作了,因此 clustering 通常並不需要使用訓練數據進行學習,這在Machine Learning中被稱作unsupervised learning (無監督學習).
2、常見的分類與聚類演算法
所謂分類,簡單來說,就是根據文本的特徵或屬性,劃分到已有的類別中。如在自然語言處理NLP中,我們經常提到的文本分類便就是一個分類問題,一般的模式分類方法都可用於文本分類研究。常用的分類演算法包括:決策樹分類法,樸素貝葉斯分類演算法(native Bayesian classifier)、基於支持向量機(SVM)的分類器,神經網路法,k-最近鄰法(k-nearestneighbor,kNN),模糊分類法等等。
分類作為一種監督學習方法,要求必須事先明確知道各個類別的信息,並且斷言所有待分類項都有一個類別與之對應。但是很多時候上述條件得不到滿足,尤其是在處理海量數據的時候,如果通過預處理使得數據滿足分類演算法的要求,則代價非常大,這時候可以考慮使用聚類演算法。
而K均值(K-mensclustering)聚類則是最典型的聚類演算法(當然,除此之外,還有很多諸如屬於劃分法K中心點(K-MEDOIDS)演算法、CLARANS演算法;屬於層次法的BIRCH演算法、CURE演算法、CHAMELEON演算法等;基於密度的方法:DBSCAN演算法、OPTICS演算法、DENCLUE演算法等;基於網格的方法:STING演算法、CLIQUE演算法、WAVE-CLUSTER演算法;基於模型的方法)。

閱讀全文

與聚類是一種預測演算法相關的資料

熱點內容
不背單詞app單詞怎麼學習 瀏覽:479
程序員日常操作搞笑 瀏覽:379
android檢查是否安裝 瀏覽:373
蘋果手機編輯pdf文件 瀏覽:458
android系統名字 瀏覽:969
安卓手機如何進去有求必應屋 瀏覽:432
指數除法運演算法則底數不同 瀏覽:894
90壓縮干糧09壓縮干糧 瀏覽:516
android線程池框架 瀏覽:481
手機自帶解壓能解壓哪些文件 瀏覽:804
linux安裝hba驅動 瀏覽:119
java構造函數new 瀏覽:668
怎麼查家裡電器耗電量app 瀏覽:506
原神一直顯示重新連接伺服器怎麼辦 瀏覽:826
一般用途軸流式壓縮機 瀏覽:926
沒學歷的怎麼學編程 瀏覽:901
華為的隱藏相冊無法加密 瀏覽:782
聯通套餐app怎麼設置 瀏覽:752
關於刪除鏈表的演算法描述 瀏覽:894
標准盤和壓縮盤的區別 瀏覽:47