0

雷鋒網按:本文作者黎榮恒,原文載于作者個人博客,雷鋒網已獲授權。
分類作為一種監督學習方法,要求必須事先明確知道各個類別的信息,并且斷言所有待分類項都有一個類別與之對應。但是很多時候上述條件得不到滿足,尤其是在處理海量數據的時候,如果通過預處理使得數據滿足分類算法的要求,則代價非常大,這時候可以考慮使用聚類算法。
聚類屬于無監督學習,相比于分類,聚類不依賴預定義的類和類標號的訓練實例。本文首先介紹聚類的基礎——距離與相異度,然后介紹一種常見的聚類算法——k-means算法,并利用k-means算法分析NBA近四年球隊實力。因為本人比較喜歡觀看NBA比賽,所以用這個當做例子了,通過這個例子大家可以用到各種實際的生活和生產環境中。
在正式討論聚類前,我們要先弄清楚一個問題:如何定量計算兩個可比較元素間的相異度。
用通俗的話說,相異度就是兩個東西差別有多大,例如人類與章魚的相異度明顯大于人類與黑猩猩的相異度,這是能我們直觀感受到的。但是,計算機沒有這種直觀感受能力,我們必須對相異度在數學上進行定量定義。設

其中X,Y是兩個元素項,各自具有n個可度量特征屬性,那么X和Y的相異度定義為:

其中R為實數域。也就是說相異度是兩個元素對實數域的一個映射,所映射的實數定量表示兩個元素的相異度。下面介紹不同類型變量相異度計算方法:
標量也就是無方向意義的數字,也叫標度變量。現在先考慮元素的所有特征屬性都是標量的情況。例如,計算X={2,1,102}和Y={1,3,2}的相異度。一種很自然的想法是用兩者的歐幾里得距離來作為相異度,歐幾里得距離的定義如下:

其意義就是兩個元素在歐氏空間中的集合距離,因為其直觀易懂且可解釋性強,被廣泛用于標識兩個標量元素的相異度。將上面兩個示例數據代入公式,可得兩者的歐氏距離為:

除歐氏距離外,常用作度量標量相異度的還有曼哈頓距離和閔可夫斯基距離,兩者定義如下:
曼哈頓距離:

閔可夫斯基距離:

歐氏距離和曼哈頓距離可以看做是閔可夫斯基距離在p=2和p=1下的特例。另外這三種距離都可以加權,這個很容易理解,不再贅述。
下面要說一下標量的規格化問題。上面這樣計算相異度的方式有一點問題,就是取值范圍大的屬性對距離的影響高于取值范圍小的屬性。例如上述例子中第三個屬性的取值跨度遠大于前兩個,這樣不利于真實反映真實的相異度,為了解決這個問題,一般要對屬性值進行規格化。所謂規格化就是將各個屬性值按比例映射到相同的取值區間,這樣是為了平衡各個屬性對距離的影響。通常將各個屬性均映射到[0,1]區間,映射公式為:

其中max(ai)和min(ai)表示所有元素項中第i個屬性的最大值和最小值。例如,將示例中的元素規格化到[0,1]區間后,就變成了X’={1,0,1},Y’={0,1,0},重新計算歐氏距離約為1.732。
所謂二元變量是只能取0和1兩種值變量,有點類似布爾值,通常用來標識是或不是這種二值屬性。對于二元變量,上一節提到的距離不能很好標識其相異度,我們需要一種更適合的標識。一種常用的方法是用元素相同序位同值屬性的比例來標識其相異度。
設有X={1,0,0,0,1,0,1,1},Y={0,0,0,1,1,1,1,1},可以看到,兩個元素第2、3、5、7和8個屬性取值相同,而第1、4和6個取值不同,那么相異度可以標識為3/8=0.375。一般的,對于二元變量,相異度可用“取值不同的同位屬性數/單個元素的屬性位數”標識。
上面所說的相異度應該叫做對稱二元相異度。現實中還有一種情況,就是我們只關心兩者都取1的情況,而認為兩者都取0的屬性并不意味著兩者更相似。例如在根據病情對病人聚類時,如果兩個人都患有肺癌,我們認為兩個人增強了相似度,但如果兩個人都沒患肺癌,并不覺得這加強了兩人的相似性,在這種情況下,改用“取值不同的同位屬性數/(單個元素的屬性位數-同取0的位數)”來標識相異度,這叫做非對稱二元相異度。如果用1減去非對稱二元相異度,則得到非對稱二元相似度,也叫Jaccard系數,是一個非常重要的概念。
分類變量是二元變量的推廣,類似于程序中的枚舉變量,但各個值沒有數字或序數意義,如顏色、民族等等,對于分類變量,用“取值不同的同位屬性數/單個元素的全部屬性數”來標識其相異度。
序數變量是具有序數意義的分類變量,通常可以按照一定順序意義排列,如冠軍、亞軍和季軍。對于序數變量,一般為每個值分配一個數,叫做這個值的秩,然后以秩代替原值當做標量屬性計算相異度。
對于向量,由于它不僅有大小而且有方向,所以閔可夫斯基距離不是度量其相異度的好辦法,一種流行的做法是用兩個向量的余弦度量,其度量公式為:

