k means演算法優化

2021-10-06 11:57:57 字數 2730 閱讀 5354

一、k-means演算法介紹

k-means 演算法是首先從含有n個資料物件的資料集中隨機選擇k個資料物件作為初始中心。

然後計算每個資料物件到各中心的距離,根據最近鄰原則,所有資料物件將會被劃分到離它最近的那個中心所代表的簇中。

接著分別計算新生成的各個簇中資料物件的均值作為各簇新的中心,比較新的中心和上一次得到的中心,如果沒有發生變化,則演算法收斂,輸出結果;

如果新的中心和上一次的中心相比發生變化,則要以新的中心對所有資料物件重新進行劃分。直到滿足演算法的收斂條件為止。

二、缺點和優化方法

k-means聚類演算法的三種改進(k-means++,isodata,kernel k-means)介紹與對比

1、針對於k-means 演算法第一步分析改進:k-means 演算法是首先從含有n個資料物件的資料集中隨機選擇k個資料物件作為初始中心。

缺點:對初始中心的選取敏感,初始中心隨機選取,導致結果波動較大,穩定性較差。

優化:k-means++ (思想:k-means++認為初始聚類中心當然是互相離得越遠越好)

注:sklearn.cluster中提供的kmeans類預設使用的就是k-means++演算法,如想使用k-means演算法可以將init=『random』

model=kmeans(n_clusters=k,n_jobs=4,max_iter=iter,random_state=1234)

但是本次試驗將實現**另外分兩個檔案實現出來比較。

三、**實現

壓縮包附kmeans++.py和kmeans.py

其中主要是兩個尋找中心的**不一樣

kmeans+

+:#選擇盡可能相距較遠的類中心

defget_centroids

(dataset, k)

: m, n = np.shape(dataset)

cluster_centers = np.zeros(

(k, n)

) index = np.random.randint(

0, m)

cluster_centers[0,

]= dataset[index,

]# 2、初始化乙個距離的序列

d =[0.0

for _ in

range

(m)]

for i in

range(1

, k)

: sum_all =

0for j in

range

(m):

# 3、對每乙個樣本找到最近的聚類中心點

d[j]

= nearest(dataset[j,

], cluster_centers[

0:i,])

# 4、將所有的最短距離相加

sum_all += d[j]

# 5、取得sum_all之間的隨機值

sum_all *= random.rand(

)# 6、獲得距離最遠的樣本點作為聚類中心點

for j, di in

enumerate

(d):

sum_all = sum_all - di

if sum_all >0:

continue

cluster_centers[i,

]= dataset[j,

]break

return cluster_centers

kmeans:

#隨機初始化類中心

defrandcenter

(set

,k):

dim=shape(

set)[1

] init_cen=zeros(

(k,dim)

)for i in

range

(dim)

: min_i=

min(

set[

:,i]

) range_i=

float

(max

(set[:

,i])

- min_i)

init_cen[

:,i]

=min_i + range_i*random.rand(k)

return init_cen

四、結果對比(資料:為上課所用consumption_data.xls 評估方法:輪廓係數)

穩定性:k-means++結果跑出來基本固定、但是k-means不同次跑出來的結果會有所不同

k-means++:(與sklearn.cluster中提供的kmeans類呼叫所得結果一致)

質心:

類別和類別對應數量和輪廓係數:

k-means–情況一:

質心:類別和類別對應數量:

輪廓係數:

k-means–情況二:

K means演算法及其優化

聚類演算法是一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到乙個類別中。聚類演算法與分類演算法最大的區別是 聚類演算法是無監督的學習演算法,而分類演算法屬於監督的學習演算法。在聚類演算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算方法,會得到不同的聚類結果,常用的相...

Kmeans演算法及相關優化

1 kmeans演算法是一種無監督聚類演算法。2 演算法的目標 給定樣本集,根據樣本之間的距離大小,將樣本劃分為k個簇,讓簇內的點之間的距離盡可能近,讓簇間的點的距離盡可能的遠。3 演算法的思路 在給定k值和k個初始類簇中心點的情況下,把每個點 樣本資料 分到距離最近的類簇中心點代表的類簇中。分配完...

如何優化Kmeans

想要知道如何優化kmeans,首先得知道 什麼是kmeans?kmeans的優點 kmeans的缺陷 知道了以上這些知識點,我們才能針對性優化kmeans。kmeans是一種非監督的聚類演算法,首先選取k值,並隨機初始化k個質心,計算每個樣本與質心的相似度,將樣本劃分到距離其最近的乙個質心的堆簇,然...