日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据挖掘】聚类分析

發布時間:2023/12/14 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据挖掘】聚类分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聚類分析 Cluster Analysis


肝到爆炸嗚嗚嗚

一、什么是聚類分析

關鍵詞

1?? 簇 Cluster:數據對象的集合,相同簇中的數據彼此相似,不同簇中的數據彼此相異。

2?? 聚類分析 Cluster analysis:根據數據特征找到數據中的相似性,并將相似的數據聚集(分組)到一個簇中。

3?? 無監督學習 Unsupervised learning:并沒有為數據給出預先定義好的類別


好啦,我們現在有了理論儲備啦!就讓我們一起走進聚類分析吧~

聚類分析在我們的生活中并不陌生,甚至是隨處可見的:比如商場的促銷活動呀,城市規劃的地塊評估呀,生物學中基因的分組呀,GIS中的空間模式分布評估呀,還有各種標簽tag什么的。在數據挖掘領域中,聚類分析常常用于:

  • 作為一個深入了解數據分布的獨立工具(As a stand-along tool to get insight into data distribution)
  • 作為其他算法的預處理過程(As a preprocessing step for other algorithms)

這樣一個依托于無監督的分組方法,結果可是隨心所欲千奇百怪的哦,比如在動漫角色特征聚類里,有的聚類方法把灰毛的伊蕾娜分到了白毛組,有的聚類方法則是分到了銀發組。

為了避免這種情況,我們需要設定指標去評估一個聚類方法的好壞,讓不同的聚類結果之間有了可比性,就能知道哪些是好孩子啦。

一種好的聚類方法可以生成好質量的簇,而這些簇滿足:

  • 簇內相似性高
  • 簇間相似性低

可以理解為,不同學校的小孩子之間應該接觸的少,一個學校的小孩子之間應該接觸的多。

在這基礎上,聚類結果的具體質量應該取決于相似度度量算法,以及它的實現。如果一個聚類還能挖掘一些或者全部的隱藏模式,我們也可以認為它是一個高質量的聚類方法。

The quality of clustering result depends on both the similarity measure used by the method and its implementation.

The quality of a clustering method is also measured by its ability to discover some or all of the hidden patterns.

通常,數據科學家們使用相異度/相似度矩陣 Dissimilarity/Similarity metric來對不同數據特征之間的相似度進行度量,一般是通過距離公式進行,數據iiijjj之間的距離可以記作d(i,j)d(i,j)d(i,j)。

當然,不同數據類型之間,比如連續數據、布爾型數據、分類數據、語義數據、序數數據,他們所運用的距離度量方法也是不同的。對于距離度量方法的權重分配,也是由數據語義和應用所決定的。

Weights may be assigned to different variables based on applications and data semantics.

相似性度量只是最基本的,下表給出了聚類的一些其他需求:

需求解釋
Scalability可擴展的
Ability to deal with different types of attributes能夠處理不同屬性
Ability to handle dynamic data能處理動態數據
Discovery of clusters with arbitrary shape發現任意形狀的簇
Minimal requirements for domain knowledge to determine input parameters對確定輸入參數的領域知識的最低要求
Able to deal with noise and outliers能處理噪聲和離群數據
Insensitive to order of input records對于輸入數據順序的不敏感性
High dimensionality高維特性
Incorporation of user-specified constraints合并用戶指定的約束條件
Interpretability and usability可解釋性和可應用性

除卻聚類方法的評估外,我們也可以基于簇的屬性進行評估哦,那么一個普通的簇有什么屬性呢?

質心 Centroid

一般是一個簇的中間,可以寫作:
C=∑iN(ti)NC=\frac{\sum_i^N(t_i)}{N} C=NiN?(ti?)?
半徑 Radius

簇中點到簇質心的距離的平均(點與中心),寫作:
R=∑iN(ti?c)2NR=\sqrt{\frac{\sum_i^N(t_i-c)^2}{N}} R=NiN?(ti??c)2??
直徑 Diameter

