您好,登錄后才能下訂單哦!
這篇文章主要講解了“python聚類分析是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python聚類分析是什么”吧!
聚類分析或聚類是對一組對象進行分組的任務,使得同一組(稱為聚類)中的對象(在某種意義上)與其他組(聚類)中的對象更相似(在某種意義上)。它是探索性數據挖掘的主要任務,也是統計 數據分析的常用技術,用于許多領域,包括機器學習,模式識別,圖像分析,信息檢索,生物信息學,數據壓縮和計算機圖形學。
聚類分析本身不是一個特定的算法,而是要解決的一般任務。它可以通過各種算法來實現,這些算法在理解群集的構成以及如何有效地找到它們方面存在顯著差異。流行的群集概念包括群集成員之間距離較小的群體,數據空間的密集區域,間隔或特定的統計分布。因此,聚類可以表述為多目標優化問題。適當的聚類算法和參數設置(包括距離函數等參數)使用,密度閾值或預期聚類的數量)取決于個體數據集和結果的預期用途。這樣的聚類分析不是自動任務,而是涉及試驗和失敗的知識發現或交互式多目標優化的迭代過程。通常需要修改數據預處理和模型參數,直到結果達到所需的屬性。
常用的聚類算法分為基于劃分、層次、密度、網格、統計學、模型等類型的算法,典型算法包括K均值(經典的聚類算法)、DBSCAN、兩步聚類、BIRCH、譜聚類等。
聚類算法中k-means是最常使用的方法之一,但是k-means要注意數據異常:
數據異常值。數據中的異常值能明顯改變不同點之間的距離相識度,并且這種影響是非常顯著的。因此基于距離相似度的判別模式下,異常值的處理必不可少。
數據的異常量綱。不同的維度和變量之間,如果存在數值規模或量綱的差異,那么在做距離之前需要先將變量歸一化或標準化。例如跳出率的數值分布區間是[0,1],訂單金額可能是[0,10000 000],而訂單數量則是[0,1000],如果沒有歸一化或標準化操作,那么相似度將主要受到訂單金額的影響。
有異常的數據可以使用DBSCAN聚類方法進行處理,DBSCAN的全稱是Density-Based Spatial Clustering of Applications with Noise,中文含義是“基于密度的帶有噪聲的空間聚類”。
跟K均值相比,它具有以下優點:
原始數據分布規律沒有明顯要求,能適應任意數據集分布形狀的空間聚類,因此數據集適用性更廣,尤其是對非凸裝、圓環形等異性簇分布的識別較好。
無需指定聚類數量,對結果的先驗要求不高
由于DBSCAN可區分核心對象、邊界點和噪點,因此對噪聲的過濾效果好,能有效應對數據噪點。
由于他對整個數據集進行操作且聚類時使用了一個全局性的表征密度的參數,因此也存在比較明顯的弱點:
對于高緯度問題,基于半徑和密度的定義成問題。
當簇的密度變化太大時,聚類結果較差。
當數據量增大時,要求較大的內存支持,I/O消耗也很大。
K均值在算法穩定性、效率和準確率(相對于真實標簽的判別)上表現非常好,并且在應對大量數據時依然如此。它的算法時間復雜度上界為O(nkt),其中n是樣本量、k是劃分的聚類數、t是迭代次數。當聚類數和迭代次數不變時,K均值的算法消耗時間只跟樣本量有關,因此會呈線性增長趨勢。
但是當面對海量數據時,k均值算法計算速度慢會產生延時,尤其算法被用于做實時性處理時這種弊端尤為明顯。針對K均值的這一問題,很多延伸算法出現了,MiniBatchKMeans就是其中一個典型代表。MiniBatchKMeans使用了一個種名為Mini Batch(分批處理)的方法計算數據點之間的距離。Mini Batch的好處是計算過程中不必使用所有的數據樣本,而是從不同類別的樣本中抽取一部分樣本(而非全部樣本)作為代表參與聚類算法過程。由于計算樣本量少,所以會相應減少運行時間;但另一方面,由于是抽樣方法,抽樣樣本很難完全代表整體樣本的全部特征,因此會帶來準確度的小幅度下降,但是并不明顯。
在大數據背景下,有很多高緯度數據場景,如電子商務交易數據、web文本數據日益豐富。高維數據聚類時耗時長、聚類結果準確性和穩定性都不盡如人意。因為,在高維數據,基于距離的相似度計算效率極低;特征值過多在所有維度上存在簇的可能性非常低;由于稀疏性和緊鄰特性,基于距離的相似度幾乎為0,導致高維空間很難出現數據簇。這時我們可以選著使用子空間聚類,或是降維處理。
子空間聚類算法是在高維數據空間中對傳統聚類算法的一種擴展,其思想是選取與給定簇密切相關的維,然后在對應的子空間進行聚類。比如譜聚類就是一種子空間聚類方法,由于選擇相關維的方法以及評估子空間的方法需要自定義,因此這種方法對操作者的要求較高。
圖像壓縮
用較少的數據量來表示原有的像素矩陣的過程,這個過程稱為圖像編碼。數據圖像的顯著特點是數據量龐大,需要占用相當大的儲存空間,這給圖像的存儲、計算、傳輸等帶來了不便。因此,現在大多數數字網絡下的圖像都會經過壓縮后再做進一步應用,圖像壓縮的方法之一便是聚類算法。
在使用聚類算法做圖像壓縮時,我們會定義K個顏色數(例如128種顏色),顏色數就是聚類類別的數量;K均值聚類算法會把類似的顏色分別放在K個簇中,然后每個簇使用一種顏色來代替原始顏色,那么結果就是有多少個簇,就生成了多少種顏色構成的圖像,由此實現圖像壓縮。
圖像分割
圖像分割就是把圖像分成若干個特定的、具有獨特性質的區域并提出感興趣的目標技術和過程,這是圖像處理和分析的關鍵步驟。圖像分割后提取出的目標可以用于圖像語義識別,圖像搜索等領域。例如從圖像中分割出前景人臉信息,然后做人臉識別。聚類算法是圖像分割方法的一種,其實施的關鍵是通過不同區域間明顯不同的圖像色彩特征做聚類,聚類數量就是要分割的區域的數量。
圖像理解
在圖像理解中,有一種稱為基于區域的提取方法。基于區域的提取方法是在圖像分割和對象識別的前提下進行的,利用對象模板、場景分類器等,通過識別對象及對象之間的拓撲關系挖掘語義,生成對應的場景語義信息。例如,先以顏色、形狀等特征對分割后的圖像區域進行聚類,形成少量BLOB;然后通過CMRM模型計算出BLOB與某些關鍵詞共同出現的概率。
異常檢測
異常檢測有多種實施方法,其中常用的方法是基于距離的異常檢測方法。即使數據集不滿足任何特定分布模型,它仍能有效地發現離群點,特別是當空間維度比較高時,算法的效率比基于密度的方法要高得多。算法具體實現時,首先算出數據樣本間的距離(如曼哈頓距離、歐氏距離等),然后對數據做預處理后就可以根據距離的定義來檢測異常值。
例如,可以使用K-means的聚類可以將離中心店最遠的類或者不屬于任何一個類的數據點提取出來,然后將其定義為異常值。
數據為高維數據,那么選取子空間聚類(如譜聚類)
數據量在100萬條以內,那么使用k均值較好;如果數據量超過100萬條,那么可以考慮使用Mini Batch KMeans
如果數據中存在噪點,那么可以使用基于密度的DBSCAN
如果最求更高的分類準確度,那么選擇譜聚類將比K均值準確度更好
python代碼實現
import numpy as np import pandas as pd from sklearn.cluster import KMeans from sklearn import metrics import matplotlib.pyplot as plt from sklearn.datasets import make_blobs %matplotlib inline # 數據準備 data = make_blobs(n_samples=2000, centers=[[1,1], [-1, -1]], cluster_std=0.7, random_state=2018) X = data[0] y = data[1] #設置聚類數量 n_clusters = 2 # 建立聚類模型對象 kmeans = KMeans(n_clusters=n_clusters, random_state=2018) # 訓練聚類模型 kmeans.fit(X) # 預測聚類模型 pre_y = kmeans.predict(X) ### 模型效果指標評估 ### # 樣本距離最近的聚類中心的總和 inertias = kmeans.inertia_ # 調整后的蘭德指數 adjusted_rand_s = metrics.adjusted_rand_score(y, pre_y) # 互信息 mutual_info_s = metrics.mutual_info_score(y, pre_y) # 調整后的互信息 adjusted_mutual_info_s = metrics.adjusted_mutual_info_score(y, pre_y) # 同質化得分 homogeneity_s = metrics.homogeneity_score(y, pre_y) # 完整性得分 completeness_s = metrics.completeness_score(y, pre_y) # V-measure得分 v_measure_s = metrics.v_measure_score(y, pre_y) # 平均輪廓系數 silhouette_s = metrics.silhouette_score(X, pre_y, metric='euclidean') # Calinski 和 Harabaz 得分 calinski_harabaz_s = metrics.calinski_harabaz_score(X, pre_y) df_metrics = pd.DataFrame([[inertias, adjusted_rand_s,mutual_info_s, adjusted_mutual_info_s, homogeneity_s,completeness_s,v_measure_s, silhouette_s ,calinski_harabaz_s]], columns=['ine','tARI','tMI','tAMI','thomo','tcomp','tv_m','tsilh','tc&h']) df_metrics
## 模型可視化## centers = kmeans.cluster_centers_ # 顏色設置 colors = ['green', 'pink'] # 創建畫布 plt.figure(figsize=(12,6)) titles = ['Real', 'Predict'] for j, y_ in enumerate([y, pre_y]): plt.subplot(1,2, j+1) plt.title(titles[j]) # 循環讀類別 for i in range(n_clusters): # 找到相同的索引 index_sets = np.where(y_ == i) # 將相同類的數據劃分為一個聚類子集 cluster = X[index_sets] # 展示樣本點 plt.scatter(cluster[:, 0], cluster[:, 1], c=colors[i], marker='.') if j==1: # 簇中心 plt.plot(centers[i][0], centers[i][1], 'o',markerfacecolor=colors[i],markeredgecolor='k', markersize=6) plt.savefig('xx.png') plt.show()
評估指標解析:
inertias:inertias是K均值模型對象的屬性,表示樣本距離最近的聚類中心的總和,它是作為在沒有真實分類結果標簽下的非監督式評估指標。該值越小越好,值越小證明樣本在類間的分布越集中,即類內的距離越小。
adjusted_rand_s:調整后的蘭德指數(Adjusted Rand Index),蘭德指數通過考慮在預測和真實聚類中在相同或不同聚類中分配的所有樣本對和計數對來計算兩個聚類之間的相似性度量。調整后的蘭德指數通過對蘭德指數的調整得到獨立于樣本量和類別的接近于0的值,其取值范圍為[-1, 1],負數代表結果不好,越接近于1越好意味著聚類結果與真實情況越吻合。
mutual_info_s:互信息(Mutual Information, MI),互信息是一個隨機變量中包含的關于另一個隨機變量的信息量,在這里指的是相同數據的兩個標簽之間的相似度的量度,結果是非負值。
adjusted_mutual_info_s:調整后的互信息(Adjusted Mutual Information, AMI),調整后的互信息是對互信息評分的調整得分。它考慮到對于具有更大數量的聚類群,通常MI較高,而不管實際上是否有更多的信息共享,它通過調整聚類群的概率來糾正這種影響。當兩個聚類集相同(即完全匹配)時,AMI返回值為1;隨機分區(獨立標簽)平均預期AMI約為0,也可能為負數。
homogeneity_s:同質化得分(Homogeneity),如果所有的聚類都只包含屬于單個類的成員的數據點,則聚類結果將滿足同質性。其取值范圍[0,1]值越大意味著聚類結果與真實情況越吻合。
completeness_s:完整性得分(Completeness),如果作為給定類的成員的所有數據點是相同集群的元素,則聚類結果滿足完整性。其取值范圍[0,1],值越大意味著聚類結果與真實情況越吻合。
v_measure_s:它是同質化和完整性之間的諧波平均值,v = 2 (均勻性完整性)/(均勻性+完整性)。其取值范圍[0,1],值越大意味著聚類結果與真實情況越吻合。
silhouette_s:輪廓系數(Silhouette),它用來計算所有樣本的平均輪廓系數,使用平均群內距離和每個樣本的平均最近簇距離來計算,它是一種非監督式評估指標。其最高值為1,最差值為-1,0附近的值表示重疊的聚類,負值通常表示樣本已被分配到錯誤的集群。
calinski_harabaz_s:該分數定義為群內離散與簇間離散的比值,它是一種非監督式評估指標。
感謝各位的閱讀,以上就是“python聚類分析是什么”的內容了,經過本文的學習后,相信大家對python聚類分析是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。