【無監督學習】K-means聚類算法原理介紹,以及代碼實現

2021-02-22 Python愛好者社區

作者:zzZ_CMing

博客:http://blog.csdn.net/zzz_cming

作者好文推薦:

CNN卷積神經網絡原理講解+圖片識別應用(附源碼)

BP神經網絡+TensorFlow做圖片識別

RNN遞歸神經網絡原理介紹+數字識別應用

前言:粗略研究完神經網絡基礎——BP、CNN、RNN、LSTM網絡後自己算是鬆懈了很多,好長的時間都沒有堅持再更新博客了。「腐敗」生活了這麼久,還是要找到自己一點樂趣吧,於是想了一想,決定把《機器學習》的算法研究過得都重新梳理一遍,於是就從無監督學習——聚類開始了

什麼是無監督學習?

無監督學習也是相對於有監督學習來說的,因為現實中遇到的大部分數據都是未標記的樣本,要想通過有監督的學習就需要事先人為標註好樣本標籤,這個成本消耗、過程用時都很巨大,所以無監督學習就是使用無標籤的樣本找尋數據規律的一種方法

聚類算法就歸屬於機器學習領域下的無監督學習方法。

無監督學習的目的是什麼呢?

分類和聚類的區別是什麼呢?

對於分類來說,在給定一個數據集,我們是事先已知這個數據集是有多少個種類的。比如一個班級要進行性別分類,我們就下意識清楚分為「男生」、「女生」兩個類;該班又轉入一個同學A,「男ta」就被分入「男生」類;

而對於聚類來說,給定一個數據集,我們初始並不知道這個數據集包含多少類,我們需要做的就是將該數據集依照某個「指標」,將相似指標的數據歸納在一起,形成不同的類;

分類是一個後續的過程,已知標籤數據,再將測試樣本分入同標籤數據集中;聚類是不知道標籤,將「相似指標」的數據強行「擼」在一起,形成各個類。

聚類算法主要包含:K-means、DBSCAN(未完善)


一、K-means聚類算法1.1、K-means 算法思想、算法描述1.2、K-means 算法運行圖示

(a)圖:展示出樣本集空間中各個數據點的分布情況;

(b)圖:給定了兩個中心點:紅叉叉點、藍叉叉點;

(c)圖:樣本集中的數據點,離哪個中心點近,就把數據點分屬到哪個類別中;

(d)圖:在分屬好的類別中依照類內距離的平均值,得到新的中心點——原有中心點就從(c)圖中的位置轉移到新的中心點位置;

(e)圖:在得到新的中心點後,再依據離哪個中心點近,就把數據點分屬到哪個類別中的方法,重新劃分聚類;直到成(f)圖,中心點不再變化,聚類結束。


1.3、舉實例使用K-means算法進行聚類

舉個慄子:我們有五個樣本點a(0,2)、b(0,0)、c(1.5,0)、d(5,0)、e(5,2),選取前兩個樣本點a(0,2)、b(0,0)作為初始聚類中心點A、B,開始聚類:

對於點c(1.5,0),到a點的(歐式)距離為2.5,到b點距離為1.5,所以c點分配給B類;

同例,d點分入B類、e點分入A類;於是更新後得到的新簇:A類={a,e},B類={b,c,d}

每迭代一次都計算一次平均誤差:平均誤差是等於新簇內的點到原有中心點距離的平方和,例如 
再得到總體的平均誤差E=25+27.25=52.25

重新計算新的簇內中心點:A=((0+5)/2,(2+2)/2)=(2.5,2)、B=((0+1.5+5)/3,(0+0+0)/3)=(2.17,0),重複1、2、3步驟,再得到新的平均誤差E=25.62,誤差顯著減小。由於經過兩次迭代後,中心點不再變化,所以停止迭代,聚類結束。


1.4、K-means 算法優缺點
1.5、K值的選取原則——肘部法則

由於K-means 算法對初選的K值是敏感的,計算平均誤差就是為了K值的選取,請看下圖: 

平均誤差會隨K值的選取而改變,隨著K值增大,平均誤差會逐漸降低;極限情況下是每個樣本點是都是一個類,這時的平均誤差E=0,當然這種聚類沒有研究的價值。

那麼哪個K值是最佳選取的值呢——肘部法則,就是選取斜率變化較大的拐點處定為K值點,這只是一種簡單的選取規則,方便簡單而且實用。


1.6、K-means聚類程序展示