簇中所有點之間的平均距離的平方根(點與點),寫作:
D=∑iN∑jN(ti?tj)2N(N?1)D=\sqrt{\frac{\sum_i^N\sum_j^N(t_i-t_j)^2}{N(N-1)}} D=N(N?1)iN?jN?(ti??tj?)2??


二、聚類分析中的數據類型

好了,上一節我們知道了什么是簇,什么是聚類,以及如何評價一個聚類方法的好壞,下面我們就要進一步了解聚類分析是如何運作的。數據挖掘是以數據為主導,以數據為驅動的,拋開具體數據空談算法是不合理的。所以,我們需要來看看聚類分析中的輸入數據究竟都什么牛馬。

關鍵字

1?? 數據矩陣 Data matrix:數據矩陣就是把數據堆疊在一起形成的二維表啦,每一行是一個記錄record,每一列是一個屬性class, feature, attribute... etc.,可以寫作如下形式:
[x11?x1n??xm1?xmn]\begin{bmatrix} x_{11}&\cdots & x_{1n}\\ \vdots & &\vdots \\ x_{m1} & \cdots & x_{mn} \end{bmatrix} ????x11??xm1?????x1n??xmn??????
2?? 相異矩陣 Dissimilarity matrix:用于衡量各個數據之間的相異程度,等于1?相似度1-相似度1?,所以元素自己和自己之間的相異度是0啦:
[0?0d(n,1)?0]\begin{bmatrix} 0& & \\ \vdots &0 & \\ d(n,1) & \cdots & 0 \end{bmatrix} ????0?d(n,1)?0??0?????


從上文聚類好壞的討論中,我們提到不同數據之間的相似性需要采用不同的距離度量方式,在聚類分析中,常見的數據源大致可分為六種:

類型解釋
Interval-scaled variables數值變量
Binary variables二值數據
Nominal variables名義數據
Ordinal variables順序數據
Ration-scaled variables比率尺度數據
Variables of mixed type混合數據

1?? 數值變量

我們對這類數據的處理是需要先進行標準化將其進行區間縮放的,標準化方法稱為z得分(z-score)法:
zif=xif?mfsfz_{if}=\frac{x_{if}-m_f}{s_f} zif?=sf?xif??mf??
其中,
mf=x1f+x2f+...+xnfnm_f=\frac{x_{1f}+x_{2f}+...+x_{nf}}{n} mf?=nx1f?+x2f?+...+xnf??
也就是數據集中fff屬性的平均值;
sf=∑∣xif?mf∣ns_f=\frac{\sum|x_{if}-m_f|}{n} sf?=nxif??mf??
也就是采用絕對值替代開平方算法的標準差,z-score與標準差標準化的區別就在于使用了絕對值。使用平均絕對偏差,要比使用標準差更加穩健。

Using mean absolute deviation is more robust than using standard deviation.

好啦,標準化完后,我們就可以用距離度量公式計算相似性啦,距離度量公式有很多,例如歐氏距離、馬氏距離、切比雪夫距離、曼哈頓距離、閔可夫斯基距離、漢明距離、余弦距離等等,這里我們介紹閔可夫斯基距離。
d(i,j)=q∑∣xin?xjn∣d(i,j)=^q\sqrt{\sum{|x_{in}-x_{jn}|}} d(i,j)=qxin??xjn??
qqq取1,就成了曼哈頓距離,當qqq取2,就成了歐氏距離。


2?? 二值變量

對于一個二值數據表,我們可以寫作:

其中,數據之間的對稱性度量表示為:
d(i,j)=b+ca+b+c+dd(i,j)=\frac{b+c}{a+b+c+d} d(i,j)=a+b+c+db+c?
不對稱性度量表示為:
d(i,j)=b+ca+b+cd(i,j)=\frac{b+c}{a+b+c} d(i,j)=a+b+cb+c?
在不對稱矩陣中,我們需要注意的是后面那個不對稱性度量。


3?? 名義數據

這類數據呢,一般來說不具備可比性。比如小明小紅小芳,紅黃藍什么的。

