使用Python進行K均值聚類

2020-12-11 不靠譜的貓

在機器學習中,當我們要處理一個未標記的數據集時,稱為「無監督學習」。有時我們只是想知道我們的數據是如何組織起來的這樣我們就能知道數據是如何組織起來的。聚類意味著對一組對象進行分組。

K-means聚類是無監督學習的一部分,我們使用的是未標記的數據集,這個算法會自動為我們將數據分組成聚類。它是目前最流行、應用最廣泛的聚類算法之一。它用於各種應用程式,例如市場細分,圖像細分等。

該算法將接受兩個輸入:

a)K(它是您想要的群聚類數)

b)訓練數據集

表示形式:

K =聚類數C稱為聚類質心m =訓練實例數idx C(i)=已將實例X(i)分配給聚類的聚類質心看一個示例,使您可以清楚地看到此符號

聚類分配步驟:

在此步驟中,我們將根據數據集中最接近的聚類質心向數據集中分配一個聚類質心,並為分配的數據集上色。這是通過計算歐幾裡德距離來實現的。

經過隨機定義的聚類質心和聚類分配步驟後,如下所示:

隨機初始化
在聚類分配步驟之後

移動質心的步驟:

我們要做的是獲取兩個聚類質心,即紅x和藍x,然後將它們移動到相同顏色點的平均值。因此,我們要做的是查看所有紅色點並計算平均值,實際上,平均值是所有紅色點的位置,然後將紅色聚類質心移到那裡。藍色x也是如此。計算出質心後,我們可以看到質心的位置發生了變化,如下所示:

K-均值的優化目標:

這稱為distortion函數

局部最優:

不幸的是,通過隨機初始化K-means算法也可能被卡在不同的局部最優值上,在左邊的圖中,藍色的聚類捕獲了大量的點,而紅色、綠色的聚類則對相對擁有較少的點。

為了得到如圖所示的最佳全局最優解,我們可以多次嘗試對聚類質心進行隨機初始化,並多次運行K-means算法,從而得到儘可能好的局部最優解或全局最優解。

選擇聚類數:

我們通常知道K的值,否則我們用肘部法。

我們針對不同的K值(例如K = 10到1)運行算法,並繪製K值與distortion的關係。如圖所示,選擇elbow點的K值。

使用python實現:

導入Python庫

import numpy as npimport pandas as pdimport matplotlib.pyplot as plt

導入機器學習數據集

X = pd.read_csv("data1.csv")

可視化數據集

a = X['0'].valuesb = X['1'].valuesX = np.array(list(zip(a, b)))plt.scatter(a, b , c='black', s=7)

定義K值並隨機初始化點

K = 3c_x = np.random.randint(0 , np.max(X) , size = K)c_y = np.random.randint(0 , np.max(X) , size = K)c = np.array(list(zip(c_x,c_y)),dtype = np.float32)

我們的聚類質心在這些點上,它們是隨機選擇的

[[6. 1.][4. 5.][5. 4.]]

聚類分配

將每個輸入值分配給最近的中心

計算質心

我們通過獲取分配給該聚類的所有點的平均值來找到新質心。

進行可視化

