1. 程式人生 > >【機器學習】常用聚類演算法原型

【機器學習】常用聚類演算法原型

1. 聚類簡介

在機器學習中,分為監督學習、無監督學習和半監督學習。前一篇部落格中提到的迴歸和分類都屬於監督學習,本文著重探討無監督學習中的聚類演算法。
博主之前看過一些資料,這兩天也翻閱了網上的各大部落格後,也想總結一下,寫一寫聚類相關的知識點,對自己所看的知識也算是總結,以後回想也有翻的資料。
聚類演算法是資料在沒有標籤的情況下,但是還是認為資料具有各自族群,不屬於同一類,對這些資料進行聚類後,可以總結髮現各個類的特點,有助於更深刻理解資料,判斷資料的來源;分類演算法是有所有資料的標籤,然後讓機器來學習這些資料中潛在的規律,把這個規律記住,當有新資料來了的時候,可以自動判斷該資料屬於哪一類。
翻閱了網上各大部落格後,好多部落格都會說的很全面,例如下圖中,涵蓋聚類演算法的各種方法。
這裡寫圖片描述


個人認為k均值聚類、層次聚類、密度聚類基本可以解決大部分資料聚類問題,這三個也是比較容易理解的方法,下面就對這三個方法進行介紹。

2. k均值聚類(k-means)

k-means演算法屬於基於劃分的聚類方法(Partition-based methods),這種聚類方法的中心思想是認為“族內點的距離都足夠近,族間點的距離都是相對較遠的”。k-means演算法首先要確定k值,即最終所聚簇群個數;然後選取k個點作為中心點,計算其他點到k個點的距離,圍繞該聚類方法的中心思想,將所有資料分為k個簇群。對於該方法的各個環節中優化改進的變體演算法包括k-medoids、k-modes、k-medians、kernel k-means等演算法。演算法步驟如下:
(1)從n個向量物件任意選擇k個向量作為初始聚類中心;
(2)計算剩餘每個物件與這k箇中心物件各自的距離;
(3)把這個向量和距離它最近的中心向量物件歸為一個類簇中;
(4)重新計算每個簇的平均值,更新為新的簇中心;
(5)重複(2)、(3)、(4)步驟,直到當前均值向量均未更新。

優點:對於大型資料集也是簡單高效、時間複雜度、空間複雜度低。
缺點:最重要是資料集大時結果容易區域性最優;需要預先設定K值,對最先的K個點選取很敏感;對噪聲和離群值非常敏感;只用於numerical型別資料;不能解決非凸(non-convex)資料。

針對以上缺點目前有一些改進演算法:
k-means對初始值的設定很敏感,所以有了k-means++(極可能選取較遠的點作為初始聚類中心)、intelligent k-means、genetic k-means。
k-means對噪聲和離群值非常敏感,所以有了k-medoids和k-medians。
k-means只用於numerical型別資料,不適用於categorical型別資料,所以k-modes。
k-means不能解決非凸(non-convex)資料,所以有了kernel k-means。
對於演算法的一次次迭代更新,對每一個點都進行計算來說,計算量也不小。針對這個情況,可以參考採用k-d樹來優化,這樣可以只計算關鍵點,一些其他的非關鍵點可以不用計算,k-d樹的詳細講解可以

參考該部落格,用k-d樹來進行聚類優化可參考該部落格

3. 層次聚類(Hierarchical methods)

k-means聚類是將樣本聚成若干類就可,現在討論的層次聚類是將樣本聚成若干類後,每個類群中再分為若干類,依次類推,可以形成一種樹狀的結構,例如下圖。
源資料
這裡寫圖片描述
聚類結果
這裡寫圖片描述
層次聚類主要有兩種形式:合併的層次聚類和分裂的層次聚類。合併的層次聚類是上圖中自頂向下合併,首先把每個物件作為一個簇,然後進行相似簇群合併,直到達到某個終結條件為止;分裂的層次聚類則是上圖中自下向上分裂,首先將所有物件看作是一個簇群,然後進行分裂,直到達到某個終結條件為止。以自下向上為例,演算法流程為:
(1)將每個物件看作一個簇,計算兩兩之間的最小距離;
(2)將距離最小的兩個簇合併為一個簇;
(3)重複計算新簇之間的距離;
(4)重複(2)、(3)直到達到終止條件。
這種聚類合併有3種不同的策略原則:

  • Ward策略:讓所有類簇中的方差最小化;
  • Maximum策略:也叫completed linkage(全連線策略),力求將類簇之間的最大距離最小化;
  • Average linkage策略:力求將類簇之間的平均距離最小化。

優點:可解釋性好;可以產生高質量的類群;可以在k-means設定比較大的k值計算後,進一步進行聚類。
缺點:(1)時間複雜度高,O(m3);貪心演算法的統一缺點,一步錯步步錯。