目前主流的處理方法有兩種:

第一種,簡單匹配。
d(i,j)=p?mpd(i,j)=\frac{p-m}{p} d(i,j)=pp?m?
其中,ppp表示總的名義數據數量,mmm表示兩個數據匹配到的數據次數。

第二種,構建one-hot編碼。

第一種方法常在簡單處理中使用,而第二種一般多見于機器學習和深度學習。


4?? 序數數據

這類數據相較于名義數據,雖然還是屬于定性數據范疇但是帶上了可比性哦。比如:大中小,優良差什么的。

對其的處理分為三步:

第一步,將其按照大小排列,用大小次序代替數據值。
rif∈{1,...,Mf}r_{if}\in\{1,...,M_f\} rif?{1,...,Mf?}
第二步,將數據的范圍縮放到[0,1][0,1][0,1]區間:
zif=rif?1Mf?1z_{if}=\frac{r_if-1}{M_f-1} zif?=Mf??1ri?f?1?
第三步,通過數值的方式,對數據的不相似性進行計算。


5?? 比率數據

比率數據是一個非線性的尺度,一般不同比率之間的差距是指數倍的。對其進行的處理分為三步:

首先先取對數,使其區間縮放:
yif=log(xif)y_{if}=log(x_{if}) yif?=log(xif?)
接著,假設他們是一個連續數據,并將他們的秩作為定序數據

最后,在利用處理區間縮放數據的方式對其進行計算。


6?? 混合數據

一種常用的權衡多種屬性距離的公式如下所示:
d(i,j)=∑f=1pσij(f)dij(f)∑f=1pσij(f)d(i,j)=\frac{\sum^p_{f=1}\sigma^{(f)}_{ij}d^{(f)}_{ij}}{\sum^p_{f=1}\sigma^{(f)}_{ij}} d(i,j)=f=1p?σij(f)?f=1p?σij(f)?dij(f)??
其中,σij(f)\sigma^{(f)}_{ij}σij(f)?是一個二值量,當兩個數據同時具有屬性列fff時,這個值取到111,否則,在任意數據缺失該屬性列,或者當fff是一個非對稱屬性,且xif=xjf=0x_{if}=x_{jf}=0xif?=xjf?=0時取到000ddd的計算則是根據屬性類型,應用各自的公式。


好了,說完了每種類型以及距離度量后,我們來做個小練習吧!

這樣一組數據中,Test-1是分類數據,Test-2是定序數據,Test-3則是比率數據。

我們現在要計算整張表的數據相異度矩陣。

根據混合數據計算公式,我們需要分別對不同種的屬性計算距離。

首先是對Test-1的分類數據,我們采用簡單匹配規則進行計算,得到的相異矩陣為:
[0101100110]\begin{bmatrix} 0& & & &\\ 1&0&&&\\ 1&1&0&\\ 0&1&1&0 \end{bmatrix} ?????0110?011?01?0??????
對于Test-2的定序數據,我們需要先轉換成rank值,然后進行區間縮放,最后距離公式進行計算,這里我們選用的是曼哈頓距離

原始數據Rank值縮放值
excellent31
fair10
good20.5
excellent31

計算的結果為:

d(1,0)1
d(2,0)0.5
d(2,1)0.5
d(3,0)0
d(3,1)1
d(3,2)0.5

[0100.50.50010.50]\begin{bmatrix} 0& & & &\\ 1&0&&&\\ 0.5&0.5&0&\\ 0&1&0.5&0 \end{bmatrix} ?????010.50?00.51?00.5?0??????

對于Test-3,我們先對取對數,然后將對數視作數值型數據進行規范化后,再計算距離。

規范化公式為:
y=x?minmax?miny=\frac{x-min}{max-min} y=max?minx?min?

原始數據對數縮放值
4452.650.75
221.340
1642.210.5
12103.081

