A. 16種常用的數據分析方法-聚類分析
聚類(Clustering)就是一種尋找數據之間內在結構的技術。聚類把全體數據實例組織成一些相似組,而這些相似組被稱作簇。處於相同簇中的數據實例彼此相同,處於不同簇中的實例彼此不同。
聚類分析定義
聚類分析是根據在數據中發現的描述對象及其關系的信息,將數據對象分組。目的是,組內的對象相互之間是相似的(相關的),而不同組中的對象是不同的(不相關的)。組內相似性越大,組間差距越大,說明聚類效果越好。
聚類效果的好壞依賴於兩個因素:1.衡量距離的方法(distance measurement) 2.聚類演算法(algorithm)
聚類分析常見演算法
K-均值聚類也稱為快速聚類法,在最小化誤差函數的基礎上將數據劃分為預定的類數K。該演算法原理簡單並便於處理大量數據。
K-均值演算法對孤立點的敏感性,K-中心點演算法不採用簇中對象的平均值作為簇中心,而選用簇中離平均值最近的對象作為簇中心。
也稱為層次聚類,分類的單位由高到低呈樹形結構,且所處的位置越低,其所包含的對象就越少,但這些對象間的共同特徵越多。該聚類方法只適合在小數據量的時候使用,數據量大的時候速度會非常慢。
案例
有20種12盎司啤酒成分和價格的數據,變數包括啤酒名稱、熱量、鈉含量、酒精含量、價格。
問題一:選擇那些變數進行聚類?——採用「R 型聚類」
現在我們有4個變數用來對啤酒分類,是否有必要將4個變數都納入作為分類變數呢?熱量、鈉含量、酒精含量這3個指標是要通過化驗員的辛苦努力來測定,而且還有花費不少成本。
所以,有必要對4個變數進行降維處理,這里採用spss R型聚類(變數聚類),對4個變數進行降維處理。輸出「相似性矩陣」有助於我們理解降維的過程。
4個分類變數各自不同,這一次我們先用相似性來測度,度量標准選用pearson系數,聚類方法選最遠元素,此時,涉及到相關,4個變數可不用標准化處理,將來的相似性矩陣里的數字為相關系數。若果有某兩個變數的相關系數接近1或-1,說明兩個變數可互相替代。
只輸出「樹狀圖」就可以了,從proximity matrix表中可以看出熱量和酒精含量兩個變數相關系數0.903,最大,二者選其一即可,沒有必要都作為聚類變數,導致成本增加。
至於熱量和酒精含量選擇哪一個作為典型指標來代替原來的兩個變數,可以根據專業知識或測定的難易程度決定。(與因子分析不同,是完全踢掉其中一個變數以達到降維的目的。)這里選用酒精含量,至此,確定出用於聚類的變數為:酒精含量,鈉含量,價格。
問題二:20 中啤酒能分為幾類?—— 採用「Q 型聚類」
現在開始對20中啤酒進行聚類。開始不確定應該分為幾類,暫時用一個3-5類范圍來試探。Q型聚類要求量綱相同,所以我們需要對數據標准化,這一回用歐式距離平方進行測度。
主要通過樹狀圖和冰柱圖來理解類別。最終是分為4類還是3類,這是個復雜的過程,需要專業知識和最初的目的來識別。
這里試著確定分為4類。選擇「保存」,則在數據區域內會自動生成聚類結果。
問題三:用於聚類的變數對聚類過程、結果又貢獻么,有用么?——採用「單因素方差分析」
聚類分析除了對類別的確定需討論外,還有一個比較關鍵的問題就是分類變數到底對聚類有沒有作用有沒有貢獻,如果有個別變數對分類沒有作用的話,應該剔除。
這個過程一般用單因素方差分析來判斷。注意此時,因子變數選擇聚為4類的結果,而將三個聚類變數作為因變數處理。方差分析結果顯示,三個聚類變數sig值均極顯著,我們用於分類的3個變數對分類有作用,可以使用,作為聚類變數是比較合理的。
問題四:聚類結果的解釋?——採用」均值比較描述統計「
聚類分析最後一步,也是最為困難的就是對分出的各類進行定義解釋,描述各類的特徵,即各類別特徵描述。這需要專業知識作為基礎並結合分析目的才能得出。
我們可以採用spss的means均值比較過程,或者excel的透視表功能對各類的各個指標進行描述。其中,report報表用於描述聚類結果。對各類指標的比較來初步定義類別,主要根據專業知識來判定。這里到此為止。
以上過程涉及到spss層次聚類中的Q型聚類和R型聚類,單因素方差分析,means過程等,是一個很不錯的多種分析方法聯合使用的案例。
聚類分析的應用
聚類分析是細分市場的有效工具,被用來發現不同的客戶群,並且它通過對不同的客戶群的特徵的刻畫,被用於研究消費者行為,尋找新的潛在市場。
聚類分析被用來對動植物和基因進行分類,以獲取對種群固有結構的認識。
聚類分析可以通過平均消費來鑒定汽車保險單持有者的分組,同時可以根據住宅類型、價值、地理位置來鑒定城市的房產分組。
聚類分析被用來在網上進行文檔歸類。
聚類分析通過分組聚類出具有相似瀏覽行為的客戶,並分析客戶的共同特徵,從而幫助電子商務企業了解自己的客戶,向客戶提供更合適的服務。
B. 建議收藏!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 中安裝和使用頂級聚類演算法。具體來說,你學到了:
C. 數據挖掘 聚類演算法概述
文 | 宿痕
來源 | 知乎
本篇重點介紹聚類演算法的原理,應用流程、使用技巧、評估方法、應用案例等。具體的演算法細節可以多查閱相關的資料。聚類的主要用途就是客戶分群。
1.聚類 VS 分類
分類是「監督學習」,事先知道有哪些類別可以分。
聚類是「無監督學習」,事先不知道將要分成哪些類。
舉個例子,比如蘋果、香蕉、獼猴桃、手機、電話機。
根據特徵的不同,我們聚類會分為【蘋果、香蕉、獼猴桃】為水果的一類,和【手機、電話機】為數碼產品的一類。
而分類的話,就是我們在判斷「草莓」的時候,把它歸為「水果」一類。
所以通俗的解釋就是:分類是從訓練集學習對數據的判斷能力,再去做未知數據的分類判斷;而聚類就是把相似的東西分為一類,它不需要訓練數據進行學習。
學術解釋:分類是指分析資料庫中的一組對象,找出其共同屬性。然後根據分類模型,把它們劃分為不同的類別。分類數據首先根據訓練數據建立分類模型,然後根據這些分類描述分類資料庫中的測試數據或產生更恰當的描述。
聚類是指資料庫中的數據可以劃分為一系列有意義的子集,即類。在同一類別中,個體之間的距離較小,而不同類別上的個體之間的距離偏大。聚類分析通常稱為「無監督學習」。
2.聚類的常見應用
我們在實際情況的中的應用會有:
marketing:客戶分群
insurance:尋找汽車保險高索賠客戶群
urban planning:尋找相同類型的房產
比如你做買家分析、賣家分析時,一定會聽到客戶分群的概念,用標准分為高價值客戶、一般價值客戶和潛在用戶等,對於不同價值的客戶提供不同的營銷方案;
還有像在保險公司,那些高索賠的客戶是保險公司最care的問題,這個就是影響到保險公司的盈利問題;
還有在做房產的時候,根據房產的地理位置、價格、周邊設施等情況聚類熱房產區域和冷房產區域。
3.k-means
(1)假定K個clusters(2)目標:尋找緊致的聚類
a.隨機初始化clusters
b.分配數據到最近的cluster
c.重復計算clusters
d.repeat直到收斂
優點:局部最優
缺點:對於非凸的cluster有問題
其中K=?
K<=sample size
取決於數據的分布和期望的resolution
AIC,DIC
層次聚類避免了這個問題
4.評估聚類
魯棒性?
聚類如何,是否過度聚合?
很多時候是取決於聚合後要干什麼。
5.case案例
case 1:賣家分群雲圖
作者:宿痕 授權轉載
原文鏈接:http://zhuanlan.hu.com/dataman/20397891
D. 層次聚類分析案例(三)
之前的筆記:
聚類介紹: 點這里
層次聚類分析案例(一)
層次聚類分析案例(二)
獲取全基因組表達數據的能力是一項計算復雜度非常高的任務。由於人腦的局限性,是無法解決這個問題。但是,通過將基因分類進數量較少的類別後再進行分析,就能將基因數據加工到更易理解的水平。
聚類的目標是將一組基因進行劃分,使相似的基因落入同一個簇,同時不相似的基因落入不同的簇。這里需要考慮的關鍵問題是如何定義相似性,以及處理已分類基因。這里我們使用兩種基因類型的感光性來探索基因聚類問題。
准備工作
為了進行層次聚類,我們使用從實驗鼠身上採集的數據集。
第1步:收集和描述數據
該任務使用名為GSE4051_data和GSE4051_design的數據集。該數據集以標准格式存儲在名為GSE4051_data.csv和GSE4051_design.csv的CSV格式的文件中。數據獲取路徑: 在這里
GSE4051_data數據集包含29949行數據和39個變數。數值型變數如下:
GSE4051_design數據集包含39行數據和4個變數。數值型變數是:sidNum
非數值型變數是:sidChar;devStage;gType;
具體實施步驟以下為實現細節。
第2步:探索數據
RColorBrewer包是一個R包,可從 http://colorbrewer2.org 獲取,它提供地圖和其他圖形的彩色模板。
pvclust包用來實現非確定性的層次聚類分析。在層次聚類中,每個簇通過多尺度有放回抽樣計算p值。一個簇的p值在0~1之間。p值有兩種類型:近似無偏(approximately unbiased,AU)和有放回概率(bootstrap probability,BP)值。AU p值通過多尺度有放回採樣方法計算,經典的有放回採樣方法用來計算BP p值。AU p值相比BP p值存在優效性偏見。
xtable包可以生成LaTeX格式的表格。使用xtable可以將特定的R對象轉換成xtables。這些xtables能夠以LaTeX或HTML的格式輸出。
plyr包被用來進行分置合並(split-apply-combine,SAC)過程。它將一個大的問題切分成易處理的小塊,在每個小塊上進行操作,然後將所有小塊合並起來。
載入以下包:
讓我們探索並理解變數間的關系。從導入名為GSE4051_data.csv的CSV文件開始。我們將該文件數據存儲到GSE4051_data數據框中:
接下來,輸出GSE4051_data數據框的信息。str()函數返回GSE4051_data的結構信息。它簡略顯示了GSE4051_data數據框的內部結構。max.level指明了為了顯示網狀結構的最大等級。
結果如下:
下面,我們導入名為GSE4051_design.csv的CSV文件,將其數據保存到GSE4051_design數據框中:
輸出GSE4051_design數據框的內部結構。
結果如下:
第3步:轉換數據
為了便於後續的可視化階段,需要對每一行數據進行拉伸操作。這是由於在目前的要求下,不同基因表達之間存在絕對值的差距,因此需要對每一行數據進行拉伸。
中心化變數和創建z值是兩個常見的數據分析方法。scale函數中心化並拉伸數值型矩陣的列。
變換矩陣。傳入GSE4051_data數據框用t()函數進行數據框變換。
接下來,我們輸出GSE4051_data數據框的信息。通過設置give.attr=FALSE,次級結構的屬性不會被顯示。
結果如下:
round()函數用於舍入到最接近的整數。語法形式只有1種:Y = round(X),這里的X可以是數,向量,矩陣,輸出對應。
head()函數返回一個向量、矩陣、表、數據框或函數的頭部。GSE4051_data和trans_GSE4051_data數據框被當作對象傳入。rowMeans()函數計算每列的平均值。data.frame()函數創建數據框耦合變數集合,並且共享許多指標的性質:
結果如下:
第4步:訓練模型
接下來是訓練模型。第一步是計算距離矩陣。dist()函數用來計算並返回距離矩陣,可以使用特定的距離度量方法來計算數據矩陣中各行間的距離。這里可使用的距離度量方法有歐式距離、最大距離、曼哈頓距離、堪培拉距離、二進制距離,或閔可夫斯基距離。這里使用歐式距離。歐式距離計算兩個向量間的距離公式為sqrt(sum((x_i-y_i)^2))。轉換後的trans_GSE4051_data數據框被用來計算距離。結果存儲在pair_dist_GSE4051_data數據框中。
接下來,使用interaction()函數計算並返回gType、devStage變數間相互作用的無序因子。無序因子的結果連同GSE4051_design數據框一同被傳入with()函數。該函數計算產生一個新的因子代表gType、devStage變數的相互作用:
summary()函數用來生成GSE4051_design$group數據框的結果總結:
結果如下:
下面,使用多種不同的聯合類型計算層次聚類。
使用hclust()函數對n個不同對象進行聚類分析。第一個階段,每個對象被指派給自己的簇。演算法在每個階段迭代聚合兩個最相似的簇。持續該過程直到只剩一個單獨的簇。hclust()函數要求我們以距離矩陣的形式提供數據。pair_dist_GSE4051_data數據框被傳入。
在第一個例子中使用single聚類方法:
結果如下:
在第二個例子中使用complete聚集方法。
調用pr.hc.complete的結果是顯示所使用的聚集方法、距離計算方法和對象數量:
結果如下:
在第三個例子中使用average聚類方法:
調用pr.hc.complete的結果是顯示所使用的聚集方法、距離計算方法和對象數量:
結果如下:
在第四個例子中使用ward聚類方法:
pr.hc.ward的調用結果是顯示所使用的聚集方法、距離計算方法和對象數量:
結果如下:
plot()函數是繪制R對象的通用函數。
第一次調用plot()函數,傳遞pr.hc.single數據框作為輸入對象:
結果如下:
第二次調用plot()函數,傳入pr.hc.complete數據框作為輸入對象:
結果如下:
第三次調用plot()函數,傳入pr.hc.average數據框作為輸入對象:
結果如下:
第四次調用plot()函數,傳入pr.hc.ward數據框作為輸入對象:
結果如下:
第5步:繪制模型
plot()函數是繪制R對象的通用函數。這里,plot()函數用來繪制系統樹圖。
rect.hclust()函數強調不同的簇,並在系統樹圖的枝幹上繪制長方形。系統樹圖首先在某個等級上被剪切,之後在選定的枝幹上繪制長方形。
RColorBrewer使用從 http://colorbrewer2.org 獲得的包來選擇繪制R圖像的顏色模板。
顏色分為三組:
最重要的一個RColorBrewer函數是brewer.pal()。通過向該函數傳入顏色的數量和配色的名字,可以從display.brewer.all()函數中選擇一個配色方案。
在第一個例子中,pr.hc.single作為一個對象傳入plot()函數:
結果如下:
下面創建熱度圖,使用single聚集方法。heatmap()函數默認使用euclidean聚集方法:
結果如下:
在第二例子中,pr.hc.complete作為對象傳入plot()函數:
結果如下:
下面使用complete聚集方法創建熱度圖:
結果如下:
在第三個例子中,pr.hc.average作為對象傳入plot()函數:
結果如下:
下面創建average聚集方法的熱度圖:
結果如下:
在第四個例子中,pr.hc.ward作為對象傳入plot()函數:
結果如下:
下面繪制ward聚集方法的熱度圖:
結果如下:
E. 「聚類分析」16聚類分析之KMeans演算法與K中心點演算法
1.聚類
聚類屬於無監督式學習。在無監督式學習中,訓練樣本的標記信息是未知的,演算法通過對 無標記樣本 的學習來揭示蘊含於數據中的性質和規律。聚類演算法的任務是根據數據特徵將數據集相似的數據劃分到同一簇。
2.聚類分析
聚類分析是將物理的或者抽象的數據集合劃分為多個類別的過程,聚類之後的每個類別中任意兩個數據樣本之間具有較高的相似度,而不同類別的數據樣本之間具有較低的相似度。
3.聚類演算法常用分類
①劃分聚類方法
②層次聚類方法
③基於密度的聚類方法
④基於網格的聚類方法
4.聚類分析中相似度的計算方法
(1)連續型屬性的相似度計算方法:歐式距離
(2)二值離散型屬性的相似度計算方法
數據樣本的二值離散型屬性的取值情況:
(3)多值離散型屬性的相似度計算方法:多值離散型屬性轉化為二值離散型屬性
(4)混合類型屬性的相似度計算方法
將屬性按照類型分組,每個新的數據集中只包含一種類型的屬性,然後對每個數據集進行單獨的聚類分析,隨後把混合類型的屬性放在一起處理,進行一次聚類分析。
5.KMeans演算法(劃分法)
KMeans也稱為K均值,是一種聚類演算法。它可以根據數據特徵將數據集分成K個不同的簇,簇的個數K是由用戶指定的。KMeans演算法基於 距離 來度量實例間的相似程度(與KNN演算法一樣,大多數問題採用歐氏距離),然後把較為相似的實例劃分到同一簇。
(1)聚類的性能度量大致有以下兩類:
①外部指標:將聚類結果與某個「參考模型」進行比較。
②內部指標:直接考察聚類結果而不利於參考模型。
(2)聚類演算法的過程:
①隨機選擇k個點作為聚類中心;
②計算各個點到這k個點的距離;
③將對應的點聚到與它最近的這個聚類中心;
④重新計算聚類中心;
⑤比較當前聚類中心與前一次聚類中心,如果是同一個點,得到聚類結果,如果不是,則重復②③④⑤。
(3)聚類演算法的實現:
【注】 模型效果評估指標說明:
1)inertias_:是K-Means模型對象的屬性,它作為沒有真實分類結果標簽下的非監督式評估指標。表示樣本到最近的聚類中心的距離總和。 值越小越好,越小表示樣本在類間的分布越集中。
2)蘭德指數(Rand index):需要給定實際類別信息C,假設n是聚類結果,a表示在C與K中都是同類別的元素對數,b表示在C與K中都是不同類別的元素對數,則蘭德指數為:
RI取值范圍為[0,1], 值越大意味著聚類結果與真實情況越吻合。
對於隨機結果,RI並不能保證分數接近零。為了實現「在聚類結果隨機產生的情況下,指標應該接近零」,調整蘭德系數(Adjusted rand index)被提出,它具有更高的區分度:
ARI取值范圍為[−1,1], 值越大意味著聚類結果與真實情況越吻合。 從廣義的角度來講,ARI衡量的是兩個數據分布的吻合程度。
3)同質化得分(Homogeneity):如果所有的聚類都只包含屬於單個類的成員的數據點,則聚類結果滿足同質性。取值范圍[0,1], 值越大意味著聚類結果與真實情況越符合。
4)完整性得分(Complenteness):如果作為給定類的成員的所有數據點是相同集群的元素,則聚類結果滿足完整性。取值范圍[0,1], 值越大意味著聚類結果與真實情況越符合。
5)v_meansure_score:同質化和完整性之間的諧波平均值,v=2*(同質化*完整性)/(同質化+完整性),取值范圍[0,1], 值越大意味著聚類結果與真實情況越符合。
6.k中心點演算法
(1)原理
①隨機選取k個中心點;
②遍歷所有數據,將每個數據劃分到最近的中心點中;
③計算每個聚類的平均值,並作為新的中心點;
④重復②③,直到這k個中線點不再變化(收斂了),或執行了足夠多的迭代。
(2)與KMeans演算法對比
K-中心點聚類的 基本思想 和K-Means的思想相同,實質上是對K-means演算法的優化和改進。在K-means中, 異常數據對其的演算法過程會有較大的影響 。在K-means演算法執行過程中,可以通過隨機的方式選擇初始質心,也只有初始時通過隨機方式產生的質心才是實際需要聚簇集合的中心點,而後面通過不斷迭代產生的新的質心很可能並不是在聚簇中的點。如果某些異常點距離質心相對較大時,很可能導致重新計算得到的質心偏離了聚簇的真實中心。
F. 常見的幾種聚類方法
作為無監督學習的一個重要方法,聚類的思想就是把屬性相似的樣本歸到一類。對於每一個數據點,我們可以把它歸到一個特定的類,同時每個類之間的所有數據點在某種程度上有著共性,比如空間位置接近等特性。多用於數據挖掘、數據分析等一些領域。
下面簡單介紹一下幾種比較常見的聚類演算法。
K-means聚類方法大家應該都聽說過,在各種機器學習書籍教程中也是無監督學習部分非常經典的例子。其核心主要為兩個部分:其一是K,K在這里代表著類的數目,我們要把數據聚為多少類。其二是means,表示在每一次計算聚類中心的時候採取的是計算平均值。
我們假設樣本總數為n,K-means聚類法可以簡單表示為一下幾個步驟:
1. 在樣本中隨機選取K個點,作為每一類的中心點。
2. 計算剩下 n-K 個樣本點到每個聚類中心的距離(距離有很多種,假設這里採用歐式距離)。對於每一個樣本點,將它歸到和他距離最近的聚類中心所屬的類。
3. 重新計算每個聚類中心的位置:步驟 2 中得到的結果是 n 個點都有自己所屬的類,將每一個類內的所有點取平均值(這里假設是二維空間,即對 x 和 y 坐標分別取平均),計算出新的聚類中心。
4. 重復步驟 2 和 3 的操作,直到所有的聚類中心不再改變。
分析一下,演算法本身的思想並不難。但是K值如何選擇就見仁見智了,這里可以引入類內距離 J,每一類都會對應一個 J 值,其計算就是把類內所有點之間的距離累加起來。我們肯定希望 J 越小越好,因為小的類內間距代表這一類樣本的相似程度更高(離得更近)。
如果 K 很小,則聚類可能不徹底,即隔著很遠的兩波點也被聚為一類,會使 J 變得很大;相反的,過大的 K 雖然會降低類內間距 J ,但有時候分得過細會對數據的泛化性造成損害,沒有必要弄這么多類。因此 K 的選擇應該是具體問題具體分析。
還有一個問題就是初始聚類中心的選擇。不當的初始化會給演算法的收斂帶來更多的計算開銷。試想一下,如果一開始把離得很近的 K 個點都設為聚類中心,那麼演算法的迭代次數會更多一些。
HAC也是一種比較經典的聚類方法,其主要思想是先把每一個樣本點歸為一類,再通過計算類間的距離,來對最相似或者距離最近的類進行歸並,合成位一個新的類。反復循環,直到滿足特定的迭代條件即可。
HAC的核心思想主要分為如下幾個步驟:
1. 將每個樣本點都視作一類,一共有n個類。
2. 計算所有類之間兩兩的類間距離(類間距離計算方式多種多樣,可以取最近、最遠、找重心等等,這里不做詳述),然後把距離最近的兩個類進行合並,組成一個新的更大的類。
3. 重復步驟 2 中的操作,直到達到特定的迭代條件(例如當前類的數目是初始時的 10% ,即 90% 的類都得到了合並;最小的類間距離大於預先設定的閾值等等),演算法結束。
和K-means演算法中的 K 值選取一樣,HAC中如何選擇迭代的終止條件也是一個比較復雜的問題,需要根據一定的經驗,並且具體問題具體分析。
這種方法的核心思想是先計算出聚類中心,再把所有的樣本點按照就近原則,歸到離自身最近的聚類中心所對應的類。最大最小是指在所有的最小距離中選取最大的。其主要的演算法步驟如下:
1. 隨機選擇一個點,作為第一個類的聚類中心 Z1。
2. 選擇與步驟 1 中距離最遠的樣本點,作為第二個類的聚類中心 Z2。
3. 逐個計算每個點到所有聚類中心的距離,並把所有的最短的距離記錄下來。
4. 在這些最短距離中挑選最大的值,如果這個最大值大於 ,其中 ,那麼將這個最大距離所對應的另一個樣本點作為新的聚類中心;否則整個演算法結束。
5. 重復步驟 3 和 4 的操作,直到 4 中不再出現新的聚類中心。
6. 將所有的樣本歸到與他自身最近的聚類中心。
參考:
https://www.jianshu.com/p/4f032dccdcef
https://www.jianshu.com/p/bbac132b15a5
https://blog.csdn.net/u011511601/article/details/81951939
G. 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),即將數據按比例縮放,使之落入一個小的特定區間。
H. 如何正確選擇聚類演算法
作者 | Josh Thompson
來源 | 數據派THU
Choosing the Right Clustering Algorithm for your Dataset - KDnuggets
聚類演算法十分容易上手,但是選擇恰當的聚類演算法並不是一件容易的事。
數據聚類是搭建一個正確數據模型的重要步驟。數據分析應當根據數據的共同點整理信息。然而主要問題是,什麼通用性參數可以給出最佳結果,以及什麼才能稱為「最佳」。
本文適用於菜鳥數據科學家或想提升聚類演算法能力的專家。下文包括最廣泛使用的聚類演算法及其概況。根據每種方法的特殊性,本文針對其應用提出了建議。
四種基本演算法以及如何選擇
聚類模型可以分為四種常見的演算法類別。盡管零零散散的聚類演算法不少於100種,但是其中大部分的流行程度以及應用領域相對有限。
基於整個數據集對象間距離計算的聚類方法,稱為基於連通性的聚類(connectivity-based)或層次聚類。根據演算法的「方向」,它可以組合或反過來分解信息——聚集和分解的名稱正是源於這種方向的區別。最流行和合理的類型是聚集型,你可以從輸入所有數據開始,然後將這些數據點組合成越來越大的簇,直到達到極限。
層次聚類的一個典型案例是植物的分類。數據集的「樹」從具體物種開始,以一些植物王國結束,每個植物王國都由更小的簇組成(門、類、階等)。
層次聚類演算法將返回樹狀圖數據,該樹狀圖展示了信息的結構,而不是集群上的具體分類。這樣的特點既有好處,也有一些問題:演算法會變得很復雜,且不適用於幾乎沒有層次的數據集。這種演算法的性能也較差:由於存在大量的迭代,因此整個處理過程浪費了很多不必要的時間。最重要的是,這種分層演算法並不能得到精確的結構。
同時,從預設的類別一直分解到所有的數據點,類別的個數不會對最終結果產生實質性影響,也不會影響預設的距離度量,該距離度量粗略測量和近似估計得到的。
根據我的經驗,由於簡單易操作,基於質心的聚類(Centroid-based)是最常出現的模型。 該模型旨在將數據集的每個對象劃分為特定的類別。 簇數(k)是隨機選擇的,這可能是該方法的最大問題。 由於與k最近鄰居(kNN)相似,該k均值演算法在機器學習中特別受歡迎。
計算過程包括多個步驟。首先,輸入數據集的目標類別數。聚類的中心應當盡可能分散,這有助於提高結果的准確性。
其次,該演算法找到數據集的每個對象與每個聚類中心之間的距離。最小坐標距離(若使用圖形表示)確定了將對象移動到哪個群集。
之後,將根據類別中所有點的坐標平均值重新計算聚類的中心。重復演算法的上一步,但是計算中要使用簇的新中心點。除非達到某些條件,否則此類迭代將繼續。例如,當簇的中心距上次迭代沒有移動或移動不明顯時,聚類將結束。
盡管數學和代碼都很簡單,但k均值仍有一些缺點,因此我們無法在所有情景中使用它。缺點包括:
因為優先順序設置在集群的中心,而不是邊界,所以每個集群的邊界容易被疏忽。 無法創建數據集結構,其對象可以按等量的方式分類到多個群集中。 需要猜測最佳類別數(k),或者需要進行初步計算以指定此量規。相比之下,期望最大化演算法可以避免那些復雜情況,同時提供更高的准確性。簡而言之,它計算每個數據集點與我們指定的所有聚類的關聯概率。用於該聚類模型的主要工具是高斯混合模型(GMM)–假設數據集的點服從高斯分布。
k-means演算法可以算是EM原理的簡化版本。它們都需要手動輸入簇數,這是此類方法要面對的主要問題。除此之外,計算原理(對於GMM或k均值)很簡單:簇的近似范圍是在每次新迭代中逐漸更新的。
與基於質心的模型不同,EM演算法允許對兩個或多個聚類的點進行分類-它僅展示每個事件的可能性,你可以使用該事件進行進一步的分析。更重要的是,每個聚類的邊界組成了不同度量的橢球體。這與k均值聚類不同,k均值聚類方法用圓形表示。但是,該演算法對於不服從高斯分布的數據集根本不起作用。這也是該方法的主要缺點:它更適用於理論問題,而不是實際的測量或觀察。
最後,基於數據密度的聚類成為數據科學家心中的最愛。
這個名字已經包括了模型的要點——將數據集劃分為聚類,計數器會輸入ε參數,即「鄰居」距離。因此,如果目標點位於半徑為ε的圓(球)內,則它屬於該集群。
具有雜訊的基於密度的聚類方法(DBSCAN)將逐步檢查每個對象,將其狀態更改為「已查看」,將其劃分到具體的類別或雜訊中,直到最終處理整個數據集。用DBSCAN確定的簇可以具有任意形狀,因此非常精確。此外,該演算法無需人為地設定簇數 —— 演算法可以自動決定。
盡管如此,DBSCAN也有一些缺點。如果數據集由可變密度簇組成,則該方法的結果較差;如果對象的位置太近,並且無法輕易估算出ε參數,那麼這也不是一個很好的選擇。
總而言之,我們並不能說選擇了錯誤的演算法,只能說其中有些演算法會更適合特定的數據集結構。為了採用最佳的(看起來更恰當的)演算法,你需要全面了解它們的優缺點。
例如,如果某些演算法不符合數據集規范,則可以從一開始就將其排除在外。為避免繁瑣的工作,你可以花一些時間來記住這些信息,而無需反復試驗並從自己的錯誤中學習。
我們希望本文能幫助你在初始階段選擇最好的演算法。繼續這了不起的工作吧!