# -*- coding:utf-8 -*-# -*- author:zzZ_CMing# -*- 2018/04/10;14:44# -*- python3.5import numpy as npimport matplotlib.pyplot as pltimport sklearn.datasets as dsimport matplotlib.colorsfrom sklearn.cluster import KMeans# 隨機生成數據points_number = 3000centers = 20data,laber=ds.make_blobs(points_number,centers=centers,random_state=0)# 創建Figurefig = plt.figure()# 用來正常顯示中文標籤matplotlib.rcParams['font.sans-serif'] = [u'SimHei']# 用來正常顯示負號matplotlib.rcParams['axes.unicode_minus'] = False# 原始點的分布ax1 = fig.add_subplot(211)plt.scatter(data[:,0],data[:,1],c=laber)plt.title(u'原始數據分布')plt.sca(ax1)# K-means聚類後N = 5model = KMeans(n_clusters = N,init = 'k-means++')y_pre = model.fit_predict(data)ax2 = fig.add_subplot(212)plt.scatter(data[:,0],data[:,1],c=y_pre)plt.title(u'K-Means聚類')plt.sca(ax2)plt.show()

效果展示:

讚賞作者

Python愛好者社區歷史文章大合集

Python愛好者社區歷史文章列表(每周append更新一次)

福利:文末掃碼立刻關注公眾號,「Python愛好者社區」,開始學習Python課程:

關注後在公眾號內回復課程即可獲取:

小編的Python入門視頻課程!!!

崔老師爬蟲實戰案例免費學習視頻。

丘老師數據科學入門指導免費學習視頻。

陳老師數據分析報告製作免費學習視頻。

玩轉大數據分析!Spark2.X+Python 精華實戰課程免費學習視頻。

丘老師Python網絡爬蟲實戰免費學習視頻。