于是T3最終的結果為:
[00.7500.250.500.2510.50]\begin{bmatrix} 0& & & &\\ 0.75&0&&&\\ 0.25&0.5&0&\\ 0.25&1&0.5&0 \end{bmatrix} ?????00.750.250.25?00.51?00.5?0??????
綜合三個屬性列,計算結果為:
d(i,j)=d1(i,j)+d2(i,j)+d3(i,j)3d(i,j)=\frac{d_1(i,j)+d_2(i,j)+d_3(i,j)}{3} d(i,j)=3d1?(i,j)+d2?(i,j)+d3?(i,j)?

[00.75+1+1300.25+0.5+130.5+0.5+1300.25+0+031+1+130.5+0.5+130]=[00.9200.580.6700.0810.670]\begin{bmatrix} 0& & & &\\ \frac{0.75+1+1}{3}&0&&&\\ \frac{0.25+0.5+1}{3}&\frac{0.5+0.5+1}{3}&0&\\ \frac{0.25+0+0}{3}&\frac{1+1+1}{3}&\frac{0.5+0.5+1}{3}&0 \end{bmatrix} \\ =\begin{bmatrix} 0& & & &\\ 0.92&0&&&\\ 0.58&0.67&0&\\ 0.08&1&0.67&0 \end{bmatrix} ?????030.75+1+1?30.25+0.5+1?30.25+0+0??030.5+0.5+1?31+1+1??030.5+0.5+1??0??????=?????00.920.580.08?00.671?00.67?0??????


三、主要聚類算法的分類

我們終于要進入聚類分析的核心:聚類分析算法啦!

根據算法之間的異同,我們可以將他們分為五大類(沒錯,這也算是一種聚類)。

1?? 分區方法

  • 構建各種分區,然后通過準則對他們進行評估,例如均方差。
  • 典型方法:k-means, k-medoids, CLARANS

2?? 層次方法

  • 使用某些準則創建數據的層次分解
  • 典型方法:Diana, Agnes, BIRCH, ROCK, CHAMELEON

3?? 基于密度的方法

  • 基于連通性和密度函數
  • 典型方法:DBSACN, OPTICS, DenClue

4?? 基于格網的方法

  • 基于多粒度的結構
  • 典型方法:STING, WaveCluster, CLIQUE

5?? 基于概率統計學模型

  • 典型方法:EM

四、分區方法 Partitioning Methods

基本概念

將有n個對象的數據庫D按照規則(如最小平方和)劃分成k個簇。

經典算法

1?? K-Means聚類

  • 初始化:給定k個隨機初始化的中心點
  • 迭代:計算每個簇當前的質心
  • 計算每個點到點前簇中心的距離,并將他們分配進最近的簇

時間復雜度O(tkn)O(tkn)O(tkn)nnn是對象個數,kkk是簇個數,ttt是迭代次數。

通常條件下會止于全局最優解。

缺點

  • 不適用于分類數據(只能計算數值)
  • 需要指定聚類簇的個數
  • 無法處理有噪聲的情況和異常值
  • 不適合發現非凸型的簇

變化

🏷 處理分類數據:k-modes算法

  • 用模式(modes)代替原先的均值
  • 基于新的不相似度量方式處理分類對象
  • 使用一種基于頻率的方式對簇進行更新

🏷 處理混合數據:k-prototype

🏷 期望最大化擴展

  • 基于加權度量進行計算

🏷 處理異常數據:k-Medoids算法

  • 采用簇中最中心的點來代替原先的均值,此時,這個中心點是實際存在的點

實現

