一、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個質心,計算每個樣本與質心的相似度,將樣本劃分到距離其最近的乙個質心的堆簇,然...