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...