機器學習-非監督學習(Unüberwachte Lernverfahren)+大型數據庫:Clustering-1

把數據庫分析的Clustering加到這裏來吧-爲完成哦

內容一覽

1.動機
2.k-means聚類(經典聚類)
3.多級聚類
4.COBWEB(Begriffliche Balungen)和概念聚類
5.前景

動機

動機

1.訓練集的收集和分類相當費力
2.另外訓練時那麼多量要計算也是相當麻煩的
(Engineering z.B:Merkmalsberechnung der Daten kann sehr aufwendig sein)
3.可以運用於數據挖掘(Data Mining)
4.(Sich verändernde Charakteristika von Mustern) //這個理解不能???
5.尋找新的屬性(Finden von neuen Eigenschaften)//同樣理解不能???
6.對數據結構的初步認識(Erste Erkenntnisse über Struktur von Daten)
//還是理解不能??????????

Clustering

Clustering的一般問題描述

已知N個具有d維屬性的數據的集合
目的是:
把這個集合中的數據分成k個不同的簇和一個噪音(有辦法區分出噪音嗎,對此暫時表示懷疑???)並且這些簇應該根據下列兩個條件進行選擇:
1.同一個簇中的數據應該相似
(Intra-cluster Similarity wird maximiert)
2.不同簇之間的數據應該不相同
(inter-cluster Similarity wird minimiert)

Criterion Function

在這裏我們引入Criterion Function:

E=i=1kxCid(x,mi)

並用他來描述同一個簇內的數據的相似度。那麼相應的Clustering的目的就可以改變爲,優化這個Criterion Function。
//好像忽略了簇間的情況。
值的注意的是上式中的d並不一定表示的是x和m之間的距離。實際上函數d表達的是輸入點x和該簇的參數點m之間的相識程度。舉個例子,比如簇內數據分佈符合正太分佈,那麼m就可以是指這個正太分佈的均值和方差,而d函數對應的結果就是輸入點屬於該分佈的概率。而在這裏我們用這個概率來表達這種相似度。

參數的選擇

那麼現在問題就來了,這個式子裏有兩個參數m和k,我們應該怎麼對這兩個參數進行選擇呢??

參數m

一般情況下m得選擇是很難的,因爲他要求對數據的分佈具有一定的瞭解。正如上面的例子,如果不知道這些數據符合正太分佈,那麼對於這些參數將無從下手。

參數k

另一個起決定性作用而且很重要的的參數就是k
k表示的是聚類最終要生成的簇的數目。很明顯根據要求的生成簇的數量的不同,他最終生成的結果也會相差很大。
在沒有確定具體k的數目的情況下,我們一般採用的是下面這種方法:
把k從2到n-1的情況都給試一遍,從結果集中選出最好的聚類。

Clustering的評價標準

那麼應該如何評價一個聚類的質量呢??
在介紹具體的方法之前,我們先說一下這種測量方法應該滿足的一些條件:
1.數組不能隨着k增長呈單調增長。n個數據分成n個簇的話,那是絕對滿足簇內相識最小得條件的。但很明顯這並不是一個好得聚類的方法
(Maß hierfür darf nicht einfach mit k monoton wachsen)
2.測量緊湊性的到的數值同樣也不能隨着k的減少單調下降。
(Kompaktheitsmaß für Clustering fällt monoton mit k)
下面要介紹到的Sihouette係數就是一種值不會隨着k的增大而單調遞增的聚類的質量的測量。

Silhouette係數(Silhouette-Koeffizient)

設計的目的以及其基本思想

1.同一個簇內的對象應該和這個簇的代表儘量的相似,
在這裏我們用簇內對象到簇內代表的平均距離表示。
(Objekte in Cluster sollten Repräsentanten des Clusters möglichst ähneln-durchschnittlicher Abstand der Objekte zum Repräsentanten ihres Clusters)
2.不同簇中的對象應該長得相差儘量的遠一點,在這裏我們用不同簇內對象之間的平均距離表示。
(Objekte in unterschiedlichen Clustering sollten möglichst unähnlich sein -durchschnittlicher Abstand von Objekt zu Objekt in anderen Clustern: hier:zweinächster Cluster)
//不理解這後寫得兩個最近的簇表示的是神馬意思