import random import math# 隨機生成100個點 points=[(random.randint(-50,50),random.randint(-50,50)) for i in range(100)]def k_Means(poi,k=5,epochs=100):# 初始化centroid=[] # 質心點cluster=[[0]*(len(poi[0]))+[0] for i in range(k)] # 記錄一個簇中所有點每一個維度上坐標的總和,以及簇點的個數,這步是方便計算罷了PoiClass=[-1 for i in range(len(poi))]# 映射表,輸出每個點對應的類Break=[-1 for i in range(len(poi))] # 用來控制邏輯,比如當這個表跟映射表的差距小于2時,我們就不迭代了# 隨機選取中心點# 無放回抽樣for i in range(k):if (v:=random.choice(poi)) not in centroid:centroid.append(v)# 計算每個點的歐氏距離def edis(x,y):return math.sqrt(sum([(x[i]-y[i])**2 for i in range(len(x))]))# 開始迭代for i in range(epochs):# 計算每個點到中心的距離for pId,p in enumerate(poi):dis,idx=2e31,0for Idx,c in enumerate(centroid):if (v:=edis(p,c))<dis:dis,idx=v,Idx # 獲取最小值時候的坐標# 簇統計量,方便計算for i in range(len(p)):cluster[idx][i]+=p[i]cluster[idx][-1]+=1 # 簇的數量# 更新映射表PoiClass[pId]=idx# 重新計算每個簇的中心,這個中心是平均值,并不一定是存在的點for i,v in enumerate(cluster):new_c=[]for j in range(len(v)-1):new_c.append(v[j]/v[-1])centroid[i]=new_ccluster[i]=[0]*len(poi[0])+[0] # 將常量清零# 設置終止迭代條件if sum(PoiClass[i]==Break[i] for i in range(len(poi)))>=len(poi):return PoiClassBreak=PoiClass[:]return PoiClass

五、層次方法 Hierarchical Methods

這類方法并不需要設置初始的聚類簇k,但是需要設置終止條件。例如:

相較于分區的方法,層次方法是一種基于概念級的,不需要人為給定簇大小的方法,他能夠遠距離的獲取相似對象。

下面我們來介紹幾個經典算法:

1?? AGNES (Agglomerative Nesting)

  • 由Kaufmann和Rousseeuw在1990年提出
  • 使用單鏈路方法和相異矩陣
  • 合并相異度最小的點
  • 采用一種非下降的方式進行合并
  • 最終,所有的點都會屬于一個集群

2?? DIANA (Divisive Analysis)

  • 還是那兩人在同一年提出的
  • 就是AGNES的逆變換

主要缺點

  • 不能很好的進行擴展,時間復雜度至少是O(n2)O(n^2)O(n2)級別
  • 不能撤銷之前的操作,類似于馬爾科夫鏈

集成基于距離和層次的聚類算法

  • BIRCH(1996) 采用cf -樹,逐步調整子聚類質量

  • ROCK (1999)

  • CHAMELEON(1999)

3?? BIRCH

BIRCH是一種聚合層次聚類,他構建了一個CF樹(Clustering Feature Tree),用于增量生長。

階段一 Phase 1

掃描數據庫,生成一個在內存中的初始CF樹(數據的多層次壓縮,試圖保留數據固有的聚類模式)

階段二 Phase 2

使用聚類算法對CF樹的節點進行聚類

CF要素是一個記錄了點數量,坐標向量,坐標平方和的要素,用這些屬性去描述數據。

CF樹是一個高度平衡樹,它分層級的去存儲了CF要素。

構建CF樹有兩個要素:

  • 分支系數:子項的最大數量
  • 閾值:葉子結點上子簇的最大直徑

大概跟這個一樣。

算法步驟

  • 將每個對象插入到最近的葉子結點
  • 如果一個葉子結點的直徑超過閾值,那么將被分類
  • 更新CF要素以及該路徑上所有祖先
  • 如果CF樹的大小太大,從葉節點重新構建樹,不重新掃描原始對象
  • 兩個參數(分支因子,閾值),控制樹的大小

復雜度

  • O(n)O(n)O(n)
  • 只需要一次掃描就行,IOIOIO開銷很小

缺點

?只處理數字數據,并對數據記錄的順序敏感

?不擅長任意形狀的集群

4?? CURE

CURE算法是一種采用表征量進行聚類的算法。

算法步驟

  • 將每個獨立點作為一個分割聚類開始
  • 合并周圍的簇,直到每個簇包含超過c個點
  • 對于每個簇,使用c個散列點作為代表
  • 如果有超過k個簇,那么將會合并表征量最接近的簇,并且更新代表點

