K-Means聚類學習隨筆
「物以類聚,人以群分」,聚類是數據分析中很常見的手段之一,在各行各業中都有廣泛應用啦。在生物中,它可以拿來分析動植物種群歸類、發育或疾病不同階段中發生變化的基因集、癌症的不同亞型等等。。。近期在了解相關內容,在此粗淺地談一下個人對k-means的認識。
首先介紹一下原理及其實現,然後舉一個文獻中的栗子
1. 基本原理
k-means是最為經典的聚類方法之一,它基於距離值,是一種迭代的、無監督(Unsupervised)演算法,主要步驟如下:
1. 選擇k個初始點作為初始聚類中心(可從數據集中隨機選擇)
2. 重複以下步驟,直至達到收斂(聚類中心坐標不再變化)
(1)分別計算數據集中每個樣本點到k個初始中心的距離,距離哪個中心點最近就歸為哪一類
(2)更新聚類中心點坐標(可由每個類別中所有樣本點求均值得到)
(3)判斷聚類中心點坐標與上一次的有無變化,不再變化就退出循環
2. 初步探索
先隨機生成三組數據,實現一下上述步驟。
此外,由於k-means聚類需要指定聚類個數,而以上只是針對三個類別做的初步探索,下面我們將整個過程完全封裝起來,實現任意聚類個數!最終成品:
label值即為k-means演算法得到的分類標籤,畫個圖來看一下效果怎麼樣:
完美!其實。。。k-means在scikit-learn庫中當然早就有成熟的實現,重複造輪子只是為了練練手,加深一下理解啦。
3. 討論
k-means的缺點很明顯,首先它會受到異常值(outlier)和雜訊的干擾,也不適用於非數值屬性的數據,此外初始簇中心點的選擇也可能對結果造成一定影響,實際中通常還需要結合其他方法。
k-means聚類需要人為指定聚類個數,而很多場景下這是未知的,可以靠其他分析結果以及經驗感覺來嘗試。此外,還可藉助於輪廓係數(Silhouette Coefficient),它可以用來衡量聚類質量的好壞,數值介於[-1,1],越接近1代表聚類效果(內聚度和分離度)越好,具體定義可自行百度,反正很簡潔,在此不再贅述。
與預期一致,可見將數據集分為3類時具有最大的輪廓係數。
4.案例
以這篇文獻為例,講的是視網膜EC細胞在angiogenesis不同階段中轉錄水平上的調控。
其中這張圖,圖a畫的這個heatmap,還涉及到層次聚類(Hierarchical Clustering)的相關知識,以後再介紹。b講的是將差異表達基因聚類成7個簇,橫軸是五個時間節點,這樣就可以展現在血管發育不同階段中起重要調控作用的基因集。具體來做,就是拿到每個測序樣本的counts值,標準化後再scale至[0,1]之間,表達矩陣中column為每個樣本,row為每個差異表達基因,然後合併相同時間節點的樣本,矩陣即轉化為5列,輸入數據並設定k=7即可。圖注中明確提到了是用k-means做的。
※略論軍事家粟裕
※噴』還是『泡』Air Foamposite pro/鳩易鞋評
TAG:全球大搜羅 |