1. 程式人生 > >機器學習筆記(九)聚類

機器學習筆記(九)聚類

9.聚類

有必要回顧下前文所涉及的機器學習主流分類,有監督學習中根據預測結果離散和連續屬性分為分類和迴歸兩大類,常見的演算法有:線性模型、決策樹、神經網路、支援向量機、貝葉斯分類器以及整合學習。

本文開始說無監督學習(unsupervised learning),訓練樣本的標記資訊是未知的,目標是通過對無標記訓練樣本的學習來揭示資料的內在性質及規律,為進一步的資料分析提供基礎。聚類(clustering)是無監督學習任務中研究最多、應用最廣泛的演算法。

9.1聚類任務

聚類將資料集中的樣本劃分為若干個通常是不相交的子集,每個子集稱為一個簇(cluster),每個簇對應一個潛在概念或類別。當然這些類別在執行聚類演算法之前是未知的,聚類過程是自動形成簇結構,簇所對應的概念語義由使用者命名。

形式化地說,假定樣本集D={x1,x2,…,xm}包含m個無標記樣本,每個樣本xi={xi1; xi2;…;xin}是一個n維特徵向量(屬性),則聚類演算法將樣本集D劃分為k個不相交的簇{Cl|l=1,2,…,k},其中Cll≠l’Cl’=∅且D=Ul=1…kCl。相應地,用Rj∈{1,2,…,k}表示樣本xj的簇標記(cluster label),即xj∈CRj。聚類的結果可用包含m個元素的簇標記向量R=(R1;R2;…;Rm)表示。

聚類既能作為一個單獨過程,用於尋找資料內在的分佈結構,也可作為分類等其他學習任務的前驅過程。如在一些商業應用中需對新使用者的型別進行判別,但定義使用者型別對商家來說可能不太容易,此時可先對使用者進行聚類,根據聚類結果將每個簇定義為一個類,然後再基於這些類訓練分類模型,用於判別新使用者的型別。

基於不同的學習策略,可設計出多種型別的聚類演算法。眾多演算法的評估,就先要談兩個基本問題,效能度量和距離計算。

9.2效能度量

聚類效能度量也稱聚類有效性指標(validity index)。與監督學習中的效能度量作用相似。對聚類結果,要通過某種效能度量來評估其好壞。如明確最終要使用的效能度量,可直接將其作為聚類過程的優化目標,從而更好地得到符合要求的聚類結果,即事後度量也可作為事中追求的目標。

聚類將樣本集D劃分為若干互不相交的子集,即樣本簇。怎麼樣的聚類結果比較好呢?物以類聚,即同一簇的樣本儘可能彼此相似,不同簇的樣本儘可能不同。簡單來說,就是簇內相似度(intra-cluster similarity)高且簇間相似度(inter-clustersimilarity)低。

聚類效能度量大致有兩類,一類是將聚類結果與某個參考模型(reference model)進行比較,稱為外部指標(externel index);另一類是直接考察聚類結果而不利用任何參考模型,稱為內部指標(internal index)。

對資料集D={x1,x2,…,xm},假定通過聚類給出的簇劃分C={C1,C2,…,Ck},參考模型給出的簇劃分為CR={CR1,CR2,…,CRk}。相應地,令F和FR表示與C和CR對應的簇標記向量。將樣本兩兩配對考慮,定義:

a=|SS|,SS={(xi,xj)|Fi=Fj,FRi=FRj,i<j}

b=|SD|,SD={(xi,xj)|Fi=Fj,FRi≠FRj,i<j}

c=|DS|,SD={(xi,xj)|Fi≠Fj,FRi=FRj,i<j}

d=|DD|,SD={(xi,xj)|Fi≠Fj,FRi≠FRj,i<j}

其中集合SS包含了在C中隸屬於相同簇且在CR中也隸屬於相同簇的樣本對,集合SD 包含了在C隸屬於相同簇但在CR中隸屬於不同簇的樣本對,……由於每個樣本對( xi,xj)(i<j)僅能出現在一個集合中,因此有a+b+c+d=m(m-1)/2成立。基於上述形式化,可定義如下常用的聚類效能度量外部指標:


9.3距離計算

上文定義的效能度量指標,有non 個很重要的數學關係,就是樣本間的距離dist,實際上抽象出來,任何物體的相似度都是通過距離來判斷,至於怎麼定義距離就不同而論。函式dist()是一個距離度量(distance measure),滿足如下基本性質:

