無監督機器學習學習筆記——極大似然估計、EM算法、聚類算法(K-means、DSCAN、層次聚類、AP)、降維(PCA、ICA、LDA)

條件概率的拓展

極大似然估計

  • 試驗1:拋硬幣出現2正2反,求正面概率
    • 這裏涉及到貝葉斯學派與頻率學派理論

      • 頻率學派認爲其正面概率可以通過統計得到,也就是說世界是確定的,假設拋N次硬幣有m個正面那麼:
        p(θ)=mN p(\theta)=\frac{m}{N}
      • 而貝葉斯學派則認爲,概率本身也是有先驗分佈的,由於我們對硬幣一無所知,因此假設正面概率爲均勻分佈:

      θU(0,1)p(θ)=1 \begin{aligned} \theta \thicksim U(0, 1)\\ p(\theta)=1 \end{aligned}

    • 設正面概率爲o

    • p(2正2反|o)=o^2 (1-o)^2,可以使得p最大

    • 爲方便求導,對上式取log講累乘轉換成累加: logo2(1o)2\log o^2(1-o)^2

    • 可以解出o=0.5

    • 將這個計算過程稱爲:極大似然估計

  • 概念
    • 首先估計樣本的分佈,假設各個樣本的概率爲p(xiw)p(x_i|w)
    • 算法的目的爲:求合適的w使得L=ilogp(xiw)L=\sum_i \log p(x_i|w) 最大
  • 試驗2:拋硬幣出現了1正3反,求硬幣是正面的概率?
    • 以極大似然估計的角度來看是0.25。

    • 與我們預估有差距,預估就是先驗概率。做試驗之前已經可以估計結果。

    • 如何使用經驗糾正誤差?

    • 貝葉斯理論:先驗概率如何給出。p(p(正))=p(o=0.5)

      p(o13)=p(o)p(13o)p(13)p(o|1正3反)=\frac{p(o)p(1正3反|o)}{p(1正3反)}

      此爲最大後驗概率(相當於在極大似然估計的基礎上添加的正則化項)

    • 經過先驗概率修正後結果爲3/8。

  • 先驗概率可以糾正樣本數量較少的偏差。
  • 假設在試驗2之前,試驗1結果是50正50反。先驗概率較強。
  • 如果試驗2的結果是50正150反。樣本數量較多的時候可以糾正先驗概率的錯誤。
  • 機器學習問題,需要樣本大量的樣本。樣本數量越多所得結果越準確。

EM(Expectation-Maximization)算法

  • 例子:硬幣ABC,先拋A,如果硬幣A是正面則拋B,否則拋C,記錄B或C爲正是是1,反面位0。假設記錄爲0001111011,求硬幣ABC爲正面的概率。
    • 此時爲帶有隱藏變量的極大似然估計問題。
    • 依然用極大似然估計Li=logp(xi)L_i=\log p(x_i),希望LiL_i之和最大。但xix_i受隱藏變量zz約束。
    • 定義下界。LLi=logp(xi)q(zxi)logq(zxi)p(zxi)dzLL_i=\log p(x_i)-\int q(z|x_i)\log\frac{q(z|x_i)}{p(z|x_i)}dz
    • LLi=q(zxi)logp(x,z)q(zxi)dzLL_i=\int q(z|x_i)\log\frac{p(x, z)}{q(z|x_i)}dz
  • 核心想法;
    • (E步)若參數θ\theta已知,則可根據訓練數據推斷出最優隱變量ZZ的值
    • (M步)反之,若ZZ的值已知,則可方便地對參數θ\theta做極大似然估計
    • 設置隨機的初始參數θ0\theta^0,循環E步和M步,直至收斂或完成循環次數
  • 衍生K-means算法

聚類算法

