K means聚類演算法

2021-08-27 03:36:50 字數 2730 閱讀 1898

k-means演算法是一種基於劃分的聚類演算法,以距離作為資料物件間相似性度量的標準,即資料物件間的距離越小,則它們的相似性越高,則它們越有可能在同乙個類簇。資料物件間距離的計算有很多種,k-means演算法通常採用歐氏距離來計算資料物件間的距離。

(1)計算資料物件的距離

k-means通常採用歐氏距離來計算資料物件間的距離。下面給出歐式距離的計算公式: 

(2)聚類過程中,每次迭代,對應的類簇中心需要重新計算(更新):對應類簇中所有資料物件的均值,即為更新後該類簇的類簇中心。定義第k個類簇的類簇中心為centerk,則類簇中心更新方式如下:

其中,ck表示第k個類簇,|ck|表示第k個類簇中資料物件的個數,這裡的求和是指類簇ck中所有元素在每列屬性上的和,因此centerk也是乙個含有d個屬性的向量,表示為centerk=(centerk,1,centerk,2,...,centerk,d)。

k-means演算法思想可描述為:首先初始化k個類簇中心;然後計算各個資料物件到聚類中心的距離,把資料物件劃分至距離其最近的聚類中心所在類簇中;接著根據所得類簇,更新類簇中心;然後繼續計算各個資料物件到聚類中心的距離,把資料物件劃分至距離其最近的聚類中心所在類簇中;接著根據所得類簇,繼續更新類簇中心;……一直迭代,直到達到最大迭代次數t,或者兩次迭代j的差值小於某一閾值時,迭代終止,得到最終聚類結果。

#%% 

import numpy as np

from sklearn import datasets

iris = datasets.load_iris()

x, y = iris.data, iris.target

k= 3

x = x[:,[0,1]]

tempx= (np.max(x,0)-np.min(x,0))

center = np.min(x,0)+np.random.rand(4,1)*tempx

maxepoch = 10

number = 150

#%%

def distance(x,y):

return np.sqrt(np.sum(np.power(x-y,2)))

def run():

print("center: ")

print(center)

for i in range(maxepoch):

result =[ for i in range(k)]

for j in range(number):

dis = np.argmin([distance(x[j],center[jj]) for jj in range(k)])

for a in range(k):

center[a] = np.mean(result[a],0)

#mean() 函式定義:

#numpy.mean(a, axis, dtype, out,keepdims )

#mean()函式功能:求取均值

#經常操作的引數為axis,以m * n矩陣舉例:

#axis 不設定值,對 m*n 個數求均值,返回乙個實數

#axis = 0:壓縮行,對各列求均值,返回 1* n 矩陣

#axis =1 :壓縮列,對各行求均值,返回 m *1 矩陣

return result

def draw_pic(result):

import matplotlib.pyplot as plt

for jj in range(k):

xx=yy=

xx = [x[0] for x in result[jj]]

yy= [x[1] for x in result[jj]]

plt.scatter(xx, yy)

plt.scatter(center[jj][0],center[jj][1])

plt.show()

result = run()

draw_pic(result)

(鳶尾花資料集:

ris鳶尾花資料集包含3個不同品種的鳶尾花(setosa,versicolour,and virginica)資料,花瓣和萼片長度,儲存在乙個150*4的 numpy.ndarry中150行4列,150行指150多花,4列分別是sepal length,sepal width, petal length and petal width)

實現結果: 

k-means演算法優缺點分析

-優點:

演算法簡單易實現; 

-缺點:

需要使用者事先指定類簇個數kk; 

聚類結果對初始類簇中心的選取較為敏感; 

容易陷入區域性最優; 

只能發現球型類簇;

k-means演算法改進方法

初始類簇中心的選取,可以通過k-means++演算法進行改進。

K Means聚類演算法

k means聚類演算法 intergret kmeans演算法的基本思想是初始隨機給定k個簇中心,按照最鄰近原則把待分類樣本點分到各個簇。然後按平均法重新計算各個簇的質心,從而確定新的簇心。一直迭代,直到簇心的移動距離小於某個給定的值。k means聚類演算法主要分為三個步驟 1 第一步是為待聚類...

聚類演算法 K means

演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚類中的物件相似度較小。聚類相似度是利用各聚類中物件的均值所獲得乙個 中心物件 引力中心 來進行計算的。k means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演...

k means聚類演算法

說到聚類,得跟分類區別開來,分類是按人為給定的標準將樣本歸到某個類別中去,在機器學習中多是監督學習,也就是訓練樣本要給標籤 正確的類別資訊 而聚類是在某種規則下自動將樣本歸類,在機器學習中是無監督學習,不需要提前給樣本打標籤。k means聚類演算法,就是在某種度量方式下,將樣本自動劃分到k個類別中...