1)非負性:dist(xi,xj)≥0;

2)同一性:dist(xi,xj)=0當且僅當xi=xj

3)對稱性:dist(xi,xj)=dist(xj,xi);

4)直遞性:dist(xi,xj)≤dist(xi,xk)+ dist(xk,xj);

給定樣本xi={xi1;xi2;…; xin}與xj={xj1;xj2;…; xjn},最常用的是閔可夫斯基距離(Minkowskidistance):


屬性通常劃分為連續屬性(continuous attribute)和離散屬性(categoricalattribute),連續屬性在定義域上有無窮多個可能的取值;後者在定義域上是有限個取值。連續屬性亦稱數值屬性(numerical attribute);離散屬性也稱為列名屬性(nominalattribute)。在討論距離計算時,屬性上是否定義了序的關係很重要。如定義域為{1,2,3}的離散屬性與連續屬性的性質更接近,能直接在屬性值上計算距離,這樣的屬性稱為有序屬性(ordinal attribute);而定義域為{飛機,火車,輪船}這樣的離散屬性則不能直接在屬性上計算距離,稱為無序屬性(non-ordinalattribute)。顯然閔可夫斯基距離用於有序屬性,那麼無序屬性怎麼計算距離呢?實際上,有序屬性和無序屬性在資料探勘上更多屬性。離散屬性的有序化很重要,對於機器學習來說,刻畫和訓練都基於向量,無序無數自然不行。


通常基於有種形式的距離定義相似度度量(similarity measure),距離越大,相似度越小。然而,用於相似度度量的距離未必一定要滿足距離度量的所有基本性質,尤其是直遞性。不滿足直遞性的距離稱為非度量距離(non-metric distance),文中以人馬為例來說明。本文所說的距離公式都是事先定義好的,在現實任務中,應該結合資料樣本和聚類潛在結果來確定合適的距離計算公式,可通過距離度量學習(distance metric learning)來實現。

有了效能度量和距離計算,下文來說明典型的聚類演算法。

9.4原型聚類

原型聚類,也稱基於原型的聚類(prototype-based clustering),該類演算法假設聚類結構能夠通過一組原型刻畫,在現實聚類任務中較為常用。一般情形下,演算法先對原型進行初始化,然後對原型進行迭代更新求解。採用不同的原型表示、不同的求解方式,將產生不同的演算法。



文中的西瓜集例子配合起來可以更好理解演算法過程。演算法核心是對當前簇劃分及均值向量迭代更新。

2)學習向量量化

與k均值演算法類似,學習向量量化(learning vector quantization,簡稱LVQ)也是試圖找到一組原型向量來刻畫聚類結構,但與一般聚類演算法不同的是,LVG假設資料樣本帶有類別標記,學習過程利用樣本的這些監督資訊來輔助聚類。

給定樣本集D={(x1,y1),(x2,y2),…,(xm,ym)};每個樣本xj是由n個屬性描述的特徵向量(xj1; xj1;…; xjn),yj∈Y是樣本xj的類別標記。LVQ的目標是學得一組n維原型向量{p1,p2,…,pq},每個原型向量代表一個聚類簇,簇標記ti∈Y。LVQ演算法過程如下:


演算法在對原型向量進行迭代優化,每一輪迭代中,演算法隨機選取一個有標記訓練樣本,找出與其距離最近的原型向量,並根據兩者的判別標記是否一致來對原型向量進行相應的更新。若演算法的停止條件已滿足(如已達到最大迭代輪數,或原型向量更新很小甚至不再更新),則將當前原型向量作為最終結果返回。


上面這兩個類似的演算法,Kmean和LVG主要還是看樣本,如果帶有標記,LVG是可以採用的。文中的例子可以配合理解。

3)高斯混合聚類

與K均值、LVQ用原型向量來刻畫聚類結構不同,高斯混合(Mixture-of-Gaussian)聚類採用概率模型來表達聚類原型。




高斯混合聚類演算法流程如下:


對於高斯混合聚類,要理解概率密度和高斯分佈才能更好理解基於概率模型的原型聚類。

9.5密度聚類

密度聚類,也稱為基於密度的聚類(density-based clustering),該類演算法假設聚類結構能通過樣本分佈的緊密程度確定。一般情形下,密度聚類演算法從樣本密度的角度來考察樣本之間的可連線性,並基於可連線樣本不斷擴充套件聚類簇以獲得最終的聚類結果。