Silhouette-Koeffizient

a(o):
指簇內點o到簇內其他點得平均距離

a(o)=1|C(o)|pC(o)dist(o,p)

b(o):
指簇內點o到離o第二近的簇內的點得平均距離
//爲什麼說是第二近呢??估計是把o所在的簇也算進去了嗎
(Durchschnittliche Distanz zwischen o und Objekten in ‘zweitnächstem’ Cluster)
b(o)=minCiC(o)(1|Ci|pC(i)dist(o,p))

前面提到的距離函數dist(p,q)主要是針對單個數據對象的,現在把針對Cluster的距離函數補上:
single Link:
distst(X,Y)=minxX,yYdist(x,y)

Complete Link:
distcl(X,Y)=maxxinX,yYdist(x,y)

Average Link:
distal(X,Y)=1|X||Y|xX,yYdist(x,y)

Silhouette:
s(o)={ob(o)a(o)max{a(o),b(o)}ifa(o)=0,i.e.,|Ci|=1else

Silhouette的值域是:[-1,1]
當a(o)爲0時效果最優,s(o)爲1.反之當b(o)爲0時,是最不受待見的這時s(o)=-1.當a(o)=b(o)時對應的s(o)爲0,雖然他站在正中間,但這結果相信也是挺難接受的。
上面這個是針對對象o的Silhoutte值,下面來看一下針對簇的Silhoutte值:C=C1,C2,...,Ck)
silh(C)=1CCiC1|Ci|oCis(o)

同樣的這個Silhoutte的值域也是[-1,1]
根據S值的不同對聚類進行評價,一般情況下我們認爲:
1. 0.7 < s < 1.0,結構化得很好
2. 0.5 < s < 0.7, 一般般
3. 0.25 < s < 0.5,有點弱啊
4. s < 0.25,完全沒有感覺

對聚類算法的要求

必須是有效的而且是高效的並且能過處理含有比較大得噪音的高維的大型數據的聚類算法,而且這個算法應該在下面三方面具有很好的伸縮性:
1. 數據點得數量
2. 數據的維度
3. 噪音
/*
Effektive und effiziente Clustering Algorithmen für große hochdimensionale Datenbestände mit hohem Noise-Annteil erfordern Skalierbarkeit hinsichtlich Anzahl der Datenpunkte(N), Anzahl der Dimensionen(d),Noise-Anteil
*/

k-means聚類

把數據集劃分爲事先給定的數量的聚類
他的基本思想是:
1.爲每一個類定義一箇中點(Medoid)
//在Clustering中一般稱爲Medoid,但也就是均值的意思。他的官方解釋是用作替代簇中重點得點。其實直接使用中點的話,可能照成誤導,以爲他是簇中的一個存在的一個點,其實不是,是通過計算後加進去的。
2.迭代循環調整這個中點//用新的代替舊的,舊的刪了
3.優化的準則是使類內各點到其中點的距離的總和最小。
已知:
1.未分類的訓練數據集X(這就是被說成是未監督的原因吧???),其中每個訓練例子都含有d個屬性:x1=<attr11,..,attrdi>
2.想要分成的聚類的數量k
尋找的目標:
把訓練數據分配到k個類中,並使得下式最小:

j=1kxiXj|xicj|

其中cj 爲各個類的中點
上式中直接用距離進行表述,比較正確的做法應該是用距離函數d(cj,xji) 表示。但其實誤差拉。
算法:
1.在d維空間中加入k個點cj 作爲k個類初始的中點。
2.直到cj 不再改變或優化效率低時(這是循環條件),進行下面的操作:
重新把空間中的點分配到k個類中,分配方法如下:
l=arg minkj=1|xicj|xiXl