K-means(約束簇)

  • 線性模型

  • 將空間中的點劃分爲n簇。

  • 首先隨機選擇簇的中心

  • 以EM思想來看

    • E步-估計隱藏變量的分佈
      • 估計現有數據點屬於哪一簇。
      • 根據距離簇中心的距離估計屬於哪一簇。
    • M步-使得參數最大化
      • 估計簇中心的位置
      • 根據現有距離結果估計中心位置。
  • 算法展示:在這裏插入圖片描述

  • 適用範圍:各個屬性無關,方差相等的。在二維空間類似球狀分佈

  • 優點:

    • 適合處理大數據集,該算法是相對可伸縮和有效率的 O(nkt), n 是對象的總數,k 是簇的個數,t 是迭代次數 k<<n, t<<n
  • 缺點:

    • 當結果簇緊湊,且簇與簇之間明顯分離時,它的效果較好
    • 該算法經常終止於局部最優解
    • 適用於簇均值有定義的情況,無法處理具有分類屬性的數據
    • 對噪聲和離羣點數據敏感
    • 不適合於發現非凸形狀的簇
    • 用戶必須事先給出要生成的簇的數目k
    • 初始的簇中心的選擇對聚類結果影響很大
  • 改進:

    • K-medoids:
      • k-means 方法對於髒數據很敏感,改進的 k-medoids 方法選取一個對象叫做mediod 來代替 k 均值法中的中心的作用,這樣的一個 medoid就標識了這個類
    • K-means 核函數
    • 高斯混合模型:
      • 多元正態分佈:
        該分佈每一簇不同方向上的方差是不同的,導致在某方向上會有較大或者較小的偏差,如下圖所示。對於下面三簇,肉眼可以明顯的分爲三類(長條狀)。而K-means聚類器根據距離中心點的距離進行距離,無法準確聚類。
        在這裏插入圖片描述
      • 而GMM(Gaussian Mixed Model高斯混合模型)解決了上述問題,每個簇都可以用參數概率分佈數學描述,整個數據就是這些分佈的混合
        在這裏插入圖片描述

DSCAN(非約束簇)

  • DBSCAN屬於典型的基於密度的方法 Density-Based methods
  • 指導思想:只要一個區域中的點的密度大過某個閥值,就把它加到與之相近的聚類中去
  • 根本區別:基於密度的方法不是基於各種各樣的距離的,而是基於密度的。這樣就能克服基於距離的算法只能發現“類圓形”的聚類的缺點。因此也可以解決k-means中無法解決的“多元正態分佈”問題
  • 參數:
    • eps:搜索半徑
    • minsample:搜索圓內的樣本數量的閾值
  • 原理:
    • 隨機取點,當搜索圓內樣本數量大於minsample,稱爲中心點;反之,稱爲邊界點。
    • 具有連通性的中心點被歸爲一類,類別附近的邊界點也會被歸爲該類
  • 代碼實現:
    from sklearn.datasets import make_moons, make_circles, make_blobs
    from sklearn.cluster import DBSCAN
    import numpy as np
    import matplotlib.pyplot as plt
    
    centers = [[0, 1], [-1, -1], [1, -1]]
    X, y = make_blobs(n_samples=1500, random_state=170)
    trs = [[0.60834549, -0.63667341], [-0.40887718, 0.85253229]]
    X = np.dot(X, trs)    
    clt = DBSCAN(eps=0.3, min_samples=5)
    yp = clt.fit_predict(X)
    
    plt.scatter(X[:, 0], X[:, 1], c=yp, edgecolors='k')
    plt.title('類別數量:'+str(len(set(yp))))
    plt.axis("equal")
    plt.show()
    

在這裏插入圖片描述

層次聚類(非約束簇)

  • 層次方法 Hierarchical methods
    • 創建給定數據對象集的層次分解
    • 根據層次分解的形成方式,該方法可以分爲凝聚的(自底向上)或分裂的(自頂向下)
  • 凝聚層次聚類:首先將每個對象作爲其簇,然後合併這些原子簇爲越來越大的簇,直到所有的對象都在一個簇中,或者某個終止條件滿足
  • 分裂層次聚類:首先將所有對象置於一個簇中,然後將它逐漸細分爲越來越小的簇,直到每個對象自成一簇,或者達到某個終止條件
  • 優點:
    • 不需要預先指定聚類的簇數 k,可以對樹狀圖進行修剪獲得需要的聚類數目
    • 聚類結果對應更好的有意義的分類準則(meaningful taxonomies)動物族譜、語系發展史等
    • 對於純粹的層次聚類方法,一旦合併或分裂執行,就不能修正
  • 改進:
    • 爲了彌補合併或分裂的嚴格性,凝聚層次方法的聚類質量可以通過以下方法改進:
      分析每個層次劃分中的對象鏈接,或者首先執行微聚類(把數據劃分爲“微簇”),然後使用其它聚類技術對微簇聚類

