一文簡述多種無監督聚類演算法的Python實現
選自towardsdatascience
作者:Vihar Kurama
機器之心編譯
參與:Geek AI、路
本文簡要介紹了多種無監督學習演算法的 Python 實現,包括 K 均值聚類、層次聚類、t-SNE 聚類、DBSCAN 聚類。
無監督學習是一類用於在數據中尋找模式的機器學習技術。無監督學習演算法使用的輸入數據都是沒有標註過的,這意味著數據只給出了輸入變數(自變數 X)而沒有給出相應的輸出變數(因變數)。在無監督學習中,演算法本身將發掘數據中有趣的結構。
人工智慧研究的領軍人物 Yan Lecun,解釋道:無監督學習能夠自己進行學習,而不需要被顯式地告知他們所做的一切是否正確。這是實現真正的人工智慧的關鍵!
監督學習 VS 無監督學習
在監督學習中,系統試圖從之前給出的示例中學習。(而在無監督學習中,系統試圖從給定的示例中直接找到模式。)因此,如果數據集被標註過了,這就是一個監督學習問題;而如果數據沒有被標註過,這就是一個無監督學習問題。
上圖是一個監督學習的例子,它使用回歸技術找到在各個特徵之間的最佳擬合曲線。而在無監督學習中,根據特徵對輸入數據進行劃分,並且根據數據所屬的簇進行預測。
重要的術語
特徵:進行預測時使用的輸入變數。
預測值:給定一個輸入示例時的模型輸出。
示例:數據集中的一行。一個示例包含一個或多個特徵,可能還有一個標籤。
標籤:特徵對應的真實結果(與預測相對應)。
準備無監督學習所需的數據
在本文中,我們使用 Iris 數據集來完成初級的預測工作。這個數據集包含 150 條記錄,每條記錄由 5 個特徵構成——花瓣長度、花瓣寬度、萼片長度、萼片寬度、花的類別。花的類別包含 Iris Setosa、Iris VIrginica 和 Iris Versicolor 三種。本文中向無監督演算法提供了鳶尾花的四個特徵,預測它屬於哪個類別。
本文使用 Python 環境下的 sklearn 庫來載入 Iris 數據集,並且使用 matplotlib 進行數據可視化。以下是用於探索數據集的代碼片段:
紫色:Setosa,綠色:Versicolor,黃色:Virginica
聚類分析
在聚類分析中,數據被劃分為不同的幾組。簡而言之,這一步旨在將具有相似特徵的群組從整體數據中分離出來,並將它們分配到簇(cluster)中。
可視化示例:
如上所示,左圖是沒有進行分類的原始數據,右圖是進行聚類之後的數據(根據數據本身的特徵將其分類)。當給出一個待預測的輸入時,它會基於其特徵查看自己從屬於哪一個簇,並以此為根據進行預測。
K-均值聚類的 Python 實現
K 均值是一種迭代的聚類演算法,它的目標是在每次迭代中找到局部最大值。該演算法要求在最初選定聚類簇的個數。由於我們知道本問題涉及到 3 種花的類別,所以我們通過將參數「n_clusters」傳遞給 K 均值模型來編寫演算法,將數據分組到 3 個類別中。現在,我們隨機地將三個數據點(輸入)分到三個簇中。基於每個點之間的質心距離,下一個給定的輸入數據點將被劃分到獨立的簇中。接著,我們將重新計算所有簇的質心。
每一個簇的質心是定義結果集的特徵值的集合。研究質心的特徵權重可用於定性地解釋每個簇代表哪種類型的群組。
我們從 sklearn 庫中導入 K 均值模型,擬合特徵並進行預測。
K 均值演算法的 Python 實現:
層次聚類
層次聚類,顧名思義,是一種能夠構建有層次的簇的演算法。在這個演算法的起始階段,每個數據點都是一個簇。接著,兩個最接近的簇合二為一。最終,當所有的點都被合併到一個簇中時,演算法停止。
層次聚類的實現可以用 dendrogram 進行展示。接下來,我們一起來看一個糧食數據的層次聚類示例。數據集鏈接:https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv
層次聚類的 Python 實現:
K 均值和層次聚類之間的差別
層次聚類不能很好地處理大數據,而 K 均值聚類可以。原因在於 K 均值演算法的時間複雜度是線性的,即 O(n);而層次聚類的時間複雜度是平方級的,即 O(n2)。
在 K 均值聚類中,由於我們最初隨機地選擇簇,多次運行演算法得到的結果可能會有較大差異。而層次聚類的結果是可以復現的。
研究表明,當簇的形狀為超球面(例如:二維空間中的圓、三維空間中的球)時,K 均值演算法性能良好。
K 均值演算法抗雜訊數據的能力很差(對雜訊數據魯棒性較差),而層次聚類可直接使用雜訊數據進行聚類分析。
t-SNE 聚類
這是一種可視化的無監督學習方法。t-SNE 指的是 t 分布隨機鄰居嵌入(t-distributed stochastic neighbor embedding)。它將高維空間映射到一個可視化的二維或三維空間中。具體而言,它將通過如下方式用二維或三維的數據點對高維空間的對象進行建模:以高概率用鄰近的點對相似的對象進行建模,而用相距較遠的點對不相似的對象進行建模。
用於 Iris 數據集的 t-SNE 聚類的 Python 實現:
紫色:Setosa,綠色:Versicolor,黃色:Virginica
在這裡,具備 4 個特徵(4 維)的 Iris 數據集被轉化到二維空間,並且在二維圖像中進行展示。類似地,t-SNE 模型可用於具備 n 個特徵的數據集。
DBSCAN 聚類
DBSCAN(帶雜訊的基於密度的空間聚類方法)是一種流行的聚類演算法,它被用來在預測分析中替代 K 均值演算法。它並不要求輸入簇的個數才能運行。但是,你需要對其他兩個參數進行調優。
scikit-learn 的 DBSCAN 演算法實現提供了預設的「eps」和「min_samples」參數,但是在一般情況下,用戶需要對他們進行調優。參數「eps」是兩個數據點被認為在同一個近鄰中的最大距離。參數「min_samples」是一個近鄰中在同一個簇中的數據點的最小個數。
DBSCAN 聚類的 Python 實現:
更多無監督學習技術:
主成分分析(PCA)
異常檢測
自編碼器
深度信念網路
赫布型學習
生成對抗網路(GAN)
自組織映射
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
------------------------------------------------
※專訪|英特爾劉茵茵:持續優化NLP服務,助推人工智慧創新和落地
※詳解AlphaGo背後的力量:蒙特卡洛樹搜索入門指南
TAG:機器之心 |