類聚算法java庫,基於數量的聚類算法

本文目錄一覽:

緊急求助!!!!!!!!!!!!!!!!!!”類聚”是什麼?

一,什麼是聚類?

聚類:-將一個對象的集合分割成幾個類,每個類內的對象之間是相似的,但與其他類的對象是不相似的。

評判聚類好壞的標準:1,能夠適用於大數據量。2,能應付不同的數據類型。3,能夠發現不同類型的聚類。4,使對專業知識的要求降到最低。5,能應付臟數據。6,對於數據不同的順序不敏感。7,能應付很多類型的數據。8,模型可解釋,可使用。

二,聚類所基於的數據類型。

聚類算法通常基於“數據矩陣”和“Dissimilarity 矩陣”。

怎麼樣計算不同對象之間的距離?

1,數值連續的變量(體重,身高等):度量單位的選取對於聚類的結果的很重要的。例如將身高的單位從米變為尺,將體重的單位從公斤變為磅將對聚類的結果產生很大的影響。為了避免出現這種情況,我們必須將數據標準化:將數據中的單位“去掉”。

A, 計算絕對背離度。B,計算標準量度。

下面我們考慮怎樣來計算兩個對象之間的差異。1,歐幾里得距離。2,曼哈頓距離。這兩種算法有共同之處:d(i,j)=0,d(i,i)=0, d(i,j)=d(j,i),d(i,j)=d(i,h)+d(h,j)。3,Minkowski距離。這是上述兩種算法的通式。並且對於不同的變量,我們可以給它賦於不同的weight.

2,二元數據變量:如果還是用上面的方法來計算的話,肯定會出現錯誤。這兒分

兩種情況,對稱的與非對稱的。

3,Nominal變量:(例如紅,黃,綠,藍….)

4,ordinal變量(例如科長,處長,局長….)

5,ratio-scaled變量:

6,以上幾種混合的變量(多數情況是這樣的):

三,分割的的方法。

1, K均值算法:給定類的個數K,將n個對象分到K個類中去,使得類內對象之間的相似性最大,而類之間的相似性最小。

缺點:產生類的大小相差不會很大,對於臟數據很敏感。

改進的算法:k—medoids 方法。這兒選取一個對象叫做mediod來代替上面的中心

的作用,這樣的一個medoid就標識了這個類。步驟:

1,任意選取K個對象作為medoids(O1,O2,…Oi…Ok)。

以下是循環的:

2,將餘下的對象分到各個類中去(根據與medoid最相近的原則);

3,對於每個類(Oi)中,順序選取一個Or,計算用Or代替Oi後的消耗—E(Or)。選擇E最小的那個Or來代替Oi。這樣K個medoids就改變了,下面就再轉到2。

4,這樣循環直到K個medoids固定下來。

這種算法對於臟數據和異常數據不敏感,但計算量顯然要比K均值要大,一般只適合小數據量。

建議收藏!10 種 Python 聚類算法完整操作示例

聚類或聚類分析是無監督學習問題。它通常被用作數據分析技術,用於發現數據中的有趣模式,例如基於其行為的客戶群。有許多聚類算法可供選擇,對於所有情況,沒有單一的最佳聚類算法。相反,最好探索一系列聚類算法以及每種算法的不同配置。在本教程中,你將發現如何在 python 中安裝和使用頂級聚類算法。完成本教程後,你將知道:

聚類分析,即聚類,是一項無監督的機器學習任務。它包括自動發現數據中的自然分組。與監督學習(類似預測建模)不同,聚類算法只解釋輸入數據,並在特徵空間中找到自然組或群集。

群集通常是特徵空間中的密度區域,其中來自域的示例(觀測或數據行)比其他群集更接近群集。群集可以具有作為樣本或點特徵空間的中心(質心),並且可以具有邊界或範圍。

聚類可以作為數據分析活動提供幫助,以便了解更多關於問題域的信息,即所謂的模式發現或知識發現。例如:

聚類還可用作特徵工程的類型,其中現有的和新的示例可被映射並標記為屬於數據中所標識的群集之一。雖然確實存在許多特定於群集的定量措施,但是對所識別的群集的評估是主觀的,並且可能需要領域專家。通常,聚類算法在人工合成數據集上與預先定義的群集進行學術比較,預計算法會發現這些群集。

