機器學習入門---第十一天

無監督學習

1,無監督學習的概念

輸入都是無label的數據,沒有訓練集之說,也就是隻能從一些無label的數據中自己尋找規律

2,無監督學習的兩大任務:“化繁爲簡”(聚類、降維)、“無中生有”

所謂的“化繁爲簡”的意思:我們要找一個function要把所有的樹都變成抽象的樹,但是你所擁有的train data就只有一大堆的image(各種不同的image),你不知道它的output應該是要長什麼樣子。

所謂的“無中生有”的意思:在這個task裏面你要找一個可以畫圖的function,你只有這個function的output,但是你沒有這個function的input。你這隻有一大堆的image,但是你不知道要輸入什麼樣的code纔會得到這些image。

3,聚類Clustering(K-means、HAC)

聚類就是按照某個特定屬性或標準(如距離準則)把一個數據集分割成不同的類或簇,使得同一個簇內的數據對象的相似性儘可能大,同時不在同一個簇中的數據對象的差異性也儘可能地大。即聚類後同一類的數據儘可能聚集到一起,不同數據儘量分離。

分類: 類別是已知的,通過對已知類別的數據進行訓練和學習,找到這些不同類的特徵,再對未分類的數據進行分類。
聚類: 你壓根不知道數據有什麼類別,又會分爲幾類,通過聚類將數據聚合成幾個羣體,那就是聚類了。聚類不需要對數據進行訓練和學習。

1,K-means算法

k-means算法以k爲參數,把n個對象分成k個簇,使簇內具有較高的相似度,而簇間的相似度較低。k-means算法的處理過程如下:首先,從樣本集中隨機選取 k 個樣本,每個樣本初始地代表了一個簇的平均值或中心;對剩餘的每個樣本,計算其與這 k 個“簇中心”的距離, 根據其與各簇中心的距離,將它賦給最近的簇;最後得到一系列新的簇(每個簇包含一個簇中心以及與簇中心距離最近的所有樣本),然後重新計算每個簇的簇中心點。 重新計算各樣本點與新的簇中心的距離,再重新賦給最近的簇,這個過程不斷重複,直到準則函數收斂。通常,採用平方誤差準則,其定義如下:
                                                                      
 這裏E是數據集中所有對象的平方誤差的總和,p是空間中的點,mi是簇Ci的平均值。該目標函數使生成的簇儘可能緊湊獨立,使用的距離度量是歐幾里得距離,當然也可以用其他距離度量。

僞代碼:
function K-Means(輸入數據,中心點個數K)
    獲取輸入數據的維度m和個數n
    隨機生成K個m維的點
    while(算法未收斂)
       #對N個點:計算每個點屬於哪一類。
        for(int i=0;i < n;i++)
           for(int j=0;j < k;j++)
             計算點 i 到類 j 的距離
       #對於K箇中心點:
        for(int i=0;i < k;i++)
            1,找出所有屬於自己這一類的所有數據點
            2,把自己的座標修改爲這些數據點的中心點座標
    end
    輸出結果:
end

 

1 優點

  • 容易理解,聚類效果不錯,雖然是局部最優, 但往往局部最優就夠了;
  • 處理大數據集的時候,該算法可以保證較好的伸縮性;
  • 當簇近似高斯分佈的時候,效果非常不錯;
  • 算法複雜度低。

2 缺點

  • K 值需要人爲設定,不同 K 值得到的結果不一樣;
  • 對初始的簇中心敏感,不同選取方式會得到不同結果;
  • 對異常值敏感;
  • 樣本只能歸爲一類,不適合多分類任務;
  • 不適合太離散的分類、樣本類別不平衡的分類、非凸形狀的分類。

2,層次聚類

凝聚型層次聚類的策略是先將每個對象作爲一個簇,然後合併這些原子簇爲越來越大的簇,直到所有對象都在一個簇中,或者某個終結條件被滿足。

根據層次分解的順序是自底向上的還是自上向下的,層次聚類算法分爲凝聚的層次聚類算法分裂的層次聚類算法

這裏給出採用最小距離的凝聚層次聚類算法流程:
 (1) 將每個對象看作一類,計算兩兩之間的最小距離;
 (2) 將距離最小的兩個類合併成一個新類;
 (3) 重新計算新類與所有類之間的距離;
 (4) 重複(2)、(3),直到所有類最後合併成一類。

HAC跟剛纔K-means最大的差別就是:你如果決定你的cluster的數目,在k-means裏面你要決定K value是多少,有時候你不知道有多少cluster不容易想,你可以換成HAC,好處就是你現在不決定有多少cluster,而是決定你要切在這個 tree structure的哪裏。

4,降維Dimension Reduction(PCA)

在做cluster的時候,我們可能"以偏概全". 所以你應該要用一個vector來表示你的x,那這個vector每一個dimension就代表了某一種特值,那這件事就叫做:distributed representation。

降維意思是說:原本高維的東西,其實是可以用低維去表示它,就是找出數據裏最主要的方面,用數據裏最主要的方面來代替原始數據。

你只需要抓重這個重點(如右圖角度的變化),你就可以知道28維空間中的變化,所以你只需要一維就可以描述這些image

在做dimension reduction的時候,我們要做的事情就是找一個function,這個function的input是一個vector x,output是另外一個vector z。但是因爲是dimension reduction,所以你output這個vector z這個dimension要比input這個x還要小,這樣纔是在做dimension reduction。

如果理想的話(如下圖),我們可以直接拋棄下面的x1這個維度,但實際上我們不能直接拿掉某一個維度,

也就是說我們的數據跟每一個維度都有關係,這就需要主成分分析(PCA)

5,PCA的實現

PCA的實現一般有兩種,一種是用特徵值分解去實現的,一種是用奇異值分解去實現的。

1,特徵值分解

先看我的另一博文-主成分分析和奇異值分解https://blog.csdn.net/king52113141314/article/details/106416896

PCA做的事情就是:這個function是一個很簡單的linear function,這個input x跟這個output z之間的關係就是一個linear transform,你把這個x乘上一個matrix w,你就得到它的output z。現在要做的事情就是:根據一大堆的x(我們現在不知道z長什麼樣子)我們要把w找出來. 那麼我們尋找w的規則就是,令z的方差最大(數據識別度最大).

如果我們看下圖的話,你就會覺得說:如果是選這個方向的話(紅色箭頭),經過projection以後,可能會分佈在這個range(large variance);如果選這個方向的話(橙色箭頭),那麼你的點可以是這個range(small variance)。

下圖中的w1和w2都可以認爲是基座標方向,因此.

部分理論思想參考http://blog.codinglabs.org/articles/pca-tutorial.html

 

我們要求的是最佳的w,使得投影后的樣本點方差最大。在w1方向上的投影的絕對值之和最大(也可以說方差最大),計算投影的方法上面已經闡述,就是將x與w1做內積,由於只需要求w1的方向,所以設w1也是單位向量,

下面的具體推導過程參見https://blog.csdn.net/zhongkelee/article/details/44064401使用最小二乘法來確定各個主軸(主成分)的方向.

參考:

https://www.cnblogs.com/xxlad/p/11319988.html

https://datawhalechina.github.io/leeml-notes/#/chapter24/chapter24

K-Means聚類算法(一):算法思路https://zhuanlan.zhihu.com/p/20432322

最全面的K-means聚類教程https://www.jianshu.com/p/aeade7a520ac

四種聚類方法的比較https://blog.csdn.net/foreverling/article/details/50436052

層次聚類的介紹https://blog.csdn.net/u011955252/article/details/50805198

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