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個類別中...