AP(非約束簇)

  • 算法

    跟其他聚類算法的不同之處是,AP在開始時,將所有節點都看成潛在的聚類中心,然後通過節點之間的通信,去找出最合適的聚類中心,並將其他節點劃分到這些中心下去,所以我們可以認爲,AP算法所要做的事情就是去發現這些聚類中心。AP的輸入是一個節點間的相似度矩陣,S,其中S(i,j)表示節點i和節點j之間的相似度,也表明了,j作爲i的聚類中心的合適程度,這個相似度的計算可以根據具體應用場景,這裏未免誤導不作相似度的假設。其中S(k,k)表示節點k作爲k的聚類中心的合適程度,可以理解爲,節點k成爲聚類中心合適度,在最開始時,這個值是初始化的時候使用者給定的值,會影響到最後聚類的數量。

  • 算法流程

    • 假設{x1,x2,,xn}\{ {x_1},{x_2}, \cdots ,{x_n}\}數據樣本集,數據間沒有內在結構的假設。令是一個刻畫點之間相似度的矩陣,使得s(i,j)>s(i,k)s(i,j) > s(i,k)當且僅當xix_ixjx_j的相似性程度要大於其與 xkx_k的相似性。

      AP算法進行交替兩個消息傳遞的步驟,以更新兩個矩陣:

      • 吸引信息(responsibility)矩陣R:r(i,k)r(i,k)描述了數據對象k適合作爲數據對象i的聚類中心的程度,表示的是從i到k的消息;
      • 歸屬信息(availability)矩陣A:a(i,k)a(i,k)描述了數據對象i選擇數據對象k作爲其據聚類中心的適合程度,表示從k到i的消息。

      兩個矩陣R ,A中的全部初始化爲0。這個算法通過以下步驟迭代進行:

      首先,吸引信息(responsibility)rt+1(i,k){r_{t + 1}}(i,k)按照

      rt+1(i,k)=s(i,k)maxkk{at(i,k)+s(i,k)} {r_{t + 1}}(i,k) = s(i,k) - \mathop {\max }\limits_{k' \ne k} \{ {a_t}(i,k') + s(i,k')\}

      迭代。

      然後,歸屬信息(availability)at+1(i,k){a_{t + 1}}(i,k)按照

      at+1(i,k)=min(0,rt(k,k)+i{i,k}max{0,rt(i,k)}),ik {a_{t + 1}}(i,k) = \mathop {\min }\limits_{} \left( {0,{r_t}(k,k) + \sum\limits_{i' \notin \{ i,k\} } {\max \{ 0,{r_t}(i',k)\} } } \right),i \ne k

      at+1(k,k)=ikmax{0,rt(i,k)} {a_{t+1}}(k,k) = \sum\limits_{i' \ne k} {\max \{ 0,{r_t}(i',k)\} }

      迭代。

      對以上步驟進行迭代,如果這些決策經過若干次迭代之後保持不變或者算法執行超過設定的迭代次數,又或者一個小區域內的關於樣本點的決策經過數次迭代後保持不變,則算法結束。

      爲了避免振盪,AP算法更新信息時引入了衰減係數λ\lambda。每條信息被設置爲它前次迭代更新值的λ\lambda倍加上本次信息更新值的1λ1-\lambda倍。其中,衰減係數λ\lambda是介於0到1之間的實數。即第t+1次r(i,k)r(i,k)a(i,k)a(i,k)的迭代值:

      rt+1(i,k)(1λ)rt+1(i,k)+λrt(i,k) {r_{t + 1}}(i,k) \leftarrow (1 - \lambda ){r_{t + 1}}(i,k) + \lambda {r_t}(i,k)
      at+1(i,k)(1λ)at+1(i,k)+λat(i,k) {a_{t + 1}}(i,k) \leftarrow (1 - \lambda ){a_{t + 1}}(i,k) + \lambda {a_t}(i,k)

      參考資料:https://en.wikipedia.org/wiki/Affinity_propagation

總結

聚類算法具有多解性,效果評估需要結合真實情況,進行測試。

對於二維數據聚類算法結果對比:
在這裏插入圖片描述

總結:在上圖多種算法,可以很明顯的看出DSCAN算法準確率和時間代價的效果都非常的好,而其他算法都在一些特殊的情況表現的比較好,對於真實情況時,應過做一些測試對比效果。

矩陣降維

  • 屬於無監督機器學習算法