演算法先給給定的領域引數( )找出所有核心物件,接著以任一核心物件為出發點,找出由其密度可達的樣本生成聚類簇,直到所有核心物件均被訪問過為止。文中西瓜集例子可以輔助理解,最好是能就文中的西瓜集例子子集程式設計實現,實在時間有限,這些演算法只能留待實際使用中再程式碼實現。

9.6層次聚類

層次聚類(hierarchicalclustering)試圖在不同層次對資料集進行劃分,從而形成樹形的聚類結構。資料的劃分可採用自底向上的聚合策略,也可採用自頂向下的分拆策略。

AGNES(AGglomera-tiveNEString)是一種採用自底向上聚類策略的層次聚類演算法。它先將資料集中的每個樣本看做一個初始聚類簇,然後在演算法執行的每一步中找出距離最近的兩個聚類簇進行合併,該過程不斷重複,直至達到預設的聚類簇個數。這裡的關鍵是如何計算聚類簇之間的距離。每個簇是一個樣本集合,因此採用關於集合的某種距離即可。給定聚類簇Ci和Cj,可通過下面的公式來計算距離:



演算法先對僅含一個樣本的初始聚類簇和相應的距離矩陣進行初始化,接著不斷合併距離最近的聚類簇,並對合並得到的聚類簇的距離矩陣進行更新,不斷重複,直到達到預設的聚類簇數。

現在我們來總結聚類這一章節的脈絡,首先聚類是無監督學習演算法,和前文的監督學習演算法不同在於樣本不帶標記,聚類有自己的效能度量評估指標,分外部指標和內部指標,核心就是距離計算,也就是後續演算法關鍵;其次,就聚類演算法做了三大分類,分別是原型聚類、密度聚類、層次聚類,三類演算法的概要理解就在於原型、密度、層次;其中原型聚類又由基於均值的KMeans、基於原型的LVG、基於概率的高斯混合聚類。說到聚類,不得不說其經典應用場景異常檢測(anormaly detection),其常藉助聚類或距離計算進行,如將遠離所有簇中心的樣本作為異常點,或將密度極低處的樣本作為異常點,最近有研究提出基於隔離性(isolation)可快速檢測出異常點。

相關推薦

機器學習筆記()

9.聚類 有必要回顧下前文所涉及的機器學習主流分類,有監督學習中根據預測結果離散和連續屬性分為分類和迴歸兩大類,常見的演算法有:線性模型、決策樹、神經網路、支援向量機、貝葉斯分類器以及整合學習。 本文開始說無監督學習(unsupervised learning),訓練樣本的

[吳恩達機器學習筆記]13K-means

沒有 rand 幫助 聯系 method ima 運用 重新 function 13.聚類 覺得有用的話,歡迎一起討論相互學習~Follow Me 13.1無監督學習簡介 從監督學習到無監督學習 在一個典型的監督學習中,我們有一個有標簽的訓練集,我們的目標是找到能夠區分正

Stanford機器學習筆記-9. (Clustering)

9. Clustering  Content   9. Clustering     9.1 Supervised Learning and Unsupervised Learning     9.2 K-means algorithm     9.3 Optimization objectiv

機器學習筆記12-

機器學習筆記12-聚類 在“無監督學習”中,訓練樣本的標記資訊是未知的,目標是通過對無標記訓練樣本的學習來揭示資料的內在性質及規律。此類學習任務中研究最多的是聚類。此外,無監督學習還有密度估計、異常檢測等。常見的聚類包括原型聚類、密度聚類、層次聚類等。 原型聚類 此類演算法

基於Spark的機器學習實踐 () - 算法

最大化 images red 系列 手工 pic ref amp itl 0 相關源碼 1 k-平均算法(k-means clustering)概述 1.1 回顧無監督學習 ◆ 分類、回歸都屬於監督學習 ◆ 無監督學習是不需要用戶去指定標簽的 ◆ 而我們看到的分類、回歸算

機器學習中的演算法演變及學習筆記

【說在前面】本人部落格新手一枚,象牙塔的老白,職業場的小白。以下內容僅為個人見解,歡迎批評指正,不喜勿噴![認真看圖][認真看圖] 【補充說明】聚類演算法可以作為獨立方法將資料聚成不同簇,也可以作為資料探勘任務(例如分類、關聯規則等)的預處理! 【補充說明】聚類演算法與分類演算法的主要區別在於訓練時的樣本有無

