import numpy as np
import matplotlib.pyplot as plt
#initialize center函式通過使用numpy庫的 zeros函式和random.uniform函式,隨機選取 了k個資料做聚類中心,
# 並將結果存放在 了k個資料做聚類中心,並將結果存放在 numpy的array物件centers中
def initcenters(dataset,k):
numsample,dim=dataset.shape#獲得陣列的維度
centers=np.zeros((k,dim))
for i in range(k):
index=int(np.random.uniform(0,numsample))#隨機得到k個質心
centers[i,:]=dataset[index,:]
print(centers)
return centers
#dist2centers這個函式用來計算乙個資料點到所有 聚類中心的距離,將其存放在dis2cents中返回
def dist2centers(sample,centers):
k =centers.shape[0]
dis2cents=np.zeros(k)
for i in range(k):
dis2cents[i]=np.sqrt(np.sum(np.power(sample-centers[i,:],2)))
return dis2cents
def kmeans(dataset,k,iternum):
numsamples=dataset.shape[0]
itercount=0
#clusterassignment儲存著樣本屬於哪個資料集
clusterassignment=np.zeros(numsamples)
clusterchanged=true
#初始化中心點
centers=initcenters(dataset,k)
while clusterchanged and itercount
k-means演算法步驟:
1.從n個資料物件任意選擇k 個物件作為初始聚類中心; 並設定最大迭代次數
2.計算每個物件與k個中心點的距離並根據最小距離對相應物件進行劃分,即把物件劃分到與他們最近的中心所代表的類別中去;
3.對於每乙個中心點,遍歷他們所包含的物件,計算這些物件所有維度的和的均值,獲得新的中心點
4.如果聚類中心與上次迭代之前相比,有所改變,或者演算法迭代次數小於給定的最大迭代次數,則繼續執行第2 、3兩步,否則,程式結束返回聚類結果。
python3.6實現如下:
k means演算法和c means演算法對比例項
演算法對比的前提是首先要有足夠的資料量,所以我這裡先從王者榮耀資料庫裡面採集了職業選手進四年數場比賽中的kda,參團率,場均擊殺,最高擊殺,場均死亡,最高死亡,場內助攻以及最高助攻八個維度的資料,共1330組。隨後將其匯入matlab中,分成八個列,一維一列 fcm演算法原理 fcm 是一種聚類方法...
K means和ISODATA 演算法 原理與實現
k means演算法 原理 對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為k個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。如果用資料表示式表示,假設簇劃分為 c1,c2,ck 則我們的目標是最小化平方誤差e 其中 i是簇ci的均值向量,有時也稱為質心,表示式為 一般步驟 1....
k means演算法實現python
import numpy as np import matplotlib.pyplot as plt 兩點距離 defdistance e1,e2 return np.sqrt e1 0 e2 0 2 e1 1 e2 1 2 集合中心 defmeans arr return np.array np....