聚類簡介:
今天我們說聚類。說「機器學習」不說的「聚類」那還算是「機器學習」嗎?
首先,我們回到混合高斯模型的那副圖:
在n=3的高斯模型的擬合下,而三個不同模型會各自代表三個不同資料簇(cluster)。將資料點劃分若干個簇的過程叫聚類。
在這裡,我們可以挖掘出幾個隱藏資訊
1. 聚類的目的其實是為了劃分資料集分類。劃分資料集結果必然導致分類。所以我們直接說「聚類的目的是為了分類」這個道理也正確。
2. 聚類一般會要求資料集裡面有很多資料。否則不清晰。
3. 聚類準確率的高低看資料集,也很有可能演算法失敗。聚類之前最好用視覺化方法看看資料集是什麼樣的。
4. 聚類演算法好理解,但是聚幾類合適是很難知道的,這個是難點。
k-means的演算法講解已經爛大街了。(其實比k-means更爛大街的是knn),演算法很簡單:
k-means就是找k個點當聚類中心;
根據聚類中心算每個點屬於的類,以此算出新聚類中心;
根據新聚類中心算每個點屬於的類,以此算出新新聚類中心;
根據新新聚類中心算每個點屬於的類,以此算出新新新聚類中心;
。。。。。算吐為止。
他的缺點很明顯:結果好壞依賴於對初始聚類中心的選擇、容易陷入區域性最優解、對k值的選擇沒有準則可依循、對異常資料較為敏感、只能處理數值屬性的資料、聚類結構可能不平衡。
別看這麼簡單粗暴,k-means有時準確性很高。實際應用上,針對資料集特性,它還有很多變種改進。
首先高斯混合模型
每個高斯模型其實相當於聚類中的乙個類別。
這個模型可以算出資料集中乙個點x,在多高斯混合模型中的各個高斯模型的比重。也就是x針對於第乙個高斯模型的隸屬度多少,第二個隸屬度多少,第三個隸屬度多少。。。都可以表示。
凝聚型層次聚類的策略是先將每個物件作為乙個簇,然後合併這些相似性很大的原子簇為越來越大的簇,直到所有物件都在乙個簇中,或者某個終結條件被滿足。
這麼說來,這個演算法符合簡單的物以類聚的特性。這個演算法的前提是需定義相似性。如果把距離越近視為相似性越高。則下面是 給予最小距離的層次聚類
將每個物件看作一類,計算兩兩之間的最小距離;
將距離最小的兩個類合併成乙個新類;
重新計算新類與所有類之間的距離;
將距離最小的兩個類合併成乙個新類;
重新計算新類與所有類之間的距離;
將距離最小的兩個類合併成乙個新類;
重新計算新類與所有類之間的距離;
。。。。。。。你認為差不多演算法就停了吧。不然最後全聚一類了。
這個演算法,什麼資料集都能用。而且不像knn,gmm一樣需要提前設定聚多少類(設定k值)。但說實話,太通用的往往不是很好。
fcm演算法是一種以隸屬度來確定每個資料點屬於某個聚類程度的演算法。演算法的核心就是隸屬度矩陣的建立與收斂。這還是個隸屬度思想。
不過我更認為這個演算法適合層次聚類後進行。這樣可以減少運算。相當於聚類精度提高演算法。
dbscan是一種典型密度聚類演算法。該演算法的目的在於過濾低密度區域,發現稠密度樣本點,跟傳統的基於層次聚類和劃分聚類的凸形聚類簇不同,該演算法可以發現任意形狀的聚類簇,同時也不必輸入你要劃分的聚類個數。
輸入: 包含n個物件的資料庫,半徑e,最少數目minpts;
輸出:所有生成的簇,達到密度要求。
(1)repeat
(2)從資料庫中抽出乙個未處理的點;
(3)if抽出的點是核心點 then 找出所有從該點密度可達的物件,形成乙個簇;
(4)else 抽出的點是邊緣點(非核心物件),跳出本次迴圈,尋找下乙個點;
(5)until 所有的點都被處理。
dbscan對使用者定義的引數很敏感,細微的不同都可能導致差別很大的結果,而引數的選擇無規律可循,只能靠經驗確定。
其聚類過程很像水結冰實驗,非連線圖的遍歷。慢慢地長成乙個類。
自我感覺這個東西非常不好。因為如果慢慢長成,對於離群點非常不友好。如果資料過多還有可能產生只聚乙個類的狀況。
1.聚類簇數k的判定
如果認為k=1即聚成一類。實際就是不聚類。此時計算各個點到中心聚類點和;然後計算k=2,各個點到中心聚類點的距離和;然後計算k=3,各個點到中心聚類點的距離和;。。。。
當計算k=n時,即總共n個點聚n類為止,此時各個點到中心聚類點的距離和為0。
這樣的簇數k與中心點距離和,就乙個遞減函式,我們從中找到拐點,肘點就可
2.測量聚類的質量
對於n個向量的樣本空間,假定被分了k個簇。下面是乙個衡量聚類質量的內在方法-輪廓係數。
1.對於任意乙個向量v來說,可以求得乙個v到本類簇中其他各點距離的平均值a(v);
2.求這個向量v到其他所有各個簇的最小距離,求這些距離平均值。得b(v);
3.輪廓係數為下面的公式。輪廓係數在-1,1之間。a(v)表示緊湊型,b(v)表示分離型。如果接近1,a(v)比較小,b(v)比較大,說明緊湊。
s(
v)=b
(v)−
a(v)
max[
a(v)
,b(v
)]
第六課 字型
a.字型系列 font family times new roman times,serif b.字型樣式 font style normal 正常 正常顯示文字 font style italic 斜體 以斜體字顯示的文字 font style oblique 傾斜的文字 文字向一邊傾斜 和斜體非...
第六課 列表
序列是python中最基本的 種資料結構。序列 於儲存 組有序的資料,所有的資料在序列當中都有 個唯 的位置 索引 並且序列中的資料會按照新增的順序來分配索引。資料結構指計算機中資料儲存的 式。python 基礎教程 第二版 對序列的定義為 資料結構。資料結構是通過某種方式 例如對元素進行編號 組織...
機器學習第六課 SVM(1)
1 在前幾個課程學習過程中沒有發現,後來才突然想到的乙個問題是 為什麼logistic 回歸依然算是線性分類器呢?在logistic回歸中,h x g theta x 而這個g z 1 1 exp z 在我的理解中它不應該屬於線性分類器了吧。解釋 我們判斷乙個新的輸入樣本屬於哪一類的時候,是依據 h...