稀疏自編碼器

  • 最簡單的、最容易理解的降維算法
    • 線性稀疏自編碼器
    • 以手寫數字識別爲例
      • 輸入矩陣形式:X[N, 784]
      • 乘以降維矩陣:H=XW ->W[784, 64]
      • 想讓H保留X的信息
      • 乘以升維矩陣:Y=HW ->W[64, 784]
      • 定義損失函數 L=(Y-X)^2
      • 將X->H 稱爲編碼過程(到此使用的是數據壓縮功能)
      • 將H->X’稱爲解碼過程(可能爲了去噪)
      • 模型稱爲編碼-解碼模型,解碼後爲原始輸入:自編碼器、稀疏自編碼器。
        • 線性稀疏自編碼器:
          • 線性:XW
          • 稀疏:H(64)<X(784)
          • 編碼器:編碼解碼模型
      • 自編碼器本身就可以認爲特徵工程。
        • 降低維度
        • 提取特徵
      • 數據可用不可見

PCA算法

  • 類似於PCA這樣的無監督方法,提取的特徵不會太差、但也不會太好,它最大的作用,是總結出一些關於X的較高層次的抽象知識、爲之後的有監督訓練提供一個比原始特徵空間更好的起點。實際上,無監督最具優勢之處,就在於它的通用性:不管y是什麼,只要有X就行,之後可以在各種各樣的y上進一步訓練。有證據顯示,人類在嬰兒時期也是先有一個無監督學習階段,然後纔是各種有監督學習。
  • 基礎模型:線性模型;線性降維算法
  • 將數據不同屬性的線性相關性減弱
  • KernelPCA:
    • KernelPCA與SVM的kernel類似,均是對數據做非線性變換之後再進行常規的PCA,因此可以對一些非線性問題進行降維.

ICA算法

  • 基礎模型:線性模型;線性降維算法
  • 獨立成分分析
  • 盲源分析
  • 通常用在工程科學中
  • 線性變換後,不同屬性的分佈儘可能不同。
  • 相比於PCA約束弱

字典學習

  • 基礎模型:線性模型;線性降維算
  • 約束:讓變換後的矩陣儘可能的稀疏。
  • 三種降維大同小異,均是線性模型。所能達到的上限是線性模型。

線性判別分析(LDA)(與下文LDA有區別,但不常用)

  • 線性模型;線性降維;有監督;
  • 有監督的數據降維方法。

LDA(隱狄利克雷分配模型)

  • 用於文本的降維模型:以線性模型爲主。
  • 基礎模型:線性模型,從概率角度構建模型
  • 用於文本降維。
  • 如何去看待一段文本:
    • 常用詞語可能有幾萬個。
    • 但是這些文本可能屬於不同主題。體育主題、實事類主題,汽車類主題。主題就是不同詞的頻率。不同主題詞的頻率是不同的。
    • 如何生成一段文本:現在 國家 還是 在 大力發展 純電動
    • 第一步根據文章主題的概率選擇主題:(實事),(體育),(汽車),(汽車),(體育),(汽車)
    • 第二步根據主題選擇對應的詞:現在(實事) 國家(體育) 還是 在 大力發展 純電動(汽車)
    • 求解每篇文章不同主題的概率就是文本降維的過程。
  • 寫成矩陣形式
    • 首先需要進行文本向量化,形成稀疏矩陣X。
    • X[N, 20000] = T[N, 36] W[36, 20000]
  • 模型應用過程
    • 首先讀取文本數據
    • 對於中文數據需要文本分詞
      • jieba.cut
    • 對分詞後的文本進行向量化,得到稀疏向量
      • CountVect
      • TfidfVect
    • 使用LDA算法進行降維。得到向量v。
      • LDA
    • 使用向量v進行文本分類、進行文本聚類。
      • 到此流程自行嘗試
        向量化,形成稀疏矩陣X。
    • X[N, 20000] = T[N, 36] W[36, 20000]
  • 模型應用過程
    • 首先讀取文本數據
    • 對於中文數據需要文本分詞
      • jieba.cut
    • 對分詞後的文本進行向量化,得到稀疏向量
      • CountVect
      • TfidfVect
    • 使用LDA算法進行降維。得到向量v。
      • LDA
    • 使用向量v進行文本分類、進行文本聚類。
      • 到此流程自行嘗試

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