一、K-Means
K-Means是GMM的特例(硬聚類,基于原型的聚類)。假設(shè)多元高斯分布的協(xié)方差為0,方差相同。
?
K-Means算法思想
對(duì)于給定的樣本集,按照樣本間的距離,將樣本集劃分為K個(gè)簇。
簇內(nèi)的點(diǎn)盡量緊密連接,而簇間的距離盡量的大。

本質(zhì)上是個(gè)組合優(yōu)化問(wèn)題, 類似于將N個(gè)球分配到K個(gè)箱子。
啟發(fā)式求解(局部最優(yōu)解)
- 初始K個(gè)類(簇心)
- E步:對(duì)每個(gè)樣本,計(jì)算到K個(gè)類的歐式距離,并分配類標(biāo)簽 O(kNd)
- M步:基于類內(nèi)的樣本,以樣本均值更新類(均值最小化,類到類內(nèi)樣本的誤差) O(Nd)
- 重復(fù)2-3步,直到聚類結(jié)果不變化或收斂
迭代次數(shù)為L(zhǎng),N個(gè)d維樣本,時(shí)間復(fù)雜度 O(kLNd)
?
聚類前置處理:
特征歸一化,剔除缺失值,異常值
?
K-Means的優(yōu)點(diǎn):
1)基于原型的聚類,實(shí)現(xiàn)簡(jiǎn)單收斂速度快。
2)聚類效果較優(yōu)。
3)算法的可解釋度比較強(qiáng)。
4)主要需要調(diào)參的參數(shù)僅僅是簇?cái)?shù)k。
K-Means的缺點(diǎn):
1)K值的選取不好把握(需要多次運(yùn)行看輪廓系數(shù), 肘部法;用層次聚類確定K值)
2)對(duì)于不是凸的數(shù)據(jù)集比較難收斂
3)如果各隱含類別的數(shù)據(jù)不平衡,比如各隱含類別的數(shù)據(jù)量嚴(yán)重失衡,或者各隱含類別的方差不同,則聚類效果不佳。
4) 采用迭代方法,得到的結(jié)果只是局部最優(yōu)(本身是個(gè)NP-hard問(wèn)題,多項(xiàng)式系數(shù); 聚類結(jié)果受初始簇心影響)
5) 對(duì)噪音和異常點(diǎn)比較的敏感。
?
# 基于Cursor生成的代碼
import numpy as np
def k_means(X, k, max_iters=100):
# randomly initialize centroids
centroids = X[np.random.choice(range(len(X)), k, replace=False)]
for i in range(max_iters):
# calculate distances between each point and each centroid
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# assign each point to the closest centroid
labels = np.argmin(distances, axis=0)
# update centroids to be the mean of the points assigned to them
for j in range(k):
centroids[j] = X[labels == j].mean(axis=0)
return centroids, labels
d = 3
k = 3
X = np.random.rand(100, 3)
centroids, labels = k_means(X, k, max_iters=100)
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:, 0], X[:, 1], X[:, 2], c=labels, cmap='viridis')
ax.scatter(centroids[:, 0], centroids[:, 1], centroids[:, 2], marker='*', s=300, c='r')
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
plt.show()
?
二、GMM
?斯分布的線性組合可以給出相當(dāng)復(fù)雜的概率密度形式。
通過(guò)使??夠多的?斯分布,并且調(diào)節(jié)它們的均值和?差以及線性組合的系數(shù),?乎所有的連續(xù)概率密度都能夠以任意的精度近似。

對(duì)3個(gè)高斯分布的概率密度函數(shù)進(jìn)行加權(quán)???/div>
?
慮K個(gè)?斯概率密度的疊加,形式為:


參數(shù)πk被稱為混合系數(shù)。
?
混合?斯(mixture of Gaussians),每?個(gè)?斯概率密度N (x | μk, Σk)被稱為混合分布的?個(gè)成分(component),并且有??的均值μk和協(xié)?差Σk。