相關焦點

  • 圖解機器學習-聚類(k均值)
    聚類的相似性度量歐氏距離(Euclidean Distance)是聚類相似性計算距離的一種方法,來自幾何數學中計算兩點間的距離公式。兩個n維向量a(x11,x12,…,x1n)與 b(x21,x22,…,x2n)間的歐氏距離如下圖:K均值聚類(K-means) 算法K均值算法偽代碼,來自周志華《機器學習》圖解分析
  • 人工智慧算法|K均值聚類算法Python實現
    以下是K均值法的python代碼實現。程序使用的工具包括numpy和matplotlib,其中numpy是一個用於處理多維數組的庫,而Matplotlib 則用於繪製二維圖形。# 初始化k個質心,隨機獲取def initCentroids(dataSet, k):    return random.sample(dataSet,k)  # 從dataSet中隨機獲取k個數據項返回def minDistance(dataSet, centroidList):    # 對每個屬於dataSet的item,計算item
  • 有了K均值聚類,為什麼還需要DBSCAN聚類算法?
    所有聚類法都使用相同的方法,即首先計算相似度,然後使用相似度將數據點聚類為組或群。本文將重點介紹具有噪聲的基於密度的聚類方法(DBSCAN)。既然已經有了K均值聚類,為什麼還需要DBSCAN這樣的基於密度的聚類算法呢?K均值聚類可以將鬆散相關的觀測聚類在一起。
  • k均值聚類算法原理和(TensorFlow)實現(無師自通)
    顧名思義,k均值聚類是一種對數據進行聚類的技術,即將數據分割成指定數量的幾個類,揭示數據的內在性質及規律。
  • 不足 20 行 Python 代碼,高效實現 k-means 均值聚類算法!
    k-means均值算法雖然是聚類算法中比較簡單的一種,卻包含了豐富的思想內容,非常適合作為初學者的入門習題。關於 k-means 均值聚類算法的原理介紹、實現代碼,網上有很多,但運行效率似乎都有點問題。今天稍微有點空閒,寫了一個不足20行的 k-means 均值聚類算法,1萬個樣本平均耗時20毫秒(10次均值)。同樣的數據樣本,網上流行的算法平均耗時3000毫秒(10次均值)。
  • python之kmeans數據聚類算法
    圖3kmeans實現邏輯:需要輸入待聚類的數據和欲聚類簇數k1.隨機生成k個初始點作為質心>2.將數據集中的數據按照距離質心的遠近分到各個簇中3.對每個簇的數據求平均值,作為新的質心,重複上一步,直到所有的簇不再改變k是聚類個數,可以根據我們的經驗給數值,也可以通過程序初步預測k設置為多少對聚類最準確。
  • python機器學習之k-means聚類算法(1)
    k-means算法是一種無監督的機器學習算法,雖然是機器學習,但它簡單易於實現。本篇採用python語言,自主編程實現k-menas算法,當然python用專門的庫函數來實現該算法,但本次主要使用該算法闡述編程思想,所以不採用內置函數。採用自主編寫的程序的方式。
  • 算法雜貨鋪——k均值聚類(K-means)
    本文首先介紹聚類的基礎——距離與相異度,然後介紹一種常見的聚類算法 ——k均值和k中心點聚類,最後會舉一個實例:應用聚類方法試圖解決一個在體育界大家頗具爭議的問題——中國男足近幾年在亞洲到底處於幾流水平。4.2、相異度計算      在正式討論聚類前,我們要先弄清楚一個問題:如何定量計算兩個可比較元素間的相異度。
  • R語言做K均值聚類的一個簡單小例子
    /k均值聚類是一種比較常用的聚類方法,R語言裡做k均值聚類比較常用的函數是kmeans(),需要輸入3個參數,第一個是聚類用到的數據,第二個是你想將數據聚成幾類k,第三個參數是nstarthttps://www.datanovia.com/en/lessons/k-means-clustering-in-r-algorith-and-practical-examples
  • 使用Python復現SIGKDD2017的PAMAE算法(並行k-medoids算法)
    項目介紹PAMAE: Parallel k-Medoids Clustering with High Accuracy and Efficiency 是SIGKDD2017一篇關於k-medoids並行聚類的論文,論文中作者使用Spark與Hadoop實現算法的並行化,而本項目使用python並行編程模擬MapReduce的並行,對該論文算法的思想進行復現。
  • 機器學習算法實踐 K均值聚類的實用技巧
    在本文中,他詳細介紹了一種稱為 K-Means Clustering(k均值聚類)的算法,其中包括如何衡量算法效果,以及如何確定你需要生成的數據段集數量。雷鋒網編譯整理,更多AI開發技術文章,關注AI研習社(微信號:okweiwu)。Bilal Mahmood:我們最常做的分析之一,便是在數據中提取模式。 比方說,某公司的客戶可被劃分入哪些細分市場?
  • 使用K-means 算法進行客戶分類
    作為Patterns7團隊不斷嘗試的機器學習計劃和創新事物的一部分,我們對K-Means聚類算法進行了實驗,這為客戶帶來的價值非常驚人。,xn),其中每一個觀測值都是d維實數向量,K均值聚類旨在將n個觀測值劃分為k(k≤n)個集合S={S1,S2,...,Sk}以最小化聚類內的平方和,其中µi是Si中的點的平均值。保證K-Means算法收斂到局部最優。
  • 機器學習算法實踐之K均值聚類的實用技巧
    在本文中,他詳細介紹了一種稱為 K-Means Clustering(k均值聚類)的算法,其中包括如何衡量算法效果,以及如何確定你需要生成的數據段集數量。雷鋒網編譯整理,更多AI開發技術文章,關注AI研習社(微信號:okweiwu)。Bilal Mahmood:我們最常做的分析之一,便是在數據中提取模式。 比方說,某公司的客戶可被劃分入哪些細分市場?
  • 聚類算法——k均值和層次聚類
    在生物進化學中,通常會使用包含更多物種和測量的大型數據集推斷這些物種之間的分類學關係。在生物學之外,層次聚類也在機器學習和數據挖掘中使用。重要的是,使用這種方法並不需要像 K-均值聚類那樣設定分組的數量。你可以通過給定高度「切割」樹型以返回分割成的集群。高度的選擇可以通過幾種方式進行,其取決於我們希望對數據進行聚類的解析度。
  • 機器學習之SKlearn(scikit-learn)的K-means聚類算法
    Sklearn聚類算法關於神經網絡的分類與回歸問題,小編前期的文章都分享了很多類似的文章,小夥伴們可以進入小編主頁進行其他類似文章的閱讀,今天我們就來看看Sklearn下面的聚類算法聚類:將相似對象自動分組,常用的算法有:k-Means、 spectral clustering、mean-shift,常見的應用有:客戶細分,分組實驗結果Sklearn官網也列舉了不同的聚類算法的優缺點
  • 手把手教你如何利用K均值聚類實現異常值的識別!
    中,我們詳細分享了如何使用K近鄰的方法完成數據中異常值的查詢。但該方法的最大缺陷在於計算複雜度高,對於大數據而言,識別異常數據將會消耗較長的時間。本期將從K均值聚類的角度,幫助大家理解該方法在異常值識別過程中的優勢!(本文涉及的代碼可以在文末連結中下載)首先,藉助於Python隨機生成兩組二維數據,用於後文的實戰。為了能夠更加直觀地洞察該數據,我們將其繪製成散點圖。
  • K均值聚類算法-Matlab代碼
    一、K均值聚類算法算法步驟如下:1、初始化已知數據集合X,及事先指定聚類的總類數N,在X中隨機選取N個對象作為初始的聚類中心。5、重複步驟3~4,滿足步驟2中的迭代終止條件時,停止Matlab代碼見下圖:K均值聚類算法-Matlab代碼二、K均值聚類算法應用舉例1、隨機生成三組數據隨機生成的三組數據
  • 數字油畫製作中的k均值聚算法
    1數值實驗 在MATLAB2009a的環境下,應用AkMTI-CCI算法和傳統k均值算法,對圖1中的RGB圖像進行顏色聚類.分別取聚類數k=6和k=12,將AkMTI-CCI算法和傳統的k均值算法兩種算法分別運行10次.1)由算法運行時間表(表1)可見,10次實驗中傳統k均值算法收斂速度波動較大,而AkMTI-CCI算法收斂速度比較穩定;且傳統k均值算法平均收斂速度均大於
  • 聚類算法之Kmeans
    但是為何這篇只提Kmeans,是因為Kmeans是算法理解簡單,而又使用最多,並且從原理上來說,其它的聚類算法只是其算法或求解思路有些差別,但是其核心思路還是一致,具體做的事也是有著同一個目標,故而這篇我們重點詳細單獨闡述Kmeans算法。對於其它聚類算法,如果必要,我們在下一篇再進行展開。
  • k-means聚類算法原理總結
    表示簇類k的均值向量。目標函數(1.1)在一定程度上刻畫了簇內樣本圍繞簇均值向量的緊密程度,J值越小則簇內樣本相似度越高。最小化目標函數是一個NP難題,k-means聚類運用EM算法思想實現模型的最優化。