其中||X||表示X的歐幾里得范數。要注意,余弦度量度量的不是兩者的相異度,而是相似度!
討論完相異度,我們可以正式定義聚類問題,所謂聚類問題,就是給定一個元素集合D,其中每個元素具有n個可觀察屬性,使用某種算法將D劃分成k個子集,要求每個子集內部的元素之間相異度盡可能低,而不同子集的元素相異度盡可能高。其中每個子集叫做一個簇。與分類不同,分類是示例式學習,要求分類前明確各個類別,并斷言每個元素映射到一個類別,而聚類是觀察式學習,在聚類前可以不知道類別甚至不給定類別數量,是無監督學習的一種。目前聚類廣泛應用于統計學、生物學、數據庫技術和市場營銷等領域,相應的算法也非常的多。本文僅介紹一種最簡單的聚類算法——k均值(k-means)算法。

我們先弄清楚 k-means 的計算過程:
1. 從集合 D 中隨機選取 k 個元素,作為 k 個簇的各自的中心;
2. 分別計算剩下的元素到 k 個簇中心的相異度,將這些元素分別劃歸到相異度最低的簇;
3. 根據聚類結果,重新計算 k 個簇各自的中心,計算方法是取簇中所有的元素各自維度的算術平均數;
4. 將 D 中全部元素按照新的中心重新聚類;
5. 重復第 4 步,直到聚類結果不再變化;
6. 將結果輸出。
下面列表是 NBA 近四年的常規賽和季后賽戰績(因為16/17季后賽還沒打完,所以該數據暫不收錄):

下面對數據進行 [0,1] 規范化,下面是規范化后的數據:

接著用 k-means 算法進行聚類,設k = 5,即將30支球隊分成5個集團。現抽取勇士、快船、掘金、國王、76人的值作為五個簇的種子,即初始化五個簇的中心為:A{0.18,0.00,0.00,0.00,0.81,0.00,0.06},B{0.08,0.16,0.27,0.24,0.62,0.56,0.88},C{0.42,0.55,0.55,0.40,1.00,1.00,1.00},D{0.55,0.57,0.55,0.52,1.00,1.00,1.00},E{0.69,0.73,0.86,0.58,1.00,1.00,1.00},下面分別計算所有球隊分別對五個中心點的相異度,這里以歐幾里得距離作為相異度,以下為我求得的結果:

從聚類得到結果可以看出,近四年實力最強的球隊為騎士和勇士隊,或者很多球迷會有其他的意見,但至少從數據層面來講,騎士和勇士隊是近四年實力最強的球隊,為第一集團;接下來的球隊基本上為每年必進季后賽的球隊,包括馬刺、雷霆、快船、公牛等球隊,為第二集團;第三集團則凱爾特人、黃蜂、小牛等著偶爾進入季后賽的球隊;接下來就是基本無緣季后賽和每年基本墊底的第四集團和第五集團了。
本文只是講述關于聚類小案例的應用,其實聚類有著非常廣泛的應用,包括圖像分割,生物種群分類,其實早期移動公司也是根據聚類推出適合不同人群使用的電話卡(動感地帶、全球通、神州行等)。
本例源碼地址:
http://download.csdn.net/detail/u013043346/9833529
參考文章:
http://www.cnblogs.com/leoo2sk/archive/2010/09/20/k-means.html
從初級到高級,理論 + 實戰,一站式深度了解 TensorFlow!
本課程面向深度學習開發者,講授如何利用 TensorFlow 解決圖像識別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎實戰技巧開始,一步步教授學員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,并最終掌握一整套基于 TensorFlow 做深度學習開發的專業技能。
兩名授課老師佟達、白發川身為 ThoughtWorks 的資深技術專家,具有豐富的大數據平臺搭建、深度學習系統開發項目經驗。
時間:每周二、四晚 20:00-21:00
開課時長:總學時 20 小時,分 10 周完成,每周 2 次,每次 1 小時
線上授課地址:http://www.mooc.ai/
雷鋒網(公眾號:雷鋒網)相關閱讀:
雷峰網版權文章,未經授權禁止轉載。詳情見轉載須知。