k means 聚類演算法

2021-09-11 10:18:23 字數 2665 閱讀 3861

聚類主要內容是將樣本進行歸類,同種類別的樣本放到一起,所有樣本最終會形成k個簇,它屬於無監督學習。

根據給定的k值和k個初始質心將樣本中每個點都分到距離最近的類簇中,當所有點分配完後根據每個類簇的所有點重新計算質心,一般是通過平均值計算,然後再將每個點分到距離最近的新類簇中,不斷迴圈此操作,直到質心不再變化或達到一定的迭代次數。數學上可以證明k-means是收斂的。

隨機選擇k個質心,即為簇數

while(true)複製**

需要事先確定類簇的數量。

質心的選取會影響最終的聚類結果。

from numpy import *

import matplotlib.pyplot as plt

from sklearn.cluster import kmeans

def kmeans(dataset, k):

samplenum, col = dataset.shape

cluster = mat(zeros((samplenum, 2)))

centroids = zeros((k, col))

##choose centroids

for i in range(k):

index = int(random.uniform(0, samplenum))

centroids[i, :] = dataset[index, :]

clusterchanged = true

while clusterchanged:

clusterchanged = false

for i in range(samplenum):

mindist = sqrt(sum(power(centroids[0, :] - dataset[i, :], 2)))

minindex = 0

for j in range(1,k):

distance = sqrt(sum(power(centroids[j, :] - dataset[i, :], 2)))

if distance < mindist:

mindist = distance

minindex = j

if cluster[i, 0] != minindex:

clusterchanged = true

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

for j in range(k):

pointsincluster = dataset[nonzero(cluster[:, 0].a == j)[0]]

centroids[j, :] = mean(pointsincluster, axis = 0)

return centroids, cluster

dataset = [[1,1],[3,1],[1,4],[2,5],[11,12],[14,11],[13,12],[11,16],[17,12],[28,10],[26,15],[27,13],[28,11],[29,15]]

dataset = mat(dataset)

k = 3

centroids, cluster = kmeans(dataset, k)

samplenum, col = dataset.shape

mark = ['or', 'ob', 'og']

for i in range(samplenum):

markindex = int(cluster[i, 0])

plt.plot(dataset[i, 0], dataset[i, 1], mark[markindex])

mark = ['+r', '+b', '+g']

for i in range(k):

plt.plot(centroids[i, 0], centroids[i, 1], mark[i], markersize=12)

plt.show()複製**

結果:

這裡寫描述

直接用機器學習庫更加方便

from numpy import *

import matplotlib.pyplot as plt

from sklearn.cluster import kmeans

dataset = [[1,1],[3,1],[1,4],[2,5],[11,12],[14,11],[13,12],[11,16],[17,12],[28,10],[26,15],[27,13],[28,11],[29,15]]

dataset=mat(dataset)

k = 3

markers = ['^', 'o', 'x']

cls =kmeans(k).fit(dataset)

for i in range(k):

members=cls.labels_==i

plt.scatter(dataset[members,0],dataset[members,1],marker=markers[i])

plt.show()複製**

*****===廣告時間*****===

鄙人的新書《tomcat核心設計剖析》已經在京東銷售了,有需要的朋友可以到 item.jd.com/12185360.ht… 進行預定。感謝各位朋友。

這裡寫描述

K Means聚類演算法

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

聚類演算法 K means

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

k means聚類演算法

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