3.計算求出新的中點,然後把舊的中點扔了:
cj=|Xj|i=1xi|Xj|

評價:
1. 初始點所在的位置對結果有很大得影響
應對方法是相同的k下使用不同的初始,進行多次操作,
另外在選擇初始的medoid的時候,應該儘量滿足下面的條件,把不滿足的點用其他Medoid代替:
*儘量的覆蓋整個空間
*在進行下一個Medoid的選擇的時候,應使其與前面選好得Medoids的距離足夠遠
*在選中的Medoid旁邊應該有足夠的數據點存在,一般我們認爲,如果一個Medoid旁邊的點得數量少於N/K*minDev時,那麼這個Medoid就是挺糟糕的,最好把他換了。其中minDev是一個常數。
2. 結構依賴於度量|xcj| 。在高維的情況下會很難聚類。//???
3. 結果依賴於聚類的數量k
並沒有標準的求k的方法,只能靠多次測試,尋找滿足條件的結果了。但這也容易導致過擬合//??爲什麼呢???

CLARANS

用圖表的方式描述上述的問題:每個節點表示一個Medoid的集合。直接相鄰的兩個節點表示的集合之中僅存在一個對象是不同的。
以下關於CLARANS的內容來自於百度百科,加上上面那句話,理解起來感覺還可以:
CLARANS是分割方法中基於隨機搜索的大型應用聚類算法,他是在CLARA算法的基礎上提出來的。與CLARA不同,CLARANS沒有在任一給定的時間侷限與任一樣本。而是在搜索的每一步都帶一定隨機性的選取一個樣本。CLARANS的時間複雜度是O(n2) 。其中n是對象的數目。
此方法的優點是一方面改進了CLARA的聚類質量。另一方面拓展了數據處理兩的伸縮範圍,具有較好的聚類效果
他的缺點也比較明顯,他的計算的效率較低,且對數據輸入的順序敏感,只能聚類凸狀或球形邊界

CLARANS的步驟

  1. 輸入參數numlocal和maxneighbor。 其中numlocal表示抽樣的次數, maxneighbor表示一個節點可以與任意特定鄰居進行比較的數目。令i=1,i用來表示已經選樣的次數,mincost爲最小代價,初始時設爲最大數
  2. 設置當前節點current爲Gn中的任意一個節點
  3. 令j=1。j用來表示已經與current進行比較的鄰居的個數
  4. 考慮當前的一個隨機鄰居S,並計算兩個節點的代價差
  5. 如果S的代價較低,則current=S,轉到步驟三
  6. 否則,令j++。如果j<=maxneighbor,則跳轉到4
  7. 否則,當j>=maxneighbor, 當前節點爲本次選樣最小代價節點,如果其代價小於mincost,令mincost爲當前節點的代價,bestnode爲當前的節點
  8. 令i++,如果i>numlocal輸出bestnode,運算終止。否則,轉到步驟2
    上面的終止判斷有點機械,可以加上其他的終止判斷準則。

Fuzzy-k-means-Clustering

在一般的k-means聚類中每個訓練數據點都被唯一分配到一個類之中。在Fuzzy-k-means聚類中,並不把數據點精確的分給某一個點,而是用概率表示這個點和各個類之間的關係:
p(Xj|xi) 就表示i點屬於j類的概率。當他爲0的時候表示他們距離彼此很遠,當概率爲1時,就這個點剛好就在這個聚類的中點的旁邊。
這個方法存在一個很大的問題就是,他每個週期的運行時間是O(kn)。
數據點i屬於聚類j的概率可以由下式求得:

P(cj|xi)=(1dij)1b1kr=1(1dir)1b1

其中有:
dij=|xicj|2

//不理解爲什麼會長這樣,另外b是啥??
另外有:
i=1,...,n:j=1kP(cj|xi)=1