有許多類型的聚類算法。許多算法在特徵空間中的示例之間使用相似度或距離度量,以發現密集的觀測區域。因此,在使用聚類算法之前,擴展數據通常是良好的實踐。

一些聚類算法要求您指定或猜測數據中要發現的群集的數量,而另一些算法要求指定觀測之間的最小距離,其中示例可以被視為“關閉”或“連接”。因此,聚類分析是一個迭代過程,在該過程中,對所識別的群集的主觀評估被反饋回算法配置的改變中,直到達到期望的或適當的結果。scikit-learn 庫提供了一套不同的聚類算法供選擇。下面列出了10種比較流行的算法:

每個算法都提供了一種不同的方法來應對數據中發現自然組的挑戰。沒有最好的聚類算法,也沒有簡單的方法來找到最好的算法為您的數據沒有使用控制實驗。在本教程中,我們將回顧如何使用來自 scikit-learn 庫的這10個流行的聚類算法中的每一個。這些示例將為您複製粘貼示例並在自己的數據上測試方法提供基礎。我們不會深入研究算法如何工作的理論,也不會直接比較它們。讓我們深入研究一下。

在本節中,我們將回顧如何在 scikit-learn 中使用10個流行的聚類算法。這包括一個擬合模型的例子和可視化結果的例子。這些示例用於將粘貼複製到您自己的項目中,並將方法應用於您自己的數據。

1.庫安裝

首先,讓我們安裝庫。不要跳過此步驟,因為你需要確保安裝了最新版本。你可以使用 pip Python 安裝程序安裝 scikit-learn 存儲庫,如下所示:

接下來,讓我們確認已經安裝了庫,並且您正在使用一個現代版本。運行以下腳本以輸出庫版本號。

運行該示例時,您應該看到以下版本號或更高版本。

2.聚類數據集

我們將使用 make _ classification ()函數創建一個測試二分類數據集。數據集將有1000個示例,每個類有兩個輸入要素和一個群集。這些群集在兩個維度上是可見的,因此我們可以用散點圖繪製數據,並通過指定的群集對圖中的點進行顏色繪製。這將有助於了解,至少在測試問題上,群集的識別能力如何。該測試問題中的群集基於多變量高斯,並非所有聚類算法都能有效地識別這些類型的群集。因此,本教程中的結果不應用作比較一般方法的基礎。下面列出了創建和匯總合成聚類數據集的示例。

運行該示例將創建合成的聚類數據集,然後創建輸入數據的散點圖,其中點由類標籤(理想化的群集)着色。我們可以清楚地看到兩個不同的數據組在兩個維度,並希望一個自動的聚類算法可以檢測這些分組。

已知聚類着色點的合成聚類數據集的散點圖接下來,我們可以開始查看應用於此數據集的聚類算法的示例。我已經做了一些最小的嘗試來調整每個方法到數據集。3.親和力傳播親和力傳播包括找到一組最能概括數據的範例。

它是通過 AffinityPropagation 類實現的,要調整的主要配置是將“ 阻尼 ”設置為0.5到1,甚至可能是“首選項”。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,我無法取得良好的結果。

數據集的散點圖,具有使用親和力傳播識別的聚類

4.聚合聚類

聚合聚類涉及合併示例,直到達到所需的群集數量為止。它是層次聚類方法的更廣泛類的一部分,通過 AgglomerationClustering 類實現的,主要配置是“ n _ clusters ”集,這是對數據中的群集數量的估計,例如2。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,可以找到一個合理的分組。

使用聚集聚類識別出具有聚類的數據集的散點圖

5.BIRCHBIRCH

聚類( BIRCH 是平衡迭代減少的縮寫,聚類使用層次結構)包括構造一個樹狀結構,從中提取聚類質心。

它是通過 Birch 類實現的,主要配置是“ threshold ”和“ n _ clusters ”超參數,後者提供了群集數量的估計。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,可以找到一個很好的分組。

使用BIRCH聚類確定具有聚類的數據集的散點圖

6.DBSCANDBSCAN

