欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kmeans均值聚類算法原理以及Python如何實現(xiàn)

 更新時間:2020年09月26日 15:26:37   作者:Geeksongs  
這個算法中文名為k均值聚類算法,首先我們在二維的特殊條件下討論其實現(xiàn)的過程,方便大家理解。

第一步.隨機生成質(zhì)心

由于這是一個無監(jiān)督學(xué)習(xí)的算法,因此我們首先在一個二維的坐標(biāo)軸下隨機給定一堆點,并隨即給定兩個質(zhì)心,我們這個算法的目的就是將這一堆點根據(jù)它們自身的坐標(biāo)特征分為兩類,因此選取了兩個質(zhì)心,什么時候這一堆點能夠根據(jù)這兩個質(zhì)心分為兩堆就對了。如下圖所示:

第二步.根據(jù)距離進行分類

紅色和藍色的點代表了我們隨機選取的質(zhì)心。既然我們要讓這一堆點的分為兩堆,且讓分好的每一堆點離其質(zhì)心最近的話,我們首先先求出每一個點離質(zhì)心的距離。假如說有一個點離紅色的質(zhì)心比例藍色的質(zhì)心更近,那么我們則將這個點歸類為紅色質(zhì)心這一類,反之則歸于藍色質(zhì)心這一類,如圖所示:

第三步.求出同一類點的均值,更新質(zhì)心位置

在這一步當(dāng)中,我們將同一類點的x\y的值進行平均,求出所有點之和的平均值,這個值(x,y)則是我們新的質(zhì)心的位置,如圖所示:

我們可以看到,質(zhì)心的位置已經(jīng)發(fā)生了改變。

第四步.重復(fù)第二步,第三步

我們重復(fù)第二步和第三部的操作,不斷求出點對質(zhì)心的最小值之后進行分類,分類之后再更新質(zhì)心的位置,直到得到迭代次數(shù)的上限(這個迭代次數(shù)是可以我們自己設(shè)定的,比如10000次),或者在做了n次迭代之后,最后兩次迭代質(zhì)心的位置已經(jīng)保持不變,如下圖所示:

這個時候我們就將這一堆點按照它們的特征在沒有監(jiān)督的條件下,分成了兩類了!!

五.如果面對多個特征確定的一個點的情況,又該如何實現(xiàn)聚類呢?

首先我們引入一個概念,那就是歐式距離,歐式距離是這樣定義的,很容易理解:

很顯然,歐式距離d(xi,xj)等于我們每一個點的特征去減去另一個點在該維度下的距離的平方和再開根號,十分容易理解。

我們也可以用另一種方式來理解kmeans算法,那就是使某一個點的和另一些點的方差做到最小則實現(xiàn)了聚類,如下圖所示:

得解!

六:代碼實現(xiàn)

我們現(xiàn)在使用Python語言來實現(xiàn)這個kmeans均值算法,首先我們先導(dǎo)入一個名叫make_blobs的數(shù)據(jù)集datasets,然后分別使用兩個變量X,和y進行接收。X表示我們得到的數(shù)據(jù),y表示這個數(shù)據(jù)應(yīng)該被分類到的是哪一個類別當(dāng)中,當(dāng)然在我們實際的數(shù)據(jù)當(dāng)中不會告訴我們哪個數(shù)據(jù)分在了哪一個類別當(dāng)中,只會有X當(dāng)中數(shù)據(jù)。在這里寫代碼的時候比較特殊,make_blobs庫要求我們必須接受這兩個參數(shù),不能夠只接受X這個數(shù)據(jù)參數(shù),代碼如下

plt.figure(figsize=(15,15))#規(guī)定我們繪圖的大小為12*12

X, y=make_blobs(n_samples=1600,random_state=170)#一共取用1600個sample,同時狀態(tài)設(shè)定為隨機
#不知道這個狀態(tài)隨機是什么意思,只能查有關(guān)這個庫的官方文檔,同時這個數(shù)據(jù)集規(guī)定了是具備三個數(shù)據(jù)中心,也就是三個簇
y_pred=KMeans(n_clusters=3,random_state=170).fit_predict(X)

plt.subplot(221)#表示四個方格當(dāng)中的第一格
plt.scatter(X[:,0],X[:,1],c=y_pred)#表示數(shù)據(jù)的第0個和第1個維度,同時數(shù)據(jù)的colour與predict的結(jié)果有關(guān)
plt.title("The result of the Kmeans")

plt.subplot(222)#表示四個方格當(dāng)中的第一格
plt.scatter(X[:,0],X[:,1],c=y)
plt.title("The Real result of the Kmeans")