機器學習】---密度從初識到應用

max 一個 eight log div 指定 聚類 空間 mar 一.前述 密度聚類是一種能降噪的算法。 二.相關概念 先看些抽象的概念(官方定義): 1.:對象O的是與O為中心,為半徑的空間,參數,是用戶指定每個對象的領域半徑值。 2.MinPts(領域密度閥值):對象

Python機器學習——Agglomerative層次

條件 分享圖片 n-2 mov unique ber and 兩個 its 層次聚類(hierarchical clustering)可在不同層次上對數據集進行劃分,形成樹狀的聚類結構。AggregativeClustering是一種常用的層次聚類算法。 ??其原理是:最初

機器學習實戰DBSCN

# !/usr/bin/python # -*- coding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt import sklearn.datasets as ds import matplotlib.colors f

從零開始-Machine Learning學習筆記(26)-

文章目錄 0. 前言 1. 聚類的效能度量和距離計算 1.1 效能度量 1.2 距離計算 2. 原型聚類 2.1 K-means 2.2 學

機器學習-*-K均值及程式碼實現

KMeans聚類 在聚類演算法中,最出名的應該就是k均值聚類(KMeans)了,幾乎所有的資料探勘/機器學習書籍都會介紹它,有些初學者還會將其與KNN等混淆。k均值是一種聚類演算法,屬於無監督學習的一種,而KNN是有監督學習/分類學習的一種。 聚類:顧名思義,就是講某些相似的事物聚在

機器學習之DBSCAN

機器學習之DBSCAN聚類 # -*- coding: utf-8 -*- """ Created on Wed Nov 28 18:50:57 2018 @author: muli """ import numpy as np from sklearn.datas

機器學習之kMeans

機器學習之kMeans聚類 # -*- coding: utf-8 -*- """ Created on Wed Nov 28 16:23:36 2018 @author: muli """ from sklearn.datasets.samples_generat

機器學習——K-均值(K-means)演算法

本文轉載自:https://www.cnblogs.com/ybjourney/p/4714870.html 一 K-均值聚類(K-means)概述 聚類 “類”指的是具有相似性的集合。聚類是指將資料集劃分為若干類,使得類內之間的資料最為相似,各類之間的資料相

機器學習 K-means 演算法 C++

筆記: 尚未解決的問題 :     1. 只支援二維,而不支援三維或更高,需要模板元     2. 尚未實現如何刪除極端點, 即預處理     3. 尚未視覺化 編譯環境 Ubuntu gcc 5.4 編譯選項  g++ -std=c++14 #include &l

機器學習】Kmeans

寫在篇前   Kmeans演算法是一種經典的聚類演算法,屬於無監督學習的範疇。所謂聚類,即指對於給定的一個樣本集,按照樣本之間的距離大小,將樣本集劃分為K個簇,且讓簇內的點儘量緊密的連在一起,而讓簇間的距離儘量的大。 優點: 原理簡單 速度快 對大資料集有比較

機器學習】層次

寫在篇前   層次聚類(hierarchical clustering)是一種通用的聚類演算法之一,它通過自下而上合併或自上而下拆分來構建巢狀聚類。這種簇的層次結構表示為樹(或樹狀圖),樹的根匯聚所有樣本,樹的葉子是各個樣本。本篇部落格會簡述層次聚類的原理,重點

機器學習之層次及程式碼示例

一、層次聚類 層次聚類是無監督學習方法,可對給定的N個待聚類的樣本進行層次的分類,直到某種條件(類的個數、類間的距離超過某個閾值)滿足為止。 1、層次聚類的劃分 對於層次聚類,可具體分為: a. 凝聚的(agglomerative)層次聚類: 採用

機器學習筆記:K近鄰演算法(KNN)

一.基本思想 K近鄰演算法,即是給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最鄰近的K個例項,這K個例項的多數屬於某個類,就把該輸入例項分類到這個類中。如下面的圖: 通俗一點來說,就是找最“鄰近”的夥伴,通過這些夥伴的類別來看自己的類別

機器學習中的

1、聚類無監督通過對無標記訓練樣本的學習來找到這些資料的內在性質,使用最多的就是聚類。聚類思想:將資料劃分為幾個不相交的子集(也就是簇,cluster),每個簇潛在的對應某一個概念。聚類僅僅是生成cluster,但是簇的語義要由使用者自己解釋。聚類的作用:探索性方法,用來分析