聚類算法入門:k-means

2021-01-10 曾二爺yeah

一、聚類定義

聚類分析(cluster analysis)就是給你一堆雜七雜八的樣本數據把它們分成幾個組,組內成員有一定的相似,不同組之間成員有一定的差別。

區別與分類分析(classification analysis) 你事先並不知道有哪幾類、劃分每個類別的標準。

比如垃圾分類就是分類算法,你知道豬能吃的是溼垃圾,不能吃的是幹垃圾……;打掃房間時你把雜物都分分類,這是聚類,你事先不知道每個類別的標準。

二、劃分聚類方法: K-means:

對於給定的樣本集,按照樣本之間的距離(也就是相似程度)大小,將樣本集劃分為K個簇(即類別)。讓簇內的點儘量緊密的連在一起,而讓簇間的距離儘量的大。

步驟1:隨機取k個初始中心點步驟2:對於每個樣本點計算到這k個中心點的距離,將樣本點歸到與之距離最小的那個中心點的簇。這樣每個樣本都有自己的簇了步驟3:對於每個簇,根據裡面的所有樣本點重新計算得到一個新的中心點,如果中心點發生變化回到步驟2,未發生變化轉到步驟4步驟4:得出結果

就像這樣:

缺點:初始值敏感、採用迭代方法,得到的結果只是局部最優、K值的選取不好把握、對於不是凸的數據集比較難收斂如何衡量Kmeans 算法的精確度?SSE(Sum of Square Error) 誤差平方和, SSE越小,精確度越高。

三、改進算法-二分Kmeans

首先將所有點作為一個簇,然後將其一分為二。每次選擇一個簇一分為二,選取簇的依據取決於其是否能最大程度降低SSE即選取聚類後SSE最小的一個簇進行劃分。直至有k個簇四、Kmeans Code

import numpy as npimport matplotlib.pyplot as pltimport scipy.io as scio# %matplotlib inlinedefK_Means(X, sp, K):# 計算臨近點defnear(p): dis =[np.sum(np.square(x-p))for x in sp]return dis.index(min(dis))# 列印結果defprint_result(sp_list):#列印中心點迭代軌跡 sp_list =[np.array([x[k]for x in sp_list])for k inrange(K)]for k inrange(K): plt.plot(sp_list[k][:,0], sp_list[k][:,1],'k->', label='type{}'.format(k))#分類列印其他點 p_list =[[]for k inrange(K)]for p in X: i = near(p) p_list[i].append(p) p_list =[np.array(x)for x in p_list] color =['r','g','b']for i inrange(K): plt.plot(p_list[i][:,0], p_list[i][:,1],color[i]+'o') plt.title('K-Means Result') plt.xlabel('X') plt.ylabel('Y') plt.legend('123') plt.show()# 迭代中心點 sp_list =[] sp_list.append(sp)whileTrue: count = np.zeros(K) sp_t = np.zeros((K,2))for p in X: i = near(p) count[i]+=1 sp_t[i]+= p sp_t = np.array([sp_t[i]/count[i]for i inrange(K)]) SSE = np.sum(np.square(sp-sp_t))if SSE <0.001:break sp = sp_t sp_list.append(sp) print_result(sp_list)print('聚類中心:')for p in sp:print(p, end=',')if __name__ =='__main__': data = scio.loadmat('ex7data2.mat') X = data['X'] K =3 sp = np.array([[3,3],[6,2],[8,5]])# starting point K_Means(X, sp, K)

kmeans聚類結果

K為3聚類中心: [1.95399466 5.02557006],[3.04367119 1.01541041],[6.03366736 3.00052511]