array=np.array([[0.60834549,-0.63667341],[-0.40887178,-0.85253229]])
lashen=np.dot(X,array)
y_pred=KMeans(n_clusters=3,random_state=170).fit_predict(lashen)

plt.subplot(223)#表示四個方格當(dāng)中的第一格
plt.scatter(lashen[:,0],lashen[:,1],c=y_pred)#表示數(shù)據(jù)的第0個和第1個維度,同時數(shù)據(jù)的colour與predict的結(jié)果有關(guān)
plt.title("The Real result of the tranfored data")

我們在使用scatter函數(shù)進行繪圖的時候會根據(jù)我們數(shù)據(jù)結(jié)的形狀來編寫相應(yīng)的代碼,這里我們所拿到的X數(shù)據(jù)集的行數(shù)是我們所指定的1600行,因為我們一共拿到了1600個數(shù)據(jù),每一個數(shù)據(jù)僅有兩個特征,也就是在XY軸當(dāng)中的坐標(biāo),因此X是一個二維的ndarray對象(X是numpy當(dāng)中的ndarray對象),我們可以打印出來看看這個數(shù)據(jù)的構(gòu)成,如下圖所示:

同時我們也可以看到y(tǒng)也是ndarray對象,由于我們在采集數(shù)據(jù)的時候僅僅接受了3個簇,make_blobs默認(rèn)接受的是三個簇(或稱cluster)的緣故,因此最后y的值只有0,1,2這三種可能。我們通過matplotlib繪圖,繪制出我們分類的結(jié)果圖,也就是上述代碼的運行結(jié)果如下:

以上就是Kmeans均值聚類算法原理以及Python如何實現(xiàn)的詳細內(nèi)容,更多關(guān)于Kmeans均值聚類算法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python設(shè)置Word頁面紙張方向為橫向

    Python設(shè)置Word頁面紙張方向為橫向

    這篇文章主要為大家詳細介紹了Python設(shè)置Word頁面紙張方向為橫向的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起
    2024-02-02
  • Python break語句詳解

    Python break語句詳解

    這篇文章主要介紹了Python break語句的作用、使用方法,需要的朋友可以參考下
    2014-03-03
  • Python實現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式

    Python實現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式

    有時我們需要將精心設(shè)計的PPT發(fā)布到網(wǎng)絡(luò)上以便于更廣泛的訪問和分享,本文將介紹如何使用Python將PowerPoint轉(zhuǎn)換為HTML格式,需要的可以參考下
    2024-04-04
  • Python中使用異常處理來判斷運行的操作系統(tǒng)平臺方法

    Python中使用異常處理來判斷運行的操作系統(tǒng)平臺方法

    這篇文章主要介紹了Python中使用異常處理來判斷運行的操作系統(tǒng)平臺方法,這個方法比較新穎,,需要的朋友可以參考下
    2015-01-01
  • Python模擬實現(xiàn)全功能貸款計算器

    Python模擬實現(xiàn)全功能貸款計算器

    在個人理財中,貸款計算器是一款非常實用的工具,本文將教你如何使用Python編寫一個全功能的貸款計算器,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Python入門篇之條件、循環(huán)

    Python入門篇之條件、循環(huán)

    本文的主要內(nèi)容是 Python 的條件和循環(huán)語句以及與它們相關(guān)的部分. 我們會深入探討if, while, for以及與他們相搭配的else,elif,break,continue和pass語句.
    2014-10-10
  • 利用python如何處理百萬條數(shù)據(jù)(適用java新手)

    利用python如何處理百萬條數(shù)據(jù)(適用java新手)

    這篇文章主要給大家介紹了關(guān)于利用python如何處理百萬條數(shù)據(jù)的相關(guān)資料,本文的教程非常適用于java新手,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • python用線性回歸預(yù)測股票價格的實現(xiàn)代碼

    python用線性回歸預(yù)測股票價格的實現(xiàn)代碼

    這篇文章主要介紹了python用線性回歸預(yù)測股票價格的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python實現(xiàn)Virginia無密鑰解密

    python實現(xiàn)Virginia無密鑰解密

    這篇文章主要為大家詳細介紹了python實現(xiàn)Virginia無密鑰解密,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • Win10下Python3.7.3安裝教程圖解

    Win10下Python3.7.3安裝教程圖解

    到2019年初,Python3已經(jīng)更新到了Python3.7.3,Python有兩個大版本Python2和Python3,Python3是現(xiàn)在和未來的主流。這篇文章主要介紹了Win10下Python3.7.3安裝教程圖解,非常不錯,感興趣的朋友跟隨小編一起看看吧
    2019-07-07

最新評論