該聚類演算法因為計算複雜度比較大適用於小數量級,如對中國省會城市聚類。改進的演算法有BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)主要是在資料體量很大的時候使用,而且資料型別是numerical。

4. 密度聚類(DBSCAN)

k-means只能解決形狀規則的聚類,解決不了不規則形狀聚類,但是DBSCAN正好彌補這部分,可以系統解決這個問題。同時DBSCAN也可以用來離群點的識別,其他離群點識別演算法在後面應該會專門寫一篇部落格來介紹。

在介紹演算法步驟之前首先需要搞清楚幾個概念:
Ε鄰域:給定物件半徑為Ε內的區域稱為該物件的Ε鄰域;
核心物件:如果給定物件Ε鄰域內的樣本點數大於等於MinPts,則稱該物件為核心物件;
直接密度可達:對於樣本集合D,如果樣本點q在p的Ε鄰域內,並且p為核心物件,那麼物件q從物件p直接密度可達。
密度可達:對於樣本集合D,給定一串樣本點p1,p2….pn,p= p1,q= pn,假如物件pi從pi-1直接密度可達,那麼物件q從物件p密度可達。
密度相連:存在樣本集合D中的一點o,如果物件o到物件p和物件q都是密度可達的,那麼p和q密度相聯。

演算法步驟流程如下:
(1) 從任一物件點p開始;
(2)尋找併合並核心p物件直接密度可達(eps)的物件;
(3)如果p是一個核心點,則找到了一個聚類,如果p是一個邊界點(即從p沒有密度可達的點)則尋找下一個物件點;
(4)重複(2)、(3),直到所有點都被處理;
(5)最終將樣本點少於MinPts的簇群全部視為噪聲點。

優點:可以對任意形狀的稠密資料集進行聚類;可以在聚類的同時發現異常點,對資料集中的異常點不敏感;聚類結果沒有偏倚,相對的,K-Means之類的聚類演算法初始值對聚類結果有很大影響。
缺點:如果樣本集的密度不均勻、聚類間距差相差很大時,聚類質量較差,這時用DBSCAN聚類一般不適合;如果樣本集較大時,聚類收斂時間較長,此時可以對搜尋最近鄰時建立的KD樹或者球樹進行規模限制來改進;調參相對於傳統的K-Means之類的聚類演算法稍複雜,主要需要對距離閾值ϵ,鄰域樣本數閾值MinPts聯合調參,不同的引數組合對最後的聚類效果有較大影響。

5. 後記

對於聚類還有一些其他的演算法,例如西瓜書中還提到的LVQ、高斯混合聚類。LVQ的應用場景是當有一些好瓜和一些非好瓜的資料混合在一起(知道哪些是好瓜哪些是非好瓜),然後聚成5類,其中好瓜聚成3類,非好瓜聚成2類。博主覺得既然知道標籤了,可以將問題分成好瓜的聚類和非好瓜的聚類,利用之前介紹的聚類演算法,分兩步解決,當然並不是否定這種演算法就不行,只是覺得前面的演算法基本可以解決該問題。高斯混合聚類是假定資料都是由若干高斯模型產生,然後將這些樣本資料找出具體所產生的模型。可以先假定這些樣本資料各自所屬哪一模型,然後轉化為EM演算法進行求解,迴圈多次,直到結果收斂。博主覺得這個計算成本無疑是很大的,在工業生產中應該很少用到的吧。
聚類演算法中都有一步是相似度距離計算,那麼有哪些方法可以用呢?較為常用的是歐式距離,還有內積距離、餘弦距離、曼哈頓距離等都可以用,具體用哪個距離方法,根據自己的實際情況而定。
之前介紹了常用的聚類演算法的步驟,那麼聚類的結果該如何去評判?這又回到了聚類的出發點,聚類的出發點是將相似的樣本放到一個簇群裡,另一種解釋方法就是簇群內部相似度高,簇群間相似度低。那麼圍繞這個點可以對聚類結果進行量化計算,博主之前有一篇部落格進行了詳細介紹【傳送門在這裡】。

相關推薦

機器學習常用演算法原型

1. 聚類簡介 在機器學習中,分為監督學習、無監督學習和半監督學習。前一篇部落格中提到的迴歸和分類都屬於監督學習,本文著重探討無監督學習中的聚類演算法。 博主之前看過一些資料,這兩天也翻閱了網上的各大部落格後,也想總結一下,寫一寫聚類相關的知識點,對

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

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

機器學習Kmeans

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

機器學習層次

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

王小草機器學習筆記--無監督演算法

標籤(空格分隔): 王小草機器學習筆記 1. 聚類的概述 存在大量未標註的資料集,即只有特徵,沒有標籤的資料。 根據這些特徵資料計算樣本點之間的相似性。 根據相似性將資料劃分到多個類別中。 使得,同一個類別內的資料相似度大,類別之間的資料相似度小。