聚類(其中 DBSCAN 是基於密度的空間聚類的噪聲應用程序)涉及在域中尋找高密度區域,並將其周圍的特徵空間區域擴展為群集。

它是通過 DBSCAN 類實現的,主要配置是“ eps ”和“ min _ samples ”超參數。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,儘管需要更多的調整,但是找到了合理的分組。

使用DBSCAN集群識別出具有集群的數據集的散點圖

7.K均值

K-均值聚類可以是最常見的聚類算法,並涉及向群集分配示例,以盡量減少每個群集內的方差。

它是通過 K-均值類實現的,要優化的主要配置是“ n _ clusters ”超參數設置為數據中估計的群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,可以找到一個合理的分組,儘管每個維度中的不等等方差使得該方法不太適合該數據集。

使用K均值聚類識別出具有聚類的數據集的散點圖

8.Mini-Batch

K-均值Mini-Batch K-均值是 K-均值的修改版本,它使用小批量的樣本而不是整個數據集對群集質心進行更新,這可以使大數據集的更新速度更快,並且可能對統計噪聲更健壯。

它是通過 MiniBatchKMeans 類實現的,要優化的主配置是“ n _ clusters ”超參數,設置為數據中估計的群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,會找到與標準 K-均值算法相當的結果。

帶有最小批次K均值聚類的聚類數據集的散點圖

9.均值漂移聚類

均值漂移聚類涉及到根據特徵空間中的實例密度來尋找和調整質心。

它是通過 MeanShift 類實現的,主要配置是“帶寬”超參數。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,可以在數據中找到一組合理的群集。

具有均值漂移聚類的聚類數據集散點圖

10.OPTICSOPTICS

聚類( OPTICS 短於訂購點數以標識聚類結構)是上述 DBSCAN 的修改版本。

它是通過 OPTICS 類實現的,主要配置是“ eps ”和“ min _ samples ”超參數。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,我無法在此數據集上獲得合理的結果。

使用OPTICS聚類確定具有聚類的數據集的散點圖

11.光譜聚類

光譜聚類是一類通用的聚類方法,取自線性線性代數。

它是通過 Spectral 聚類類實現的,而主要的 Spectral 聚類是一個由聚類方法組成的通用類,取自線性線性代數。要優化的是“ n _ clusters ”超參數,用於指定數據中的估計群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,找到了合理的集群。

使用光譜聚類聚類識別出具有聚類的數據集的散點圖

12.高斯混合模型

高斯混合模型總結了一個多變量概率密度函數,顧名思義就是混合了高斯概率分布。它是通過 Gaussian Mixture 類實現的,要優化的主要配置是“ n _ clusters ”超參數,用於指定數據中估計的群集數量。下面列出了完整的示例。

運行該示例符合訓練數據集上的模型,並預測數據集中每個示例的群集。然後創建一個散點圖,並由其指定的群集着色。在這種情況下,我們可以看到群集被完美地識別。這並不奇怪,因為數據集是作為 Gaussian 的混合生成的。

使用高斯混合聚類識別出具有聚類的數據集的散點圖

在本文中,你發現了如何在 python 中安裝和使用頂級聚類算法。具體來說,你學到了:

八:聚類算法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 》

java中的算法,一共有多少種,哪幾種,怎麼分類。

就好比問,漢語中常用寫作方法有多少種,怎麼分類。

算法按用途分,體現設計目的、有什麼特點

算法按實現方式分,有遞歸、迭代、平行、序列、過程、確定、不確定等等

算法按設計范型分,有分治、動態、貪心、線性、圖論、簡化等等

作為圖靈完備的語言,理論上”Java語言“可以實現所有算法。

“Java的標準庫’中用了一些常用數據結構和相關算法.

像apache common這樣的java庫中又提供了一些通用的算法

幾種主要類聚方法的比較和試驗

