【導(dǎo)讀】本文主要介紹了無監(jiān)督學(xué)習(xí)在Python上的實(shí)踐,圍繞著無監(jiān)督學(xué)習(xí),講述了當(dāng)前主流的無監(jiān)督聚類方法:數(shù)據(jù)準(zhǔn)備,聚類,K-Means Python實(shí)現(xiàn),層次聚類和其Python實(shí)現(xiàn),t-SNE聚類,DBSCAN 聚類。并且附上作者自己的經(jīng)驗(yàn)總結(jié),博文附完整詳細(xì)代碼,建議大家收藏學(xué)習(xí)!
作者 | Vihar Kurama
編譯 | 專知
整理 | Mandy, Shengsheng
Unsupervised Learning with Python
無監(jiān)督學(xué)習(xí)是一類機(jī)器學(xué)習(xí)技術(shù),用來發(fā)現(xiàn)數(shù)據(jù)中的模式。注意:在無監(jiān)督算法中,數(shù)據(jù)是沒有標(biāo)注的,即只給出輸入變量(X),不給出相應(yīng)的輸出變量。無監(jiān)督學(xué)習(xí)是讓算法自己去發(fā)現(xiàn)數(shù)據(jù)中有趣的結(jié)構(gòu)。
人工智能科學(xué)家Yan Lecun解釋說,無監(jiān)督學(xué)習(xí)——讓機(jī)器自己學(xué)習(xí),而不必被明確告知他們所做的每件事是對是錯(cuò)——是“真正的”人工智能的關(guān)鍵。
在監(jiān)督學(xué)習(xí)中,系統(tǒng)試圖從之前給出的例子中學(xué)習(xí)。然而,在無監(jiān)督學(xué)習(xí)中,系統(tǒng)試圖直接從給出的示例中找到模式。如果數(shù)據(jù)集被標(biāo)記了,則是一個(gè)監(jiān)督學(xué)習(xí)的問題,如果數(shù)據(jù)集沒有被標(biāo)記,那么它就是一個(gè)無監(jiān)督學(xué)習(xí)的問題。
左邊的圖像是監(jiān)督學(xué)習(xí)的一個(gè)例子;我們使用回歸方法找到特征之間的最佳擬合線。右邊的圖像是無監(jiān)督學(xué)習(xí)的一個(gè)例子;在無監(jiān)督學(xué)習(xí)中,輸入是基于特征進(jìn)行分離的,預(yù)測是基于它屬于哪個(gè)簇(cluster)。
特征(Feature):用于進(jìn)行預(yù)測的輸入變量。
預(yù)測(Predictions):當(dāng)提供輸入示例時(shí),模型的輸出。
示例(Example):數(shù)據(jù)集的一行。一個(gè)示例包含一個(gè)或多個(gè)特征, 可能還有一個(gè)標(biāo)簽。
標(biāo)簽(Label):特征的結(jié)果。
在本文中,我們使用Iris數(shù)據(jù)集進(jìn)行第一次預(yù)測。該數(shù)據(jù)集包含一組具有5個(gè)屬性的150條記錄,這5個(gè)屬性為花瓣長度、花瓣寬度、萼片長度、萼片寬度和類別。Iris Setosa, Iris Virginica和Iris Versicolor是三個(gè)類。對于我們的無監(jiān)督算法,我們給出了Iris花的四個(gè)特征,并預(yù)測了它屬于哪個(gè)類。
我們使用Python中的sklearn庫加載Iris數(shù)據(jù)集,使用matplotlib進(jìn)行數(shù)據(jù)可視化。下面是用于處理數(shù)據(jù)集的代碼部分。
輸出結(jié)果:
圖中:紫羅蘭色表示Setosa,綠色表示Versicolor,黃色表示Virginica
在聚類中,數(shù)據(jù)被分成幾個(gè)組。簡單來說:目的是將具有相似特征的群體分開并將它們賦予不同的簇(cluster)中。
可視化的例子,
在上圖中,左邊的圖像是未進(jìn)行分類的原始數(shù)據(jù),右邊的圖像是聚類的結(jié)果(根據(jù)數(shù)據(jù)的特征對數(shù)據(jù)進(jìn)行劃分)。當(dāng)給定一個(gè)要預(yù)測的輸入時(shí),它將根據(jù)其特征在簇(cluster)中檢查其所屬哪一個(gè)類別,并進(jìn)行預(yù)測。
K-Means是一種迭代聚類算法,旨在找到每次迭代中的局部最大值。由于我們知道涉及3個(gè)類,因此我們通過將參數(shù)“n_clusters”傳遞到KMeans模型中,對算法進(jìn)行編程,將數(shù)據(jù)分組為3個(gè)類。
現(xiàn)在隨機(jī)的三個(gè)樣本點(diǎn)(輸入)被分配到三個(gè)簇(cluster)中。然后后面樣本點(diǎn)和這每一個(gè)點(diǎn)算一下質(zhì)心距離(centroid distance),然后選出并放入最優(yōu)的簇(cluster)中。然后,重新計(jì)算所有簇(cluster)的centroids。
每一個(gè)聚類的中心是定義這一組樣本點(diǎn)的特征值的集合,檢查中心特征權(quán)重可以解釋每一個(gè)簇(cluster)代表的類型。
我們從sklearn庫中導(dǎo)入KMeans模型,擬合特征并進(jìn)行預(yù)測。
K-Means在Python中的實(shí)現(xiàn):
輸出結(jié)果:
顧名思義,層次聚類是一種構(gòu)建聚類層次結(jié)構(gòu)的算法。該算法從分配給自己簇(cluster)的所有數(shù)據(jù)開始。然后將兩個(gè)最近的簇(cluster)連接到同一個(gè)簇(cluster)中。最后,當(dāng)只剩下一個(gè)簇(cluster)時(shí),該算法就結(jié)束了。
層次聚類的完成可以用dendrogram來表示?,F(xiàn)在讓我們看一個(gè)grain谷粒數(shù)據(jù)層次聚類的例子。
數(shù)據(jù)集地址:
https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv.
Python中的層次聚類實(shí)現(xiàn):
輸出結(jié)果:
層次聚類不能很好地處理大數(shù)據(jù),但K-Means聚類可以。這是因?yàn)镵-Means的時(shí)間復(fù)雜度是線性的,即O(n),而層次聚類的時(shí)間復(fù)雜度是二次方,即O(n2)。
在K-Means聚類中,因?yàn)槲覀兂跏蓟臅r(shí)候,會任意選擇不同的簇(cluster),所以多次運(yùn)行算法產(chǎn)生的結(jié)果可能會有所不同。然而層次聚類中是可重現(xiàn)的。
當(dāng)簇(cluster)的形狀是超球形時(shí)(如2D中的圓,3D中的球),K-Means表現(xiàn)地很好。
K-Means不允許嘈雜的數(shù)據(jù),而在層次中我們可以直接使用有噪聲的數(shù)據(jù)集進(jìn)行聚類。
它是一種無監(jiān)督學(xué)習(xí)可視化的方法。t-SNE表示t-distributed stochastic neighborembedding。
它將高維空間映射到可以可視化的二維或三維空間。具體地說,它通過一個(gè)二維或三維點(diǎn)對每個(gè)高維對象進(jìn)行建模,其方式是相似的對象由附近的點(diǎn)建模,而不相似的對象則由高概率的遠(yuǎn)點(diǎn)建模。
具體可以查看專知以前的t-SNE詳解:
你真的會用 t-SNE 么?有關(guān) t-SNE 的小技巧
Python中,基于Iris數(shù)據(jù)集的t-SNE聚類實(shí)現(xiàn):
輸出結(jié)果:
其中,紫羅蘭色:Setosa,綠色:Versicolor,黃色:Virginica
這里Iris數(shù)據(jù)集具有四個(gè)特征(4d),它被變換并以二維圖形表示。類似地,t-SNE模型可以應(yīng)用于具有n個(gè)特征的數(shù)據(jù)集。
DBSCAN(Density-Based Spatial Clusteringof Applications with Noise,具有噪聲的基于密度的聚類方法)是一種流行的聚類算法,用于替代預(yù)測分析中的K-means。它不要求您輸入簇(cluster)的個(gè)數(shù)才能運(yùn)行。但作為交換,你必須調(diào)整其他兩個(gè)參數(shù)(eps和min_samples)。
DBSCAN算法的目的在于過濾低密度區(qū)域,發(fā)現(xiàn)稠密度樣本點(diǎn)。跟傳統(tǒng)的基于層次的聚類和劃分聚類的凸形聚類簇不同,該算法可以發(fā)現(xiàn)任意形狀的聚類簇,與傳統(tǒng)的算法相比它有如下優(yōu)點(diǎn):
(1)與K-MEANS比較起來,不需要輸入要?jiǎng)澐值木垲悅€(gè)數(shù);
(2)聚類簇的形狀沒有偏倚;
(3)可以在需要時(shí)輸入過濾噪聲的參數(shù);
scikit-learn為eps和min_samples參數(shù)提供了一個(gè)默認(rèn)值,但通常需要對它們進(jìn)行優(yōu)化。eps是在同一鄰域中考慮的兩個(gè)數(shù)據(jù)點(diǎn)之間的最大距離。min_samples指的是簇(cluster)在鄰域中數(shù)據(jù)點(diǎn)數(shù)量的最小數(shù)目。
DBSCAN聚類的Python實(shí)現(xiàn):
輸出結(jié)果:
主成分分析(PCA)
異常檢測(Anomaly detection)
自編碼(Autoencoders)
深度置信網(wǎng)絡(luò)(Deep BeliefNets)
Hebbian Learning
生成對抗網(wǎng)絡(luò)(GANs)
自組織映射(Self-Organizingmaps)
原文鏈接:
https://towardsdatascience.com/unsupervised-learning-with-python-173c51dc7f03
聯(lián)系客服