具有3個(gè)成分的混合?斯分布的輪廓線。
?
可把πk = p(k)看成選擇第k個(gè)成分的先驗(yàn)概率, 把密度N (x | μk, Σk) = p(x | k)看成以k為條件的x的概率。
?斯混合分布的形式由參數(shù)π, μ和Σ控制,其中令π ≡ {π1, . . . , πK}, μ ≡{μ1, . . . , μK}且Σ ≡ {Σ1, . . . , Σk}。
?
?種確定這些參數(shù)值的?法是使?最?似然法。根據(jù)公式),對(duì)數(shù)似然函數(shù)為:

因?yàn)閷?duì)數(shù)中存在?個(gè)求和式,導(dǎo)致參數(shù)的最?似然解不再有?個(gè)封閉形式的解析解:
- ?種最?化這個(gè)似然函數(shù)的?法是使?迭代數(shù)值優(yōu)化?法。
- 另?種是使?EM期望最?化算法(對(duì)包含隱變量的似然進(jìn)行迭代優(yōu)化)。
?
樣本x為觀測(cè)數(shù)據(jù),混合系數(shù)為隱變量,高斯分布的參數(shù)。
當(dāng)成分為多元高斯分布時(shí)(d維),相當(dāng)于從混合多元高斯分布中生成了樣本,通過(guò)EM算法迭代地學(xué)習(xí)模型參數(shù)(均值和方差以及混合系數(shù))。
- 期望:根據(jù)參數(shù),更新樣本關(guān)于類的響應(yīng)度(隸屬度,相當(dāng)于分別和K個(gè)類計(jì)算距離并歸一化)。確定響應(yīng)度,就可以確定EM算法的Q函數(shù)(完全數(shù)據(jù)的對(duì)數(shù)似然關(guān)于 分布的期望),原始似然的下界。
- 最大化:根據(jù)響應(yīng)度,計(jì)算均值、方差。
EM算法收斂后,直接求每個(gè)樣本關(guān)于成分的響應(yīng)度即可得到聚類結(jié)果(可軟,可硬argmax)
?
當(dāng)多元高斯分布的方差相同時(shí),且每個(gè)樣本只能指定給一個(gè)類時(shí)(one-hot響應(yīng)度,argmax),GMM退化成K-means算法。

import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture
from sklearn.cluster import KMeans
# 創(chuàng)建數(shù)據(jù),并可視化
X, y = datasets.make_blobs(n_samples=1500,
cluster_std=[1.0, 2.5, 0.5],
random_state=170)
plt.figure(figsize=(12,4))
plt.rcParams['font.family'] = 'STKaiti'
plt.rcParams['font.size'] = 20
plt.subplot(1,3,1)
plt.scatter(X[:,0],X[:,1],c = y)
plt.title('原始數(shù)據(jù)',pad = 20)
?
Kmeans聚類
kmeans = KMeans(3)
kmeans.fit(X)
y_ = kmeans.predict(X)
plt.subplot(1,3,2)
plt.scatter(X[:,0],X[:,1],c = y_)
plt.title('KMeans聚類效果',pad = 20)
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-415692.html
GMM高斯混合模型聚類
gmm = GaussianMixture(n_components=3)
y_ = gmm.fit_predict(X)
plt.subplot(1,3,3)
plt.scatter(X[:,0],X[:,1],c = y_)
plt.title('GMM聚類效果',pad = 20)
plt.figtext(x = 0.51,y = 1.1,s = 'KMeans VS GMM',ha = 'center',fontsize = 30)
plt.savefig('./GMM高斯混合模型.png',dpi = 200)
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-415692.html

優(yōu)點(diǎn):
- 可以完成大部分形狀的聚類
- 大數(shù)據(jù)集時(shí),對(duì)噪聲數(shù)據(jù)不敏感
- 對(duì)于距離或密度聚類,更適合高維特征
缺點(diǎn):
- 計(jì)算復(fù)雜高,速度較慢
- 難以對(duì)圓形數(shù)據(jù)聚類
- 需要在測(cè)試前知道類別的個(gè)數(shù)(成分個(gè)數(shù),超參數(shù))
- 初始化參數(shù)會(huì)對(duì)聚類結(jié)果產(chǎn)生影響
參考
1.https://www.jianshu.com/p/2c42c567e893
2. PRML
3. 劉建平博客
到了這里,關(guān)于KMeans算法與GMM混合高斯聚類的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!