機器學習演算法 之K means聚類

2021-07-09 11:24:12 字數 1703 閱讀 9237

1.模型

k-means演算法並沒有顯式的數學模型,演算法的目的是從資料集中得到k個中心點,每個中心點及其周圍的點形成乙個聚簇。k-means是一種無監督的學習模型。k-means的學習目標如下圖所示:

2.策略

k-mean演算法採用的損失函式是平方損失函式。每個簇的點距離中心的平方距離之和構成損失函式。

3.演算法

首先給出原始資料,這些資料沒有被標記的。

初始化k個隨機資料u1,u2,…,uk作為初始的聚類中心。這些xn和uk都是向量。

根據下面兩個公式迭代就能求出最終所有的u,這些u就是最終所有類的中心位置。

公式一:

意思就是,對於每個資料點,都先求出其與當前所有聚簇中心的距離,然後把該點歸到距離最近的那個中心所代表的簇。

意思就是,在第一輪對所有資料點分配好了聚簇歸屬之後。針對每個簇,求解當前簇中所有資料點的中心,把這個中心資料點再作為新的聚簇中心。

然後不斷迭代兩個公式,直到所有的u都不怎麼變化了,就算完成了。

k-means的這種求法可視為是一種啟發式的演算法,其最後的結果還是可能會收斂到區域性最優值。

def

kmeans

(dataset, k, distmeas=disteclud, createcent=randcent):

m = shape(dataset)[0]

clusterassment = mat(zeros((m,2)))#create mat to assign data points

#to a centroid, also holds se of each point

centroids = createcent(dataset, k)

clusterchanged = true

while clusterchanged:

clusterchanged = false

for i in range(m):#for each data point assign it to the closest centroid

mindist = inf; minindex = -1

for j in range(k):

distji = distmeas(centroids[j,:],dataset[i,:])

if distji < mindist:

mindist = distji; minindex = j

if clusterassment[i,0] != minindex: clusterchanged = true

clusterassment[i,:] = minindex,mindist**2

print centroids

for cent in range(k):#recalculate centroids

ptsinclust = dataset[nonzero(clusterassment[:,0].a==cent)[0]]#get all the point in this cluster

centroids[cent,:] = mean(ptsinclust, axis=0) #assign centroid to mean

return centroids, clusterassment

機器學習之聚類演算法 K Means

參考 聚類演算法可以分為 中心點方法 層次聚類方法 基於密度方法 基於網格 基於模型方法。其中最為經典的是k means演算法 k means屬於中心點方法 也有叫劃分方法 演算法經典簡單。演算法 人工選取k值,並選取k個點作為k個簇的質心 對所有樣本分別計算到k個簇的質心的距離 歐式或者曼哈頓 取...

機器學習之K means聚類演算法

k均值演算法的計算過程非常直觀 1 從d中隨機取k個元素,作為k個簇的各自的中心。2 分別計算剩下的元素到k個簇中心的相異度,將這些元素分別劃歸到相異度最低的簇。3 根據聚類結果,重新計算k個簇各自的中心,計算方法是取簇中所有元素各自維度的算術平均數。4 將d中全部元素按照新的中心重新聚類。5 重複...

機器學習之K Means聚類演算法

python 實現k means演算法和二分k means聚類演算法 用到的資料集testset2.txt from numpy import defloaddataset filename datamat fr open filename for line in fr.readlines curl...