選擇表征點

  • 首先先選擇一個離簇平均值最遠的點
  • 然后,選擇(c-2)個最遠點采樣點
  • 將散列點朝著均值縮小α\alphaα
  • 于是,每個散列點ppp的表征都有:p+α(mean?p)p+\alpha(mean-p)p+α(mean?p)

合并

  • 兩個簇表征點最小的歐氏距離

特點

  • 由于存在多個代表點,所以CURE可以用于發現任意形狀的簇
  • 對于異常值不敏感
    • 由于向平均值做了縮小
  • 時間復雜度為:O(n2log(n))O(n^2log(n))O(n2log(n))
  • 對于大規模的數據庫,還是要進行分區和采樣的

六、 基于密度的方法 Density-Based Methods

特點

  • 發現任意形狀的簇
  • 能夠處理噪聲
  • 需要密度參數作為終止條件
  • 復雜度是O(n2)O(n^2)O(n2)

一般來說,基于密度的方法有兩個主要的參數:

1?? n鄰域

  • 點半徑n內的鄰域

2?? 最小點

  • 鄰域內包含的最小點數量

核心對象

如果一個點鄰域內的點超過了最小點數量,那么這個點就是一個核心對象(core object)

直接密度可達

  • 一個點ppp是一個點qqq的直接密度可達點
    • ppp屬于qqq的鄰域
    • qqq是一個核心對象

例如:

密度可達

如果ppp可以由qqq的直接可達鏈得到,那么ppp稱為qqq的密度可達點。

這個意思是,oooqqq的直接可達點,pppooo的直接可達點,于是有:
q?>o?>pq->o->p q?>o?>p

密度連接

密度連接點表示如果pppqqq都是ooo的密度可達點,那么pppqqq稱為密度連接點

下面我們介紹一個老大哥:DBSCAN

算法步驟

  • 設置每個對象為未訪問

  • 隨機選擇一個未訪問的點ppp,標記ppp表示訪問

  • 如果p的半徑為nnn的鄰域中至少存在MinPts個對象

    • 我們就創建一個新的簇,并將ppp加入ccc
    • 設N 是ppp鄰域中對象的集合
    • 對在NNN中的每個點p′p'p
      • 如果p′p'p是未訪問的
        • 標記p′p'p為訪問節點
        • 如果這個p′p'p也是核心節點,那么將它范圍內的點加入到NNN
      • 如果p′p'p還不是任何簇中的成員,我們就把p′p'p加入ccc
    • 輸出簇ccc
  • 否則,標記ppp為噪聲

  • 重復以上直到每個點被訪問

實現

def DBSCAN(poi,radius=1,MinPts=5):def edis(x,y):return math.sqrt(sum((x[i]-y[i])**2 for i in range(len(x))))unvisit=set([i for i in range(len(poi))]) # 創建訪問表Clusters=[-1]*len(poi) # 一個hash表,判斷哪個點對應哪個簇c=0while len(unvisit):# 隨機選一個中心點p=random.choice(list(unvisit))unvisit.remove(p)# 鄰域展開!neighbor=set()for id,pn in enumerate(poi):if edis(poi[p],pn)<=radius:neighbor.add(id)if len(neighbor)>=MinPts:# 創建一個新的簇Clusters[p]=c# 遍歷鄰域點while neighbor:id=neighbor.pop()if id in unvisit:unvisit.remove(id)# 找他的鄰域n=set()for Id,pi in enumerate(poi):if edis(poi[id],pi)<radius:n.add(Id)if len(n)>=MinPts:# 合并neighbor|=n# 如果這個點不屬于任何簇,將其加入cif Clusters[id]==-1:Clusters[id]=c# 否則,我們認為p是一個噪聲(-1)c+=1return Clustersprint(DBSCAN(points))

結果展示

嗯,離群點被標記為了-1

如何選擇距離也會對結果產生很大的影響。


七、基于格網的方法 Grid-Based Methods

采用多分辨率網格數據結構