中心點得新的調整方法如下:
cj=ni=1[P(cj|xi)]bxini=1[P(cj|xi)]b

參數b控制,隨之距離的變大點的影響的減弱速度
插一張自己也沒看明白的圖:
這裏寫圖片描述

層次聚類

根據一個給定的相似度判斷標準在多個層次對數據進行劃分,並且使得低層生成的簇嵌套在高層的裏面。
(Hierarchische Zerlegung des Datenbestands(unter Verwendung eines gegebenen Ähnlichkeitsmaßes)in Menge geschachtelter Cluster)
一般情況下我們可以用樹狀圖(Dendrograms)對層次聚類的結果進行表示,其中每個節點表示一個可能的簇
我們可以使用從下往上的方法(bottom-up,agglomerative Ansätze),也可以使用從上往下(top-down, divisive Ansätze)的方法來構建這麼一顆樹。
針對層次聚類問題的主要思想是:
迭代合併低層聚類生成高一層的聚類
這裏寫圖片描述
右邊刻尺表示相似尺度。
根節點表示整個數據庫,而相應的葉子節點表示單個數據點,每個內部節點表示他所對應的子樹的數據的集合。

Agglomeration hierarchical Clustering

c=k//k爲事先給定得
c'=n,D_i={x_i},i=1...n
DO
    c'=c'-1;
    Find nearest Clusters D_i,D_j;
    Merge D_i and D_j
