1. 程式人生 > 其它 >k-means聚類演算法原理

k-means聚類演算法原理

k-means演算法原理

k-means是一種無監督的分類演算法,簡而言之就是餵給演算法的資料是沒有標籤的,但是我們需要自己設定k值(分類數)。如顆粒影象中有四種顏色,則設立k值為4.而相反,KNN分類演算法是一種有監督的演算法,我們餵給演算法的資料是有標籤的。
KNN屬於監督學習,類別是已知的,通過對已知分類的資料進行訓練和學習,找到這些不同類的特徵,再對未分類的資料進行分類。
Kmeans屬於非監督學習,事先不知道資料會分為幾類,通過聚類分析將資料聚合成幾個群體。聚類不需要對資料進行訓練和學習。

演算法原理

K-Means演算法的特點是類別的個數是人為給定的,如果讓機器自己去找類別的個數,通過一次次重複這樣的選擇質心-計算距離後分類-再次選擇新質心的流程,直到我們分組之後所有的資料都不會再變化了,也就得到了最終的聚合結果。

演算法過程

(1)隨機選取k個質心(k值取決於你想聚成幾類)
(2)計算樣本到質心的距離,距離質心距離近的歸為一類,分為k類
(3)求出分類後的每類的新質心
(4)再次計算計算樣本到新質心的距離,距離質心距離近的歸為一類
(5)判斷新舊聚類是否相同,如果相同就代表已經聚類成功,如果沒有就迴圈2-4步驟直到相同

KMeans演算法例項講解

(1)隨機選取k個質心(k值取決於你想聚成幾類)
假設我想聚3類,那我們隨機選取【紅色、白色、綠色】這3個電影作為質心。
(2)計算樣本到質心的距離,距離質心距離近的歸為一類,分為k類
計算除質心(大佬)外的樣本(小弟)的歐式距離,樣本(小弟)離哪個質心(大佬)近,該樣本就跟哪個質心(大佬)同一個類別。
(3)求出分類後的每類的新質心


上面我們已經分為三類了,我們需要從三類中重新選出大佬(質心)。
A將紅色、白色、綠色的平均值做A類的大佬。
(4)再次計算計算樣本到新質心的距離,距離質心距離近的歸為一類
(5)判斷新舊聚類是否相同
經過這次計算我們發現聚類情況並沒有變化,這就說明我們的計算收斂已經結束了,不需要繼續進行分組了,最終資料成功按照相似性分成了三組。

演算法程式設計

第一步:匯入必要包

import pandas as pd
from sklearn.cluster import KMeans

第二步:讀入資料

data=pd.read_excel("kmeans.xlsx")
data

第三步:切分資料集
這個就比較簡單了,直接找出訓練集feature(train_x)

train_x=data.iloc[0:10,1:4]#紅色部分

第四步:建模預測

kmeans = KMeans(n_clusters=3)#n_clusters=3即指定劃分為3個型別
kmeans.fit(train_x)#模型訓練
y_kmeans = kmeans.predict(train_x)#模型預測
y_kmeans

最終模型輸出結果為一個數組,它和電影名稱是對應的.

參考博文:(最通俗的話解釋KNN,KMeans演算法)[https://zhuanlan.zhihu.com/p/122195108]