有幾種有趣的方法

  • STING(一種統計信息網格方法) by Wang, Yang, Muntz)(1997)

  • WaveCluster由Sheikholeslami、Chatterjee和Zhang設計

    • 利用小波方法的多分辨率聚類方法
  • CLIQUE: Agrawal等人(SIGMOD ’ 98)

    • 在高維數據上處理

我們來看一個算法:STING

描述

  • 空間區域被劃分為矩形單元格

  • 有幾個級別的單元對應不同的分辨率級別

  • 上層的每個單元都被劃分為下一層的一些更小的單元

  • 每個單元格的統計信息預先計算和存儲,并用于回答查詢
  • 從低級單元的統計量可以很容易計算出高級單元
  • 群集是根據計數、單元格大小等來識別的

有點像高維度的線段樹

查詢方法

  • 使用自頂向下的方法來回答空間數據查詢
  • 從一個預先選擇的層開始-通常有少量的單元
  • 對于當前級別中的每個單元格,計算置信區間
  • 將不相關的單元格從進一步的考慮中刪除
  • 完成檢查當前層后,繼續檢查下一層相關單元格
  • 重復這一過程,直到到達底層

優勢

  • 獨立查詢
  • 增量更新
  • O(kO(kO(k)查詢復雜度
  • O(n)O(n)O(n)生成復雜度

缺點

  • 所有的簇邊界都是水平或垂直的,沒有檢測到對角線邊界
  • 處理時間取決于每個網格的大小

這類方法用的比較少,所以就簡略介紹下了


八、異常分析 Outlier Analysis

什么是異常值(極端值、離群點)Outlier?

  • 這組對象與其余的數據有很大的不同
    • 可能是由于測量或者執行時的誤差引起的
    • 也可能是變量內在可變性引起的

尋找異常值是非常有價值的。

那么如何找到一組數據中不聽話的孩子呢?

1?? 可視化

2?? 聚類

3?? 計算方法

  • 基于統計學的檢測方法
  • 基于偏差的檢測方法
  • 基于距離的檢測方法

基于統計學的聚類檢查方法

  • 假設數據集有一個分布(例如正態分布),然后使用不一致性檢驗找到異常值

缺點

  • 大多數測試只能對單個屬性進行
  • 很多時候,數據的分布并不會給出
  • 需要輸入參數

基于距離的異常值檢測方法

  • 這個方法不需要統計假設和分布,克服了傳統統計學方法的不足

  • 基于距離的離群值:如果AAA是數據庫中的一個離群值,那么在數據集TTT中,至少有一部分pppAAA的距離要超過ddd

  • 大致可分為:

    • 基于索引的算法
    • 基于單元的算法

1?? 基于索引的算法

  • 搜索每個物體OOO的半徑為ddd鄰居
  • 基于多維索引結構,如kdkdkd
  • 確定每個鄰接內的最大目標數量
  • 最大開銷O(Kn2)O(Kn^2)O(Kn2)
  • 缺點:
    • 樹的構建是計算密集型的

2?? 基于單元的算法

  • 單元分區

    • 將數據空間分成邊長是d/2k1/2d/2k^{1/2}d/2k1/2的單元

    • 每個單元有兩層

      • 第一層只有一個單元厚度
      • 第二層則是2k1/2?12k^{1/2}-12k1/2?1單元厚度

  • 異常檢測

    • 如果第一層計數為>M,則此單元中無異常值
    • 如果第二層計數<=M,則所有對象都是異常值
    • 否則,檢查單元格中的每個對象

基于偏差的方法

  • 通過檢測每個組中的主要特征來識別異常
  • “偏離”此描述的對象被認為是異常值

九、總結

  • 聚類分析根據對象的相似性對對象進行分組,具有廣泛的應用

  • 可以對各種類型的數據計算相似性度量

  • 聚類算法可以分為分區方法、層次方法、基于密度的方法和基于網格的方法

  • 異常點檢測和分析對于欺詐檢測等非常有用,可以通過統計、基于距離或基于偏差的方法進行

總結

以上是生活随笔為你收集整理的【数据挖掘】聚类分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。