UNTIL [c==c' || d(D_i,D_j)>t]

問題是:O(n3 )!!!
文字解釋:
1. 每一個對象都作爲一個含有單個元素的簇
2. 計算任意兩個簇之間的距離
3. 找出其中距離最小的兩個簇A,B,並進行合併。把新的簇C加入簇的集合中,然後把舊的兩個簇從這個集合中刪了
4. 單C爲集合中唯一的簇時,運算結束
5. 否則,計算C到集合內所有其他簇的距離。然後回到步驟三。
文字和程序的表述存在兩個差異
1. 在終結判斷上存在一點差異,程序上的方法是比較合理的。文字解釋上得那個,就是本着讓它能夠停下來的想法去的。
2. 程序的時間複雜度是O(n3), O(n^2),具體的是:$n^2+\sum^n_{i=1}(n-1)。造成區別的主要原因在於,程序中的方法,每個循環都要重新計算所有的距離。
雖然程序和文字解釋在細節上存在區別,但是他們表達的意思是相同的。
(程序是機器學習的老師教得,文字部分是數據庫分析的老師教的)

AHC距離

AHC距離:最鄰近
//瞭解一下,真要用感覺還是前面提到的那個方法比較好

d(Di,Dj)=minxDi,xDj|xx|

存在問題:
這裏寫圖片描述
左邊的分類基本正確,但是右邊的因爲一個噪音導致把兩類合一了。
AHC距離:最遠鄰居
d(Di,Dj)=maxxDi,xDj|xx|

存在問題:
這裏寫圖片描述
左邊的閥值過大,右邊的閥值過小
//其實沒看明白是怎麼錯得????
對AHC的評價:
1.操作簡單
2.當k未知時,效果比k-means好
(Besser geeignet als k-means Clustering, wenn k nicht bekannt, aber gewisse Aussagen über die Form der Cluster getroffen werden können(d,t))//不懂這句????
3.與初始值無關
4.需要找到正確的屬性(Finden der richtigen Parameter nötig)//不是很有感??
5.對噪音比較敏感。
//然後又是一張關於AHC的沒看懂的圖:
這裏寫圖片描述

Divisives hierarchisches Clustering

一般性的算法描述
1. 初始擁有一個由所有數據對象組成的簇
2. 重複下面的步驟,知道每個數據對象都對應一個單獨的簇
*選擇一個要分離的簇
*用分離後的子簇來代替前面選中的簇
那麼現在有兩個問題來了,首先進行分離的簇的選擇的標準是神馬(有差嗎,不是單元簇不是都要進行分離嗎??)。其次,就是要怎麼進行分離
具體實現分離的方法有很多,下面介紹其中的一種方法:DIANA

DIANA

  1. 首先選擇具有最大半徑(Durchmesser)的簇C進行分離
  2. 然後從C中選出其中最偏僻的數據點o(通過比較簇內一點到其他所有點的平均距離來獲得)
    *SplinterGroup:={o}
    *重複把所有滿足下麪條件的點o’加入到SplinterGroup中:
    o’屬於簇C但不屬於SplinterGroup;
    D(o’)>0;
    其中:
    D(o)=ojC\SplinterGroupd(o,oj)|C\SplinterGroup|oiSplinterGroupd(o,oi)|SplinterGroup|

討論

//討論的內容總是會保持原文的
Sowohl agglomeratives als auch divisives hierarchisches Clustering benötigen n-1 Schritte
Agglomeratives Clustering betrachtet im ersten Schritt n(n-1)/2 Kombinationen
*Divisives Clustering: 2n12 Möglichkeiten, den Datenbestand zu splitten, im ersten Schritt.(DIANA betrachtet nicht alle Möglichkeiten explizit)//不該是2n -2嗎??爲什麼是n-1次方???
Divisives Clustering ist konzeptionell anspruchsvoller, weil Vorgehen beim Split nicht offensichtlich.
Agglomeratives Clustering berücksichtigt lokale Muster.
Separierendes Clustering berücksichtigt die globale Datenverteilung. Dadurch eventuell bessere Resultate. //神馬鬼

Birch算法

BIRCH表示:Balanced Iterative Reducing and Clustering using Hierarchies
//看這名字都比較像是層次聚類了,不知道爲什麼老師把他劃分爲劃分聚類???

Birch的特殊點

在具體說它之前,先看一下他有哪些特殊之處:
1. 他需要構建模型,其實就是CF樹,用來描述數據的分佈
2. 他比劃分聚類更加系統化//抽象啊,可以理解爲效果更好嗎??
3. 他對存儲空間的需求比較少

BIRCH的屬性

另外再看一下BIRCH算法的一些屬性:
1. (I/O-Kosten wachsen linear mit der Größe des Datenbestands, wenn CF-Tree in Hauptspeicher passt.)這句理解不能????
2. 每次迭代都能夠輸出一個Clustering(不是Cluster)
3. 之所以不斷迭代,是爲了獲得更優的Clustering(zusätzliche(optionale)Schritte liefern lesseres Clustering)
同樣的希望的Cluster的數量也屬於算法的一個參數(Anzahl k der gewünschten Cluster ist Parameter des Algorithmus)//是指作爲結束的標誌嗎???

一些定義

在看具體的算法之前,還需要很多的準備,首先先認識一下下面的定義吧//裏面有些就是換了個名字!!!
已知Cluster{Xi }
質心(Centroid)

Xo=Ni=1XiN

半徑(Radius)//感覺更像是標準差
R=(Ni=1(XiX0)2N)1/2

直徑(Durchmesser)//要怎麼解釋這個半徑和直徑的關係呢??這像是簇內兩點的平均標準差
D=(Ni=1Nj=1(XiX0)2N(N1))1/2

上面是一個簇內的情況,現在來看一下簇與簇之間的情況。
先約定有索引爲1,…,N1 的點在簇1內,N1+1,...,N1+N2 的點在簇2內
//感覺老是換參考書了以前的話,果斷就是用一個 符號搞定,編課件的時候真得就不能再走點心嗎??這看起來真心累啊
那麼就有簇1和簇2之間的平均距離爲:
D2=(N1i=1N1+N2j=N1+1(XiX0)2N1N2)1/2

D2 越小說明兩個簇捱得越近,當他很小時兩個簇也可能產生相交

CF樹中的CF

CF代表Clustering Feature。在BIRCH中每個簇都用三個屬性進行描述,也就是所謂的CF,他們是(N,LS,SS)。他們是目標簇的聚合信息(aggregierte Information)。
先看一下他們分別代表了什麼內容:
*N代表着簇內點的數量
*LS爲linear sum

LS=i=1NXi

*SS是square sum的意思:
SS=i=1N(Xi)2

那麼爲什麼是這三個屬性呢,他們有什麼優勢呢??
首先,通過這三個屬性可以比較方便的計算前面提到的質心啊,半徑啊,直徑啊這些東西。具體方法自己琢磨。
其次,兩個不想交的簇合併成一個簇時,新的簇的屬性可以通過兩個舊的簇的屬性,很方便的計算出來。直接相加就是了。

CF樹

CF樹的屬性

在研究怎麼生成這顆樹之前,先了解一下他的屬性吧:
1. CF樹是一顆高度平衡樹
2. CF樹的每個節點都代表一個簇
3. 如果節點B包含有節點A那麼對應的簇A也就包含在簇B裏面
4. 葉節點代表的是基本簇(Elementar-Cluster)。//注不是指只含有一個點的簇。他只含有CF數據(Blatt-Menge von Clustering Features.’Elementar-Cluster’)
5. 內部節點的數據結構和葉子節點的不同,他的存儲形式是[CFi,childi ],其中CFi 代表childi 的CF值,也就是說一個內部節點,他包含了指向兒子節點的指針,以及對應兒子節點的CF值。

CF樹的參數

一顆CF樹主要含有三個參數,他們分別是:
B - 指Fan-Out(針對內部節點)
B’ - 指葉子節點的容量(Kapazität eines Blatts)//這個不是很了??感覺沒必要吧???
T - 指直徑或半徑的閥值。一個基本簇的直徑或半徑必須小於T
假設沒有T會怎麼樣呢??
Ansonsten würden nur Füllgrad der Knoten Struktur des Baums ‘steuern’
Entfernte Punkte so stets in unterschiedlichen Blattknoten.Besseres Modell.

往CF樹中增加節點

  • 這些節點會被分配到理他最近的節點上(通過計算該節點到對應節點質心的距離)(就像B+樹一樣//對此表示不懂??)//所以這是隻看葉子節點對吧??
  • 假如找不到適合的葉子節點(由於閥值T的原因),那麼該新加入的點將自己組成新的葉子節點,加入到樹中。
  • 當一個簇太大時(比如他含有太多的子簇),他將進行分裂。
    另外加入節點的時候,應該從根部出發逐個節點的比較,當找到適合的時候,就把他加入這個節點,然後繼續向下看,直到比完葉子節點。感覺有點怪,好像只比較葉子節點,加入後一路往上修改CF,感覺更方便。估計是我上課聽錯了吧???還有如果新加入的點到兩個節點的距離相等,而且小於T呢???
    另外新加入的點的信息並不會存儲到節點中,只是對原節點中的CF值進行修改。(Kapazität der Blätter erschöpft sich kaum???所以前面的B‘參數究竟是幹嘛用的??)

分裂節點

1.把相互距離最遠的兩個點作爲新的節點的質心
(Die am weitesten voneinander entfernten Punkte sind die Seeds)
//按道理內部節點記錄的應該是子節點的信息,也就是說上面所謂的節點指的其實是各個子節點的質心了???那如果是葉子節點內部滿員了怎麼辦???
2.把其餘的點分配到離得比較近的節點
3.Sobald Knoten, der einem Seed entspricht, voll wird anderer Knoten einfach aufgefüllt.這句話表示不理解???
從上面也可以看出在分裂節點的時候,我們並不需要具體的點的信息,而只是使用了CF屬性。這也使得他可以處理比較大得數據
(BIRCH arbeitet nur mit aggregierten Werten, damit möglichst viel im Hauptspeicher ablaufen kann.)

節點分裂對應存在的問題

問題是,節點分裂與否只和它是否滿員了有關,而與具體的當時的聚類的質量無關。
比如下面這張圖中的情況,他分裂後能長得很醜
這裏寫圖片描述
B等於四,新加入的節點使它必須進行分裂。但分裂後很醜不是嗎,中間四個點明明應該分一起才比較好啊。針對這種問題,我們採取的方法是融合(Merge)再分裂法。

Merg

*Merg直接發生在分裂之後
*我們觀察分裂後獲得兩個新的節點的所有的孩子節點(Wir betrachten die Kinder des Knotens, der zwei neue Knoten nach Splitting enthält)
*我們把相互距離最近的兩個子節點進行合併(如果他不是剛分裂出來的兩個節點的話)
//從這裏應該可以看出內部節點中除了子節點之外,還應該保留有屬於自己的CF值
*然後我們把合併後的節點重新進行分裂。然後重複吧。

BIRCH算法

  1. 構建CF樹
  2. 通過全局聚類算法重新調整所有葉節點中的子簇
    //不知爲何需要這一步驟,上面的全局聚類算法應該是指前面提到的方法????比如新建葉節點的時候,可能已經存在的某個節點,相對於舊的簇的質心,他離新的節點的質心比較近,而這種情況,在建樹的時候是沒有考慮在內的。
    /Neuanordnung der Subcluster in den Bl’ttern durch globalen Clustering-Algorithmus(wegen Skewed Input und Splitting gemäß Page Size).Illustration:Ausreißer ‘neben’ Cluster, Abstand < T./
  3. 把得到的簇的質心作爲中心,重新分配數據點
    //這個不是包含在前面那步裏面了嗎???
    (Centroide der Cluster als Seeds, Neuverteilung der Datenpunkte)
    因此在這裏我們應該明白,生成的CF樹,並不是作爲一個結果,而是應該對它進行進一步的處理。

討論

Idee, räumliche Indexstruktur beim Clustering zu verwenden, nicht auf partitionierende Verfahren beschränkt.
*DBSCAN tut es
*Beschleunigung von LOF so ebenfalls möglich
Räumlicher Index ist kompakte Zusammenfassung des Datenbestands hier also hilfreich

高維數據聚類

高維數據帶來的問題

前面介紹的方法一般適用於維度不高的情況,在少於10個屬性時,其運行效果比較好。而在高維空間中,這種距離的度量可能就會沒有效果。
那麼高維數據都會帶來哪些問題呢???
1. 首當其衝得就是前面說到的一些具體的聚類方法了
*zu geringe Dichte mit Dichte-basierten Ansätzen
*es ergibt sich keine sinnvolle Strukturierung der Daten mit hierarchischen Verfahren
//這是兩個例子,不是很懂
2. 除了1之外還有一些問題,他們在一般的聚類中已經存在,但是在高維數據中,這個卻問題得到了升級。
*應該首先找到用於生成簇的維度
*不能事先對維度進行剪枝
(Problem, das im Hochdimensionalen mehr Gewicht hat:
Dimensionen, in denen Punkte Cluster bilden, müssen erst einmal gefunden werden.
Dimensionen können nicht apriori gepruned werden)
//其實兩個問題都不是很瞭解
//一下對於問題部分的描寫來自《數據挖掘:概念與技術》
在高維空間中,傳統的距離度量可能沒有效果。這種距離度量可能被一些維刪得噪音所左右。因此,在整個高維空間上得簇可能不可靠,而發現這樣的簇可能沒有意義。
那麼,高維數據上什麼樣的簇纔是由意義的呢?對於高維數據聚類分析來說,我們仍然想把相似的對象聚在一起。然而,數據空間常常太大,太混亂。另一個挑戰是,我們不僅僅需要發現簇,而且還要對每個簇,找出顯露該簇的屬性集。換言之,高維空間中的簇通常用一個小屬性集,而不是用整個數據空間定義。本質上,聚類高維數據應該返回最爲簇的對象分組(與傳統的聚類分析一樣);此外,對於每個簇,還要返回刻畫該簇的屬性集。(這對應了下面PROCLUS的輸出)
面對高維數據的聚類通常使用的又四種方法,分別是:
1. Subspace clustering
2. Projected clustering
3. Hybrid clustering
4. Correlation clustering
//課上老師只講了第二種方法,但是在他推薦的書上,除了第二種方法,其他的方法都講了。所以他的意思很明確了。。。。

Projected Clustering

問題描述

輸入:
1. 簇的數量k
2. 每個簇的平均維度
//不是很了,爲什麼是平均?也就是說每個簇的維度還能是不同的了???
(M.E. etwas willkürlich, dass der Benutzer diese Parameter vorgeben muss, ist aber bei diesem Verfahren so.)不知縮寫是何意??
輸出:
1. 把數據分成k+1個集合(多出的一個是給噪音的)
2. 每個簇i對應的一個所有維度的子集
//我還是去前面補點東西吧

PROCLUS算法流程

先認識一下PROCLUS算法的大概流程
1.確定初始的Medoid集
2.確定每個Medoid對應的維度
3.把數據分配到最近的Medoid中
4.重新計算Medoid集
5.無優化則停止,否則跳轉到步驟2
//neuer Schritt muss jenes I Kriterium berücksichtigen這裏的I標準表示不認識???
下面來看看具體的實現細節

確定一個Medoid對應的維度

在確定Medoid集之後,會爲每一個Medoid選擇其對應的維度集。
(Unterschied zum bisherigen Verfahren:Zu jedem Medoid Menge von Dimensionen explizit wählen(in jedem Schritt neu, nachdem Medoide ermittelt wurden))//不知道這裏的explizit表達的是神馬意思

確定Li

我們用Li 表示靠近Medoid mi 的點(L代表local的意思),我們通過下面的方式來定義這個Li
*δi=minij(dist(mi,mj))
*Li 就是指到點mi 的距離比δi 小的點得集合
//看見了上面還是使用了原來的dist函數,這樣沒問題嗎??
特殊情況下,Li 可以爲空
//這種情況是不是就是對應了沒有屬於這個mi 的維度,也就是說這個mi 最好還是換了比較好???

計算Xij

計算每個維度j中,Li 中的點得 距離Xij
// 距離好像就是指各維上L中點到對應Medoid的阿基米德距離之和。不是很清楚啊???

計算Yi

Yi 代表的是Xij 的中值,其中i代表的是簇i。

Yi=dj=1Xijd

確定一個Medoid對應的維度

XijYi 爲負數時,我們就說維度j杜宇Medoid mi 來說是重要的。否則則是不重要的。
這裏寫圖片描述

在給定I的條件下,怎麼分配維度呢

I指的是每個簇維度的平均數量。
前面我們計算了XijYj , 但現在我們對這個確定的Xij 和差值並不感興趣,因爲我們給定了一定數量的I,所以我們現在更感興趣的是這個維度上的Xij 相對於均值的偏差(Interessant sind aber nicht absolute X werte bzw. Differenzen, sondern relative Abweichung vom Durchschnitt.)
因此我們對標準差進行了如下定義:

σi=j(XijYi)2d1

//不是d維嗎,爲什麼會是初一d-1呢???
接下來我們計算(Jetzt Vergliech der Differenz für unterschiedliche Cluster Hierzu Zij berechnen)
Zij=XijYjσi

當標準差越小時對應的Z值越大(Wenn Standardabweichung klein, dann ist Z-Wert tendenziell groß)
對Z進行排序,根據需求取出對應的維度

確定簇

計算每個數據點到各個Medoid的曼哈頓距離(Manhattan Segmental Distance),並把數據點分配到離他醉經的Medoid上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章