無監督學習DBSCAN演算法原理介紹,以及程式碼實現

前言:無監督學習想快一點複習完,就轉入有監督學習 聚類演算法主要包括哪些演算法?主要包括:K-m

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

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

機器學習資料探勘演算法——關聯規則(一),相關概念,評價指標

綜述:        資料探勘是指以某種方式分析資料來源,從中發現一些潛在的有用的資訊,所以資料探勘又稱作知識發現,而關聯規則挖掘則是資料探勘中的一個很重要的課題,顧名思義,它是從資料背後發現事物之間可能存在的關聯或者聯絡。 關聯規則的目的在於在一個數據集中找出項之間的關

機器學習資料探勘演算法——關聯規則(二),挖掘過程,Aprioir演算法

關聯規則挖掘的原理和過程 從關聯規則(一)的分析中可知,關聯規則挖掘是從事務集合中挖掘出這樣的關聯規則:它的支援度和置信度大於最低閾值(minsup,minconf),這個閾值是由使用者指定的。根據 support=(X,Y).count/T.countsupp

機器學習傳統目標檢測演算法之級聯分類器Cascade

先附上參考文章吧。 文章其實是“P. Viola, M. Jones. Rapid Object Detection using a Boosted Cascade of Simple Features[J].CVPR, 2001”的學習筆記,下面第二個連結是文獻的中英文版

機器學習常用損失函式

損失函式一般用作機器學習的目標函式,訓練引數的目的是使損失最小化。一般的方法是求導得0。先介紹一下經驗風險和結構風險。假設一個樣本的損失函式為 l (

機器學習Bregman迭代演算法以及證明

Bregman系列演算法是近幾年在影象處理和壓縮感知領域異軍突起的演算法,能夠更好地從現有資料中還原真實目標結果。我們可以構造優化模型argminH(u)+J(u)來還原真實目標資料,一般理解為H(u)是我們的目標最小化模型,常用的有H(u)=1/2(Au−Y)

機器學習sklearn19.0演算法——Kmeans演算法

一、關於聚類及相似度、距離的知識點 二、k-means演算法思想與流程 三、sklearn中對於kmeans演算法的引數 四、程式碼示例以及應用的知識點簡介 (1)make_blobs:聚類資料生成器 sklearn.datasets.m

機器學習sklearn19.0演算法——層次(AGNES/DIANA)、密度(DBSCAN/MDCA)、譜

一、層次聚類 BIRCH演算法詳細介紹以及sklearn中的應用如下面部落格連結: http://www.cnblogs.com/pinard/p/6179132.html http://www.cnblogs.com/pinard/p/62

機器學習之層次演算法

        層次聚類(Hierarchical Clustering)是對給定資料集在不同層次進行劃分,形成樹形的聚類結構,直到滿足某種停止條件為止。資料集的劃分可採用自底向上或自頂向下的劃分策略。1、凝聚的層次聚類演算法AGNES        AGNES(AGglom

Mahout機器學習平臺之演算法詳細剖析(含例項分析)

第一部分: 學習Mahout必須要知道的資料查詢技能: 學會查官方幫助文件: 解壓用於安裝檔案(mahout-distribution-0.6.tar.gz),找到如下位置,我將該檔案解壓到win7的G盤mahout資料夾下,路徑如下所示: G:\mahout\mahout

[機器學習]t-SNE演算法實踐指南

Saurabh是一名資料科學家和軟體工程師,熟練分析各種資料集和開發智慧應用程式。他目前正在加州大學伯克利分校攻讀資訊和資料科學碩士學位,熱衷於開發基於資料科學的智慧資源管理系統。 介紹 許多資料科學家經常面對的問題之一:假設有一個包含數百個特徵(變數)的資料集,且對資料所屬的域沒有任何瞭解,需要對該資

機器學習利用蟻群演算法求解旅行商(TSP)問題

如果喜歡這裡的內容,你能夠給我最大的幫助就是轉發,告訴你的朋友,鼓勵他們一起來學習。 If you like the content here, you can give me the greatest help is forwarding, tell you

Spark機器學習之-實時演算法呼叫

Spark MLIB中的Kmenas聚類演算法,資料通過SparkStreaming 實時拉取kafka中的資料,並呼叫已經訓練好的聚類模型;根據讀取的資料實時的進行分類package com.demo.cn.streaming import org.apache.kafk

機器學習GBDT梯度提升演算法調參法總結II

對於GBDT的引數調整,上一篇已經通過例項講明,不過調整引數確實重要,繼續總結一下通用套路。 1、相關引數 GBDT演算法引數主要分為三個類別: 1.Tree-Specific Paramete