相關焦點

  • 機器學習算法之K-means算法
    K-means舉例shi'li1 K-means算法簡介k-means算法是一種聚類算法,所謂聚類,即根據相似性原則,將具有較高相似度的數據對象劃分至同一類簇,將具有較高相異度的數據對象劃分至不同類簇。
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    K-Means聚類是機器學習領域中最強大的聚類算法之一。他的原因比較簡單,但得出的結果也非常準確。聚類是理解數據集的非常重要的方式,因此在本文中,我們將討論什麼是聚類,為什麼需要聚類以及什麼是k-means聚類。
  • 機器學習之分類算法K-Means介紹與代碼分析(篇四)
    k-平均聚類的目的是:把n個點(可以是樣本的一次觀察或一個實例)劃分到k個聚類中,使得每個點都屬於離他最近的均值(此即聚類中心)對應的聚類,以之作為聚類的標準。這個問題將歸結為一個把數據空間劃分為Voronoi cells的問題。這個問題在計算上是NP困難的,不過存在高效的啟發式算法。
  • 如何用聚類模型(k-means)做數據分析?
    一k-means算法與距離K-means聚類的目標,是將n個觀測數據點按照一定標準劃分到k個聚類中,數據點根據相似度劃分。每一個聚類有一個質心,質心是對聚類中所有點的位置求平均值得到的點。每個觀測點屬於距離它最近的質心所代表的聚類。
  • 集成聚類系列(三)圖聚類算法詳解
    圖聚類算法研究現狀聚類分析是一種常用的機器學習技術,它的目的是將一個數據點劃分為幾個類。同一個類的數據之間具有較高的相似性,不同的類之間的相似度較低。很多研究已表明圖聚類是一種極具競爭力的聚類算法,圖聚類是一種基於圖劃分理論的算法。與其他聚類算法相比,圖聚類算法有些明顯的優勢。該方法可識別任意形狀的聚類,使其在現實生活中得到廣泛的應用。
  • 機器學習——詳解經典聚類算法Kmeans
    我們知道可以通過KNN算法由距離公式找到最近的K個鄰居,通過鄰居的結果來推測當前的結果。今天我們要來看的算法同樣非常直觀,也是最經典的聚類算法之一,它就是Kmeans。我們都知道,在英文當中Means是平均的意思,所以也有將它翻譯成K-均值算法的。
  • 簡潔詳盡講解文本聚類
    起初,用於單詞和文檔的聚類的大量方法似乎不勝枚舉,讓我們仔細研究其中幾種。本文涵蓋的主題包括k均值,布朗聚類,tf-idf聚類,主題模型和潛在的Dirichlet分配(也稱為LDA)。聚類是數據科學中最大的主題之一,其規模如此之大,以至於你很容易會發現有大量書籍正探討它的每一個細節。文本聚類的子主題也不例外。
  • 神經網絡篇——代碼實現密度聚類DBSCAN
    一提到密度聚類,腦海中立馬就能呈現出一個聚類結果圖,不自然的就感覺非常的簡單,不就是基於密度的聚類嘛,原理不用看也懂了,但是真的實現起來,仿佛又不知道從哪裡開始下手。這時候再仔細回想一下腦海中的密度聚類結果圖,好像和K-means聚類的結果圖是一樣的,那真實的密度聚類是什麼樣子的呢?看了西瓜書的偽代碼後還是沒法實現?今天小編就帶大家解決一下密度聚類的難點。
  • 「機器學習」機器學習算法優缺點對比(匯總篇)
    主要回顧下幾個常用算法的適應場景及其優缺點!機器學習算法太多了,分類、回歸、聚類、推薦、圖像識別領域等等,要想找到一個合適算法真的不容易,所以在實際應用中,我們一般都是採用啟發式學習方式來實驗。K-Means聚類是一個簡單的聚類算法,把n的對象根據他們的屬性分為k個分割,k< n。算法的核心就是要優化失真函數J,使其收斂到局部最小值但不是全局最小值。關於K-Means聚類的文章,參見機器學習算法-K-means聚類。
  • 數據科學新手最適合使用的5大算法
    一般而言,機器學習算法分為4類:· 監督算法:在運行過程中需要開發人員的監督。為此,開發人員可以標記訓練數據並為要遵循的算法設置嚴格的規則和界限。· 無監督算法:開發人員不直接控制的算法。在這種情況下,算法的期望結果是未知的,需要由算法定義。
  • Python異常值檢測——kNN算法
    異常值檢驗方法有很多,針對不同數據特點,時間序列數據和截面數據的檢測方法不完全相同,其時常要考慮到數據特性,本次主要介紹相關的時序數據異常值檢測算法。今天介紹kNN算法(k--NearestNeighbor算法),又稱k-近鄰算法。簡單來說就是近朱者赤近墨者黑。
  • k歌的機器人好煩_機器學習k-means聚類中k的選取 - CSDN
    我們知道文本相似度算法有很經典的比如邊際距離、TF-IDF、BM25,這種都是非常經典的算法,我這裡對算法部分就不做更多深入的描述了,大家如果感興趣的話,推薦大家去聽一個課程CS 224N,這個課程是斯坦佛大學Christopher Manning教授零幾年上的一門課,應該就是叫NLP(自然語言處理)這門課,它對經典的自然語言處理算法都做了非常好的解釋。
  • 從理論到實踐,一文詳解 AI 推薦系統的三大算法
    算法邏輯作為CF的兩大基本分類,鄰域的相關算法比較簡單不再介紹,本文主要介紹SVD,不過在介紹SVD之前,先對K-Means做個簡單的說明K-means算法介紹推薦系統大多數都是基於海量的數據進行處理和計算,要在海量數據的基礎上進行協同過濾的相關處理,運行效率會很低,為了解決這個問題通常是先使用K-means