引言 聚類分析是人類的區分標誌之一,從孩提時代開始,一個人就下意識地學會區分動植物,並且不斷改進。這一原理在如今不少領域得到了相應的研究和應用,比如模式識別、數據分析、圖像處理、Web文檔分類等。 將物理或抽象對象的集合分成由類似的對象組成的多個類的過程被稱為聚類。由聚類所生成的簇是一組數據對象的集合,這些對象與同一個簇中的對象彼此相似,與其他簇中的對象相異。“物以類聚,人以群分”,在自然科學和社會科學中,存在着大量的分類問題。 聚類技術正在蓬勃發展,對此有貢獻的研究領域包括數據挖掘、統計學、機器學習、空間數據庫技術、生物學以及市場營銷等。各種聚類方法也被不斷提出和改進,而不同的方法適合於不同類型的數據,因此對各種聚類方法、聚類效果的比較成為值得研究的課題。 1 聚類算法的分類 現在有很多的聚類算法,而在實際應用中,正確選擇聚類算法的則取決於數據的類型、聚類的目的等因素。如果聚類分析被用作描述或探查的工具,可以對同樣的數據嘗試多種算法,以發現數據可能揭示的結果。 已知的聚類算法可以大致劃分為以下幾類:劃分方法、層次方法、基於密度的方法、基於網格的方法和基於模型的方法。 每一個類型的算法都被廣泛地應用着,例如:劃分方法中的k-means聚類算法、層次方法中的凝聚型層次聚類算法、基於模型方法中的神經網絡聚類算法等。 聚類問題的研究早已不再局限於上述的硬聚類,即每一個數據只能被歸為一類,模糊聚類也是聚類分析中研究較為廣泛的一個“流派”。模糊聚類通過隸屬函數來確定每個數據隸屬於各個簇的程度,而不是將一個數據對象硬性地歸類到某一簇中。目前已有很多關於模糊聚類的算法被提出,如FCM算法。 本文主要分析和比較k-means聚類算法、凝聚型層次聚類算法、神經網絡聚類算法之SOM,以及模糊聚類的FCM算法。通過通用測試數據集進行聚類效果的比較和分析。 2 四種常用聚類算法研究 2.1 k-means聚類算法 k-means是劃分方法中較經典的聚類算法之一。該算法的效率高,使得在對大規模數據進行聚類時廣泛應用。目前,許多算法均圍繞着該算法進行擴展和改進。 k-means算法以k為參數,把n個對象分成k個簇,使簇內具有較高的相似度,而簇間的相似度較低。k-means算法的處理過程如下:首先,隨機地選擇k個對象,每個對象初始地代表了一個簇的平均值或中心;對剩餘的每個對象,根據其與各簇中心的距離,將它賦給最近的簇;然後重新計算每個簇的平均值。這個過程不斷重複,直到準則函數收斂。通常,採用平方誤差準則,其定義如下: 這裡E是數據庫中所有對象的平方誤差的總和,p是空間中的點,mi是簇Ci的平均值。該目標函數使生成的簇儘可能緊湊獨立,使用的距離度量是歐幾里得距離,當然也可以用其他距離度量。k-means聚類算法的算法流程如下: 輸入:包含n個對象的數據庫和簇的數目k; 輸出:k個簇,使平方誤差準則最小。 步驟: (1) 任意選擇k個對象作為初始的簇中心; (2) repeat; (3) 根據簇中對象的平均值,將每個對象(重新)賦予最類似的簇; (4) 更新簇的平均值,即計算每個簇中對象的平均值; (5) until不再發生變化。 2.2 層次聚類算法 根據層次分解的順序,層次聚類算法分為凝聚的層次聚類算法和分裂的層次聚類算法。 凝聚型層次聚類的策略是先將每個對象作為一個簇,然後合併這些原子簇為越來越大的簇,直到所有對象都在一個簇中,或者某個終結條件被滿足。絕大多數層次聚類屬於凝聚型層次聚類,它們只是在簇間相似度的定義上有所不同。四種廣泛採用的簇間距離度量方法如下: 這裡給出採用最小距離的凝聚層次聚類算法流程: (1) 將每個對象看作一類,計算兩兩之間的最小距離; (2) 將距離最小的兩個類合併成一個新類; (3) 重新計算新類與所有類之間的距離; (4) 重複(2)、(3),直到所有類最後合併成一類。 2.3 SOM聚類算法 SOM神經網絡是由芬蘭神經網絡專家Kohonen教授提出的,該算法假設在輸入對象中存在一些拓撲結構或順序,可以實現從輸入空間(n維)到輸出平面(2維)的降維映射,其映射具有拓撲特徵保持性質,與實際的大腦處理有很強的理論聯繫。 SOM網絡包含輸入層和輸出層。輸入層對應一個高維的輸入向量,輸出層由一系列組織在2維網格上的有序節點構成,輸入節點與輸出節點通過權重向量連接。學習過程中,找到與之距離最短的輸出層單元,即獲勝單元,對其更新。同時,將鄰近區域的權值更新,使輸出節點保持輸入向量的拓撲特徵。 算法流程: (1) 網絡初始化,對輸出層每個節點權重賦初值; (2) 將輸入樣本中隨機選取輸入向量,找到與輸入向量距離最小的權重向量; (3) 定義獲勝單元,在獲勝單元的鄰近區域調整權重使其向輸入向量靠攏; (4) 提供新樣本、進行訓練; (5) 收縮鄰域半徑、減小學習率、重複,直到小於允許值,輸出聚類結果。 2.4 FCM聚類算法 1965年美國加州大學柏克萊分校的扎德教授第一次提出了‘集合’的概念。經過十多年的發展,模糊集合理論漸漸被應用到各個實際應用方面。為克服非此即彼的分類缺點,出現了以模糊集合論為數學基礎的聚類分析。用模糊數學的方法進行聚類分析,就是模糊聚類分析。 FCM算法是一種以隸屬度來確定每個數據點屬於某個聚類程度的算法。該聚類算法是傳統硬聚類算法的一種改進。 算法流程: (1) 標準化數據矩陣; (2) 建立模糊相似矩陣,初始化隸屬矩陣; (3) 算法開始迭代,直到目標函數收斂到極小值; (4) 根據迭代結果,由最後的隸屬矩陣確定數據所屬的類,顯示最後的聚類結果。 3 試驗 3.1 試驗數據 實驗中,選取專門用於測試分類、聚類算法的國際通用的UCI數據庫中的IRIS數據集,IRIS數據集包含150個樣本數據,分別取自三種不同的鶯尾屬植物setosa、versicolor和virginica的花朵樣本,每個數據含有4個屬性,即萼片長度、萼片寬度、花瓣長度,單位為cm。在數據集上執行不同的聚類算法,可以得到不同精度的聚類結果。 3.2 試驗結果說明 文中基於前面所述各算法原理及算法流程,用matlab進行編程運算,得到表1所示聚類結果。 如表1所示,對於四種聚類算法,按三方面進行比較: (1)聚錯樣本數:總的聚錯的樣本數,即各類中聚錯的樣本數的和; (2)運行時間:即聚類整個過程所耗費的時間,單位為s; (3)平均準確度:設原數據集有k個類,用ci表示第i類,ni為ci中樣本的個數,mi為聚類正確的個數,則mi/ni為第i類中的精度,則平均精度為: 3.3 試驗結果分析 四種聚類算法中,在運行時間及準確度方面綜合考慮,k-means和FCM相對優於其他。但是,各個算法還是存在固定缺點:k-means聚類算法的初始點選擇不穩定,是隨機選取的,這就引起聚類結果的不穩定,本實驗中雖是經過多次實驗取的平均值,但是具體初始點的選擇方法還需進一步研究;層次聚類雖然不需要確定分類數,但是一旦一個分裂或者合併被執行,就不能修正,聚類質量受限制;FCM對初始聚類中心敏感,需要人為確定聚類數,容易陷入局部最優解;SOM與實際大腦處理有很強的理論聯繫。但是處理時間較長,需要進一步研究使其適應大型數據庫。 4 結語 聚類分析因其在許多領域的成功應用而展現出誘人的應用前景,除經典聚類算法外,各種新的聚類方法正被不斷被提出。

該文章僅供學習參考使用,版權歸作者所有。

原創文章,作者:QSZJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/131466.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QSZJ的頭像QSZJ
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python實現爬樓梯算法

    本文介紹使用Python實現爬樓梯算法,該算法用於計算一個人爬n級樓梯有多少種不同的方法。 有一樓梯,小明可以一次走一步、兩步或三步。請問小明爬上第 n 級樓梯有多少種不同的爬樓梯…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論