相關焦點

  • K-means 聚類算法及其代碼實現
    K-means算法是非監督學習(unsupervised learning)中最簡單也是最常用的一種聚類算法,具有的特點是:本文章介紹
  • k-means聚類算法原理總結
    k-means算法是非監督聚類最常用的一種方法,因其算法簡單和很好的適用於大樣本數據,廣泛應用於不同領域,本文詳細總結了k-means聚類算法原理
  • K-Means聚類算法詳解
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理
  • 聚類算法之Kmeans
    Kmeans3、kmeans優缺點及其改進4、kmeans的簡單代碼實現 上上期回顧1、我們先做了基本鋪墊,對於最值求解問題進行三種類別劃分,包括無約束問題那麼聚類問題實際上就是屬於無監督(無標籤)學習,自然需要其它的方式來進行判斷是否相似。一般來說,我們會以距離或者相似度來作為相似的度量方式。
  • K-Means聚類算法
    是一種聚類算法,與之前提到的樸素貝葉斯等算法不同,它屬於無監督學習。簡單來說,之前的算法中我們是利用特徵 x 和類別 y 來進行訓練、分類的,而無監督學習是指不需要我們提供具體的類別 y ,而讓數據自己聚在一起,形成 k 個簇,以實現分類的目的。具體方法是通過對給定的樣本進行劃分,分為 k 個簇,使得簇內的點儘量緊密的連在一起,而簇間的距離儘量大,評判的標準就是通過歐氏距離。
  • 不足 20 行 Python 代碼,高效實現 k-means 均值聚類算法!
    k-means均值算法雖然是聚類算法中比較簡單的一種,卻包含了豐富的思想內容,非常適合作為初學者的入門習題。關於 k-means 均值聚類算法的原理介紹、實現代碼,網上有很多,但運行效率似乎都有點問題。今天稍微有點空閒,寫了一個不足20行的 k-means 均值聚類算法,1萬個樣本平均耗時20毫秒(10次均值)。同樣的數據樣本,網上流行的算法平均耗時3000毫秒(10次均值)。
  • k-means聚類算法從入門到精通
    k-means算法是非監督聚類最常用的一種方法,因其算法簡單和很好的適用於大樣本數據,廣泛應用於不同領域,本文詳細總結了k-means聚類算法原理 。目錄1. k-means聚類算法原理2. k-means聚類算法步驟3. k-means++聚類優化算法4.
  • K-Means聚類講解:算法和Sklearn的實現(附代碼)
    K-Means聚類是機器學習領域中最強大的聚類算法之一。他的原因比較簡單,但得出的結果也非常準確。聚類是理解數據集的非常重要的方式,因此在本文中,我們將討論什麼是聚類,為什麼需要聚類以及什麼是k-means聚類。
  • python機器學習之k-means聚類算法(1)
    k-means算法是一種無監督的機器學習算法,雖然是機器學習,但它簡單易於實現。本篇採用python語言,自主編程實現k-menas算法,當然python用專門的庫函數來實現該算法,但本次主要使用該算法闡述編程思想,所以不採用內置函數。採用自主編寫的程序的方式。
  • python之kmeans數據聚類算法
    一 Kmeans原理kmeans是屬於無監督學習的數據聚類算法,根據點與點之間的距離推測每個點屬於哪個中心,常用計算距離的方式有:餘弦距離、歐式距離、曼哈頓距離等,本文以歐式距離為例。圖3kmeans實現邏輯:需要輸入待聚類的數據和欲聚類簇數k1.隨機生成k個初始點作為質心
  • 機器學習十大經典算法之K-Means聚類算法
    聚類介紹聚類在機器學習,數據挖掘,模式識別,圖像分析以及生物信息等領域有廣泛的應用。聚類是把相似的對象通過靜態分類的方法分成不同的組別或者更多的子集(subset),這樣讓在同一個子集中的成員對象都有相似的一些屬性,常見的包括在坐標系中更加短的空間距離(一般是歐式距離)等。
  • k均值聚類算法原理和(TensorFlow)實現(無師自通)
    我們知道,在機器學習中,有三種不同的學習模式:監督學習、無監督學習和強化學習:監督學習,也稱為有導師學習,網絡輸入包括數據和相應的輸出標籤信息。例如,在 MNIST 數據集中,手寫數字的每個圖像都有一個標籤,代表圖片中的數字值。
  • k-means算法
    k-means算法原理K-means中心思想:事先確定常數K,常數K意味著最終的聚類類別數,首先隨機選定初始點為質心,並通過計算每一個樣本與質心之間的相似度
  • 5 分鐘帶你弄懂 K-means 聚類
    今天為大家帶來一種常用的聚類算法——k-means 聚類,本著專業問題通俗化的原則,小飛力求5分鐘帶你弄懂 k-means 聚類。分類:類別是已知的,通過對已知類別的數據進行訓練和學習,找到這些不同類的特徵,再對未知類別的數據進行分類。屬於監督學習。聚類:事先不知道數據會分為幾類,通過聚類分析將數據聚合成幾個群體。聚類不需要對數據進行訓練和學習。屬於無監督學習。
  • 機器學習之SKlearn(scikit-learn)的K-means聚類算法
    在工程應用中,用python手寫代碼來從頭實現一個算法的可能性非常低,這樣不僅耗時耗力,還不一定能夠寫出構架清晰,穩定性強的模型。更多情況下,是分析採集到的數據,根據數據特徵選擇適合的算法,在工具包中調用算法,調整算法的參數,獲取需要的信息,從而實現算法效率和效果之間的平衡。而sklearn,正是這樣一個可以幫助我們高效實現算法應用的工具包。
  • 詳解 kmeans 聚類算法
    也是聚類算法中最簡單的一種了,但是裡面包含的思想卻是不一般。最早我使用並實現這個算法是在學習韓爺爺那本數據挖掘的書中,那本書比較注重應用。看了Andrew Ng的這個講義後才有些明白K-means後面包含的EM思想。聚類屬於無監督學習,以往的回歸、樸素貝葉斯、SVM等都是有類別標籤y的,也就是說樣例中已經給出了樣例的分類。而聚類的樣本中卻沒有給定y,只有特徵x,比如假設宇宙中的星星可以表示成三維空間中的點集。
  • K_means聚類的matlab應用
    本文作者:南海一號在機器學習中,我們往往會遇到很大量的數據的處理,其中有一項就是聚類,即將相似的數據聚到一起,比較基礎的就是K_means聚類算法。聚類是一種無監督學習,不需要訓練樣本有對應的標籤就可以將不同的類分開。利用的就是相同類之間的相似性以及不同類之間的差異性。
  • 算法雜貨鋪——k均值聚類(K-means)
    4.1、摘要      在前面的文章中,介紹了三種常見的分類算法。分類作為一種監督學習方法,要求必須事先明確知道各個類別的信息,並且斷言所有待分類項都有一個類別與之對 應。但是很多時候上述條件得不到滿足,尤其是在處理海量數據的時候,如果通過預處理使得數據滿足分類算法的要求,則代價非常大,這時候可以考慮使用聚類算 法。聚類屬於無監督學習,相比於分類,聚類不依賴預定義的類和類標號的訓練實例。
  • 機器學習算法之K-means算法
    K-means舉例shi'li1 K-means算法簡介k-means算法是一種聚類算法,所謂聚類,即根據相似性原則聚類與分類最大的區別在於,聚類過程為無監督過程,即待處理數據對象沒有任何先驗知識,而分類過程為有監督過程,即存在有先驗知識的訓練數據集。2 K-means算法原理k-means算法中的k代表類簇個數,means代表類簇內數據對象的均值(這種均值是一種對類簇中心的描述),因此,k-means算法又稱為k-均值算法。
  • 機器學習之分類算法K-Means介紹與代碼分析(篇四)
    一般情況下,都使用效率比較高的啟發式算法,它們能夠快速收斂於一個局部最優解。這些算法通常類似於通過迭代優化方法處理高斯混合分布的最大期望算法(EM算法)。而且,它們都使用聚類中心來為數據建模;然而k-平均聚類傾向於在可比較的空間範圍內尋找聚類,期望-最大化技術卻允許聚類有不同的形狀。