在機器學習這一領域中,很多演算法都離不開乙個損失函式。在深度學習中損失函式更是重要的一環。同樣對於非監督學習的聚類演算法k-means來說,同樣也需要乙個 值來衡量它的聚類結果的好壞。
這個函式就是:
j (c
(1),
...,
c(m)
,μ1,
...,
μk)=
1m∑i
=1m∥
x(i)
−μc(
i)∥2
j(c^,...,c^,\mu_1,...,\mu_k) = \frac\sum_^\|x^ - \mu_}\|^2
j(c(1)
,...
,c(m
),μ1
,..
.,μk
)=m
1i=
1∑m
∥x(i
)−μc
(i)
∥2這裡的 c(i
)c^c(i)
表示第 i 個樣本屬於哪乙個聚類中心。μ
i\mu_i
μi 表示第幾個聚類中心。x
ix^i
xi表示第i個樣本點。而我們的目的,就是最小化這個目標函式。即:min
imiz
ec(1
),..
.,c(
m),μ
1,..
.,μk
j(c(
1),.
..,c
(m),
μ1,.
..,μ
k)minimize_,...,c^,\mu_1,...,\mu_k},...,c^,\mu_1,...,\mu_k) }
minimi
zec(
1),.
..,c
(m),
μ1,
...,
μk
j(c(
1),.
..,c
(m),
μ1,
...,
μk)
對於上面的目標函式,其實就是在計算 每個類中 的樣本點距離類中心點的距離。當然一般來說中心點都會選擇類內樣本點的中心點,可以簡單的理解為上面的目標函式最終目的就是在最小化類內方差。
因為方差的公式正好就是 dx=
e(x−
e(x)
)2dx = e(x-e(x))^2
dx=e(x
−e(x
))2也就是說它在試圖讓每乙個分類結果的樣本點盡可能集中在一起。
為了更好理解k-means演算法是怎麼優化優化目標的,有必要把k-means演算法的步驟簡單回顧一下。
根據要分類的數量 k 隨機初始化 k 個聚類中心點,即 μ1,
μ2,.
..,μ
k\mu_1, \mu_2,...,\mu_k
μ1,μ2
,..
.,μk
。當然因為是隨機初始化的所以這些點基本不可能就是最好的聚類中心點。
計算每乙個樣本點 x
ix_i
xi 到這 k 個聚類中心點 μ1,
...,
μk\mu_1, ..., \mu_k
μ1,..
.,μk
的距離,選擇距離最近的聚類中心點例如最近的點為 μ
j\mu_j
μj,就將 x
ix_i
xi 歸類為這一類。即為 c(i
)=jc^ = j
c(i)=j
。在上面的步驟中,每乙個點都已經分好類了,這個時候,重新計算分好類的每乙個類的樣本點的中心點,因為對於這些聚類中心點通常不會是這些樣本點的中心點,它們只是相比較於其他的樣本中心點距離本類的樣本點的距離最近而已。將聚類中心點更新為新計算到的中心點。即:μj:
=mea
n()\mu_j := mean(\ =j\})
μj:=m
ean(
)重複步驟 2,3, 直至聚類中心點收斂,即 μ1,
...,
μk\mu_1, ...,\mu_k
μ1,..
.,μk
不再變化。
我們知道了目標函式其實是在最小化聚類結果的類間的樣本點到聚類中心的距離。最終結果其實是得到乙個最小的類內方差。
我們先將優化目標公式再寫一遍:
j (c
(1),
...,
c(m)
,μ1,
...,
μk)=
1m∑i
=1m∥
x(i)
−μc(
i)∥2
j(c^,...,c^,\mu_1,...,\mu_k) = \frac\sum_^\|x^ - \mu_}\|^2
j(c(1)
,...
,c(m
),μ1
,..
.,μk
)=m
1i=
1∑m
∥x(i
)−μc
(i)
∥2其實靠想象就知道,那個近就分給那個,這樣的到的平均距離肯定是最小的。
總的來說,演算法的在做這樣的事情。
根據當前聚類中心點進行聚類 →
\rightarrow
→ 得到使得當前聚類中心點最小的目標函式值得的類結果。
根據聚類結果更新聚類中心點 →
\rightarrow
→ 得到使得新的到的聚類結果最小的目標函式值的聚類中心點
重複上面的步驟
可以看得到,在每乙個步驟中,目標函式都在朝著不增的方向變化,直到我們得到乙個收斂的比較小的值。這一點其實和梯度下降的作用有那麼一點的相似,都是在迭代過程中不斷更新引數使得目標函式最小化,從而得到乙個區域性最優值或者全域性最優值(當然,這是我們期望的)。
其實對於k-means演算法的目標函式來說,只是最小化了聚類結果內部的距離。這樣不一定能的到最好的聚類結果,也就是最終的優化結果可能是乙個區域性最優。這個和初始的聚類中心點的位置是有關的。
比如:對於同乙個資料集合,由於初始化的不同,最終的聚類結果也可能不同:
因此。按照正常的需求的話,我們真正的期望應該要達到:類內方差最小化,類間方差最大化。
這裡的解決方法有兩種:
從原始碼的角度理解Volley
今天從原始碼的角度來理解一下volley中部分功能的實現。新增請求到請求佇列 將請求新增到請求佇列中 public requestadd requestrequest 為請求設定順序編號.request.setsequence getsequencenumber 新增標記 request.addma...
從電路的角度理解特徵阻抗
傳輸顯得特徵阻抗不是真實的電阻,微波技術課程會從波的角度描述特徵阻抗,這次試圖從電路的角度來理解 無損傳輸線是分布的l c 網路,假設是無限長傳輸線 從a,b兩點看入的阻抗是相等的,所以可以簡化成下圖 化簡可得 這裡l c都是趨近於零的值,因為傳輸線是分布引數dl 0 所以我們可以忽略高階項,得到 ...
從資源取用的角度理解雲計算
從資源取用的角度理解雲計算 從資源取用的角度理解雲計算,主要可以從四個方面進行解讀,具體如下 硬體和軟體都是資源,通過網路以服務的方式提供給使用者。在雲計算中,資源已經不限定在諸如處理器機時 網路頻寬等物理範疇,而是擴充套件到了軟體平台 web服務和應用程式的軟體範疇。傳統模式下自給自足的it運用模...