Boosting集合算法详解(一)
本文是關(guān)于聚類算法的第二篇K-means,感興趣的同學(xué)可以前往http://ihoge.cn/2018/clustering.html
閱讀完整版。
二、K-means
1. 算法步驟
<1> 選擇KK個點作為初始質(zhì)心
<2> Repeat:
<3> 將每個點指派到最近的質(zhì)心,形成KK個簇
<4> 重新計算每個簇的質(zhì)心
<5> Until: 質(zhì)心不發(fā)生變化終止
2. 距離的度量
閔可夫斯基距離
閔可夫斯基距離不是一種距離,而是一類距離的定義。對于 n 維空間中的兩個點 x(x1,x2,x3,...,xn)x(x1,x2,x3,...,xn)和y(y1,y2,y3,...,yn)y(y1,y2,y3,...,yn),那么xx和yy亮點之間的閔可夫斯基距離為:
dxy=∑i=1n(xi?yi)p ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄?dxy=∑i=1n(xi?yi)p其中p是一個可變參數(shù):
- 當(dāng)p=1時,被稱為曼哈頓距離;
- 當(dāng)p=2時,被稱為歐式距離;
- 當(dāng)p=∞∞時,被稱為切比雪夫距離。
余弦相似度:
cos(Θ)=aTb|a|?|b|cos(Θ)=aTb|a|?|b|
- a,ba,b表示兩個向量,|a||a|和|b||b|表示向量的模。 余弦相似度一般衡量兩個向量的相似情況,常用與文本處理。余弦角越小越相似。
杰卡德(Jaccard)相似系數(shù)
J(A,B)=|A?B||A?B|J(A,B)=|A?B||A?B|
- 這里,A、BA、B表示集合,A?BA?B表示兩個集合公共元素的個數(shù),A?BA?B表示兩個集合并集元素的個數(shù)。 Jaccard 相似系數(shù)適用于度量兩個集合的相似程度,取值在 0~1 之間,越大越相似。在推薦系統(tǒng)中常用衡量客戶或商品的相似度。
3. 變量標(biāo)準(zhǔn)化
在聚類前,通常需要對個連續(xù)變量進行標(biāo)準(zhǔn)化,因為方差大的變量比方差曉得變量對距離或相似度的影響更大,從而對聚類結(jié)果的影響更大。
常用的方法有:
正態(tài)標(biāo)準(zhǔn)化:xi=xi?mean(X)std(Xxi=xi?mean(X)std(X
歸一化:xi=xi?min(X)max(X)?min(X)xi=xi?min(X)max(X)?min(X)
4. 變量的維度分析
假設(shè)一組變量中,一個維度有5個變量,二另一個維度只有1個變量,則第一個維度的權(quán)重被明顯提高了。一般情況下,每個維度上使用的變量個數(shù)應(yīng)該是一樣的,不過分析人員要結(jié)合具體場景不同維度提供不同數(shù)量的變量個數(shù),這相當(dāng)于加大了一些維度的權(quán)重。
除了機遇業(yè)務(wù)定義進行變量的選擇,另一種常用的方法是在聚類之前進行主成分分析。
5. 質(zhì)心的目標(biāo)函數(shù)
5.1 SSE 誤差平方和
聚類的目標(biāo)通常用一個目標(biāo)函數(shù)表示,該函數(shù)依賴于點之間,或點到簇的質(zhì)心的臨近性;
如,考慮臨近性度量為歐幾里得距離的數(shù)據(jù),我們使用誤差平方和(SSE)作為度量聚類質(zhì)量的目標(biāo)函數(shù),即最小化簇中點到質(zhì)心的距離平方和。 SSE也稱散布(scatter),定義如下:
其中, distdist是歐幾里得空間中兩個對象之間的標(biāo)準(zhǔn)歐幾里得距離。
給定這些假設(shè),實際上可以證明:對 SSE 求導(dǎo),另導(dǎo)數(shù)為 0 求解 ckck使簇的 SSE 最小的質(zhì)心是均值;
??ckSSE=??ck∑Ki=1∑x∈Ci(ci,x)2=0??ckSSE=??ck∑i=1K∑x∈Ci(ci,x)2=0
最終得到:
∑x∈Ck2(ck?xk)=0?mkck=∑x∈Ckxk?ck=1mk∑x∈Ckxk∑x∈Ck2(ck?xk)=0?mkck=∑x∈Ckxk?ck=1mk∑x∈Ckxk文檔數(shù)據(jù)
考慮文檔數(shù)據(jù)和余弦相似性度量。這里我們假定文檔數(shù)據(jù)用文檔——詞矩陣表示,我們的目標(biāo)是最大化簇中文檔與簇的質(zhì)心的相似性;該量乘坐簇的凝聚度(cohesion)。對于該目標(biāo),可以證明,與歐幾里得數(shù)據(jù)一樣,簇的質(zhì)心是均值。總 SSE 的類似量是總凝聚度(total cohesion):
關(guān)于凝聚度的知識,會在下文模型評估里面詳細(xì)介紹
5.2 SAE 絕對誤差和
為了表明KK均值可以用各種不同的目標(biāo)函數(shù),我們考慮如何將數(shù)據(jù)分成KK個簇,使得點到其簇中心的曼哈頓距離之和最小。如下式絕對誤差和(SAE)
SAE=∑Ki=1∑x∈Ci|ci?x|SAE=∑i=1K∑x∈Ci|ci?x|
??ckSAE=??ck∑Ki=1∑x∈Ci|ci?x|=0??ckSAE=??ck∑i=1K∑x∈Ci|ci?x|=0
最終得到:
∑x∈Ck??ck|ck?x|=0?∑x∈Cksign(x?ck)=0?ck=median{x∈Ck}∑x∈Ck??ck|ck?x|=0?∑x∈Cksign(x?ck)=0?ck=median{x∈Ck}即簇中點的中位數(shù)。一組點的中位數(shù)的計是直截了當(dāng)?shù)?#xff0c;并且減少受離群值的影響。
5.3 常見的鄰近度、質(zhì)心和目標(biāo)函數(shù)組合
| 曼哈頓距離 | 中位數(shù) | 最小化對象與質(zhì)心的絕對誤差和SAE |
| 平方歐幾里得距離 | 均值 | 最小化對象與質(zhì)心的誤差平方和SSE |
| 余弦 | 均值 | 最大化對象與質(zhì)心的余弦相似度和 |
| Bregman散度 | 均值 | 最小化對象到質(zhì)心的Bregman散度和 |
Bregman散度實際上是一類緊鄰性度量,包括平方歐幾里得距離。Bregman散度函數(shù)的重要性在于,任意這類函數(shù)都可以用作以均值為質(zhì)心的 K-means 類型的聚類算法的基礎(chǔ)。
6. 選擇初始質(zhì)心
當(dāng)質(zhì)心隨機初始化時,K-means 將產(chǎn)生不同的總 SEE。選擇適當(dāng)?shù)某跏假|(zhì)心是基本 K-menas 過程的關(guān)鍵步驟。常見的是隨機選取,但這種情況下簇的質(zhì)量常常很差。考慮什么情況下選擇的初始質(zhì)心能找到最優(yōu)解?答案是:每個簇剛好分到一個質(zhì)心。事實證明發(fā)生這種情況的概率是非常非常低的。
常見一種技術(shù)是:多次運行,然后選取具有最小 SEE 的簇集。該策略雖然簡單,但是效果可能不太好,依然是概率事件。
另一種有效的技術(shù)是:取一個樣本,并使用層次聚類技術(shù)對他聚類。從層次聚類中提取 KK 個簇,并用這些簇的質(zhì)心作為初始質(zhì)心。該方法雖然有效,但僅對下列情況有效:(1)樣本相對較小,例如數(shù)百到數(shù)千(層次聚類開銷較大);(2)KK 相對與樣本大小較小。
還有一種方法是:隨機選擇第一個點或者所有點到質(zhì)心作為第一個點。然后對于每個候機初始質(zhì)心,選擇里已經(jīng)選取的初始質(zhì)心最遠(yuǎn)的點,并且把該方法應(yīng)用與點樣本。 這樣可以大大緩解可能會選擇離群點作為質(zhì)心的可能,并且大大減小計算量。
另外,我們也可以采用對初始化問題不太敏感的 K-means 的變種,二分K-means、使用后處理來“修補”
所產(chǎn)生的簇集
7. 時間復(fù)雜性和空間復(fù)雜性
所需空間:O((m+K)n)O((m+K)n),m 是點數(shù), n 是屬性數(shù)
所需時間:O(I?K?m?n)O(I?K?m?n),II<script type="math/tex" id="MathJax-Element-34">I</script> 是收斂所需迭代次數(shù),通常很小,可以是有界的。
8. K-means 其他問題
8.1 處理空簇
K-means 存在的問題之一是:如果所有的點在指派的步驟都為分配到某個簇,就會得到空簇。這種情況下需要選擇一個替補質(zhì)心,否則誤差將會偏大。
- 方法一: 選擇一個距離當(dāng)前任何質(zhì)心最遠(yuǎn)的點
- 方法二: 從具有最大 SSE 的簇中選擇一個替補質(zhì)心。浙江分裂簇并降低聚類的總 SSE。
8.2 離群點
當(dāng)然我們想到的第一反應(yīng)是刪除離群點,但是有些聚類應(yīng)用,不能刪除離群點。在某些情況下(財經(jīng)分析),明顯的離群點可能是最令人感興趣的點。
那么問題來了,如何識別離群點?
- 方法一:聚類前刪除離群點
- 方法二:后處理離群點。如刪除那些具有不尋常影響的點(尤其是多次運行算法時),另外也可以刪除那些很小的簇,他們嘗嘗代表離群點的組。
8.3 后處理降低 SSE
增加簇個數(shù)
- 分裂一個簇:通常選擇具有最大 SSE 的簇,頁可以分裂在特定屬性上具有最大標(biāo)準(zhǔn)差的簇。
- 引進一個新的質(zhì)心:通常選擇離所有質(zhì)心最遠(yuǎn)的點。
減少簇個數(shù)
- 拆散一個簇: 通常選擇拆散使總 SSE 增加最少的簇, 刪除對應(yīng)的質(zhì)心
- 合并兩個簇: 通常選擇合并質(zhì)心最接近的兩個簇,或者合并兩個導(dǎo)致總 SSE 增加最少的簇。這兩種方法與層次聚類使用的方法相同,分別乘坐質(zhì)心方法和 Ward 方法。
9. 二分 K-means
二分 K-means 算法時基于 K-means 算法的直接擴充,它基于一種簡單想法:為了得到 K 個簇,將所有點的集合分裂成兩個簇,從這些簇中選取一個繼續(xù)分裂,如此下去,知道產(chǎn)生 K 個簇。
算法實現(xiàn)步驟:
<1> 初始化簇表,是指包含有所有的點組成的簇。
<2> Repeat:
<3> 從簇表中取出一個簇
<4> 對選出的簇進行多次二分“實驗”
<5> for i = 1 to 試驗次數(shù) do:
<6> 使用基本 K-means,二分選定的簇
<7> end for
<8> 從二分實驗中選擇具有最小 SSE 的兩個簇
<9> 將這兩個簇添加到簇表中
<10> Until 簇表包含 K 個簇。
待分裂的簇有許多不同的選擇方法。可以選擇最大的簇,選擇具有最大 SSE 的簇,或者使用一個基于大小和 SSE 的標(biāo)準(zhǔn)進行選擇。不同的選擇導(dǎo)致不同的簇。
我們通常使用結(jié)果簇的質(zhì)心作為基本 K-means 的初始質(zhì)心,對結(jié)果逐步求精。 因為盡管 K-means 可以保證找到使 SSE 局部最小的聚類,但是自二分 K-means 算法中,我們“局部地”使用了 K-means ,即二分個體簇。因此,最終的簇集并不代表使 SSE 局部最小的聚類。
10. K-means優(yōu)缺點
10.1 優(yōu)點
- 簡單并且可以用于各種數(shù)據(jù)類型;
- 具備適合的空間復(fù)雜度和計算負(fù)責(zé)度,適用于大樣本數(shù)據(jù);
- K-means 某些變種甚至更有效 (二分K-means)且不受初始化問題影響。
10.2 缺點
- 不能處理非球形簇、不同尺寸和不同密度的簇;
- 對離群點敏感;
- K-means 僅限于具有中心(質(zhì)心)概念的數(shù)據(jù)。有一種相關(guān)的 K-中心點聚類技術(shù)沒有這種限制,但是開銷更大。
參考文獻:
總結(jié)
以上是生活随笔為你收集整理的Boosting集合算法详解(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提升树算法总结(一)
- 下一篇: 基于应用日志的扫描器检测实践