成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一文簡述多種無監督聚類算法的Python實現

開發 開發工具 后端 算法
本文簡要介紹了多種無監督學習算法的 Python 實現,包括 K 均值聚類、層次聚類、t-SNE 聚類、DBSCAN 聚類。

無監督學習是一類用于在數據中尋找模式的機器學習技術。無監督學習算法使用的輸入數據都是沒有標注過的,這意味著數據只給出了輸入變量(自變量 X)而沒有給出相應的輸出變量(因變量)。在無監督學習中,算法本身將發掘數據中有趣的結構。

人工智能研究的領軍人物 Yan Lecun,解釋道:無監督學習能夠自己進行學習,而不需要被顯式地告知他們所做的一切是否正確。這是實現真正的人工智能的關鍵!

監督學習 VS 無監督學習

在監督學習中,系統試圖從之前給出的示例中學習。(而在無監督學習中,系統試圖從給定的示例中直接找到模式。)因此,如果數據集被標注過了,這就是一個監督學習問題;而如果數據沒有被標注過,這就是一個無監督學習問題。

上圖是一個監督學習的例子,它使用回歸技術找到在各個特征之間的最佳擬合曲線。而在無監督學習中,根據特征對輸入數據進行劃分,并且根據數據所屬的簇進行預測。

重要的術語

  • 特征:進行預測時使用的輸入變量。
  • 預測值:給定一個輸入示例時的模型輸出。
  • 示例:數據集中的一行。一個示例包含一個或多個特征,可能還有一個標簽。
  • 標簽:特征對應的真實結果(與預測相對應)。

準備無監督學習所需的數據

在本文中,我們使用 Iris 數據集來完成初級的預測工作。這個數據集包含 150 條記錄,每條記錄由 5 個特征構成——花瓣長度、花瓣寬度、萼片長度、萼片寬度、花的類別。花的類別包含 Iris Setosa、Iris VIrginica 和 Iris Versicolor 三種。本文中向無監督算法提供了鳶尾花的四個特征,預測它屬于哪個類別。

本文使用 Python 環境下的 sklearn 庫來加載 Iris 數據集,并且使用 matplotlib 進行數據可視化。以下是用于探索數據集的代碼片段:

  1. # Importing Modules 
  2. from sklearn import datasets 
  3. import matplotlib.pyplot as plt 
  4.  
  5. # Loading dataset 
  6. iris_df = datasets.load_iris() 
  7.  
  8. # Available methods on dataset 
  9. print(dir(iris_df)) 
  10.  
  11. # Features 
  12. print(iris_df.feature_names) 
  13.  
  14. # Targets 
  15. print(iris_df.target) 
  16.  
  17. # Target Names 
  18. print(iris_df.target_names) 
  19. label = {0: 'red', 1: 'blue', 2: 'green'} 
  20.  
  21. # Dataset Slicing 
  22. x_axis = iris_df.data[:, 0] # Sepal Length 
  23. y_axis = iris_df.data[:, 2] # Sepal Width 
  24.  
  25. # Plotting 
  26. plt.scatter(x_axis, y_axis, c=iris_df.target) 
  27. plt.show() 
  1. ['DESCR', 'data', 'feature_names', 'target', 'target_names'] 
  2. ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] 
  3. [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2] 
  4. ['setosa' 'versicolor' 'virginica'] 

紫色:Setosa,綠色:Versicolor,黃色:Virginica

聚類分析

在聚類分析中,數據被劃分為不同的幾組。簡而言之,這一步旨在將具有相似特征的群組從整體數據中分離出來,并將它們分配到簇(cluster)中。

可視化示例:

如上所示,左圖是沒有進行分類的原始數據,右圖是進行聚類之后的數據(根據數據本身的特征將其分類)。當給出一個待預測的輸入時,它會基于其特征查看自己從屬于哪一個簇,并以此為根據進行預測。

K-均值聚類的 Python 實現

K 均值是一種迭代的聚類算法,它的目標是在每次迭代中找到局部最大值。該算法要求在最初選定聚類簇的個數。由于我們知道本問題涉及到 3 種花的類別,所以我們通過將參數「n_clusters」傳遞給 K 均值模型來編寫算法,將數據分組到 3 個類別中。現在,我們隨機地將三個數據點(輸入)分到三個簇中。基于每個點之間的質心距離,下一個給定的輸入數據點將被劃分到獨立的簇中。接著,我們將重新計算所有簇的質心。

每一個簇的質心是定義結果集的特征值的集合。研究質心的特征權重可用于定性地解釋每個簇代表哪種類型的群組。

我們從 sklearn 庫中導入 K 均值模型,擬合特征并進行預測。

K 均值算法的 Python 實現:

  1. # Importing Modules 
  2. from sklearn import datasets 
  3. from sklearn.cluster import KMeans 
  4.  
  5. # Loading dataset 
  6. iris_df = datasets.load_iris() 
  7.  
  8. # Declaring Model 
  9. model = KMeans(n_clusters=3
  10.  
  11. # Fitting Model 
  12. model.fit(iris_df.data) 
  13.  
  14. # Predicitng a single input 
  15. predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]]) 
  16.  
  17. # Prediction on the entire data 
  18. all_predictions = model.predict(iris_df.data) 
  19.  
  20. # Printing Predictions 
  21. print(predicted_label) 
  22. print(all_predictions) 
  1. [0] 
  2. [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2] 

層次聚類

層次聚類,顧名思義,是一種能夠構建有層次的簇的算法。在這個算法的起始階段,每個數據點都是一個簇。接著,兩個最接近的簇合二為一。最終,當所有的點都被合并到一個簇中時,算法停止。

層次聚類的實現可以用 dendrogram 進行展示。接下來,我們一起來看一個糧食數據的層次聚類示例。數據集鏈接:

https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv

1. 層次聚類的 Python 實現:

  1. # Importing Modules 
  2. from scipy.cluster.hierarchy import linkage, dendrogram 
  3. import matplotlib.pyplot as plt 
  4. import pandas as pd 
  5.  
  6. # Reading the DataFrame 
  7. seeds_df = pd.read_csv( 
  8.  "https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv") 
  9.  
  10. # Remove the grain species from the DataFrame, save for later 
  11. varieties = list(seeds_df.pop('grain_variety')) 
  12.  
  13. # Extract the measurements as a NumPy array 
  14. samples = seeds_df.values 
  15.  
  16. """ 
  17. Perform hierarchical clustering on samples using the 
  18. linkage() function with the method='complete' keyword argument. 
  19. Assign the result to mergings. 
  20. """ 
  21. mergings = linkage(samples, method='complete'
  22.  
  23. """ 
  24. Plot a dendrogram using the dendrogram() function on mergings, 
  25. specifying the keyword arguments labels=varietiesleaf_rotation=90
  26. and leaf_font_size=6
  27. """ 
  28. dendrogram(mergings, 
  29.  labels=varieties
  30.  leaf_rotation=90
  31.  leaf_font_size=6
  32.  ) 
  33.  
  34. plt.show() 

2. K 均值和層次聚類之間的差別

  • 層次聚類不能很好地處理大數據,而 K 均值聚類可以。原因在于 K 均值算法的時間復雜度是線性的,即 O(n);而層次聚類的時間復雜度是平方級的,即 O(n2)。
  • 在 K 均值聚類中,由于我們最初隨機地選擇簇,多次運行算法得到的結果可能會有較大差異。而層次聚類的結果是可以復現的。
  • 研究表明,當簇的形狀為超球面(例如:二維空間中的圓、三維空間中的球)時,K 均值算法性能良好。
  • K 均值算法抗噪聲數據的能力很差(對噪聲數據魯棒性較差),而層次聚類可直接使用噪聲數據進行聚類分析。

t-SNE 聚類

這是一種可視化的無監督學習方法。t-SNE 指的是 t 分布隨機鄰居嵌入(t-distributed stochastic neighbor embedding)。它將高維空間映射到一個可視化的二維或三維空間中。具體而言,它將通過如下方式用二維或三維的數據點對高維空間的對象進行建模:以高概率用鄰近的點對相似的對象進行建模,而用相距較遠的點對不相似的對象進行建模。

用于 Iris 數據集的 t-SNE 聚類的 Python 實現:

  1. # Importing Modules 
  2. from sklearn import datasets 
  3. from sklearn.manifold import TSNE 
  4. import matplotlib.pyplot as plt 
  5.  
  6. # Loading dataset 
  7. iris_df = datasets.load_iris() 
  8.  
  9. # Defining Model 
  10. model = TSNE(learning_rate=100
  11.  
  12. # Fitting Model 
  13. transformed = model.fit_transform(iris_df.data) 
  14.  
  15. # Plotting 2d t-Sne 
  16. x_axis = transformed[:, 0] 
  17. y_axis = transformed[:, 1] 
  18.  
  19. plt.scatter(x_axis, y_axis, c=iris_df.target) 
  20. plt.show() 

紫色:Setosa,綠色:Versicolor,黃色:Virginica

在這里,具備 4 個特征(4 維)的 Iris 數據集被轉化到二維空間,并且在二維圖像中進行展示。類似地,t-SNE 模型可用于具備 n 個特征的數據集。

DBSCAN 聚類

DBSCAN(帶噪聲的基于密度的空間聚類方法)是一種流行的聚類算法,它被用來在預測分析中替代 K 均值算法。它并不要求輸入簇的個數才能運行。但是,你需要對其他兩個參數進行調優。

scikit-learn 的 DBSCAN 算法實現提供了缺省的「eps」和「min_samples」參數,但是在一般情況下,用戶需要對他們進行調優。參數「eps」是兩個數據點被認為在同一個近鄰中的最大距離。參數「min_samples」是一個近鄰中在同一個簇中的數據點的最小個數。

1. DBSCAN 聚類的 Python 實現:

  1. # Importing Modules 
  2. from sklearn.datasets import load_iris 
  3. import matplotlib.pyplot as plt 
  4. from sklearn.cluster import DBSCAN 
  5. from sklearn.decomposition import PCA 
  6.  
  7. # Load Dataset 
  8. iris = load_iris() 
  9.  
  10. # Declaring Model 
  11. dbscan = DBSCAN() 
  12.  
  13. # Fitting 
  14. dbscan.fit(iris.data) 
  15.  
  16. # Transoring Using PCA 
  17. pca = PCA(n_components=2).fit(iris.data) 
  18. pcapca_2d = pca.transform(iris.data) 
  19.  
  20. # Plot based on Class 
  21. for i in range(0, pca_2d.shape[0]): 
  22.  if dbscan.labels_[i] == 0: 
  23.  c1 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='r'marker='+'
  24.  elif dbscan.labels_[i] == 1: 
  25.  c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='g'marker='o'
  26.  elif dbscan.labels_[i] == -1: 
  27.  c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='b'marker='*'
  28.  
  29. plt.legend([c1, c2, c3], ['Cluster 1', 'Cluster 2', 'Noise']) 
  30. plt.title('DB 

2. 更多無監督學習技術:

  • 主成分分析(PCA)
  • 異常檢測
  • 自編碼器
  • 深度信念網絡
  • 赫布型學習
  • 生成對抗網絡(GAN)
  • 自組織映射

原文鏈接:

https://towardsdatascience.com/unsupervised-learning-with-python-173c51dc7f03

【本文是51CTO專欄機構“機器之心”的原創譯文,微信公眾號“機器之心( id: almosthuman2014)”】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-05-15 11:10:10

大數據聚類算法

2022-04-18 09:16:47

層次聚類Python代碼

2024-10-18 17:14:13

2023-03-03 08:26:32

負載均衡算法服務

2018-07-29 06:46:07

神經網絡RNN循環神經網絡

2020-06-24 12:01:16

Python數據類字符

2017-08-21 10:00:23

遺傳算法Python生物學

2023-11-13 15:01:28

機器學習

2023-12-01 16:27:05

機器學習無監督學習

2023-01-03 09:45:23

無人駕駛技術

2017-10-25 19:05:18

深度學習語音分離

2022-04-26 10:27:52

機器算法KNN數據

2021-10-13 19:39:26

鴻蒙HarmonyOS應用

2017-06-12 14:04:45

深度學習人工智能

2018-07-20 14:58:16

深度學習梯度下降損失函數

2017-07-06 17:03:45

BP算法Python神經網絡

2017-09-11 09:20:14

機器學習無監督學習聚類

2019-03-27 09:00:00

人工智能AI算法

2021-08-31 07:02:20

Diff算法DOM

2018-04-23 14:49:31

表征句子深度學習自然語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 2019天天干天天操 | 国产精品成人一区二区三区 | av中文字幕在线播放 | 1区2区3区视频 | 九九导航 | 日日摸日日碰夜夜爽2015电影 | xx性欧美肥妇精品久久久久久 | 欧美成人a∨高清免费观看 欧美日韩中 | 亚洲精品一级 | 欧美久久电影 | 日韩中文字幕在线不卡 | 欧美日韩视频在线第一区 | 浮生影院免费观看中文版 | 青青久草 | 欧洲一区二区三区 | 三级欧美 | 午夜精品一区二区三区在线视频 | 久久久久久毛片免费观看 | 国产日韩欧美中文 | 亚洲国产一区二区三区 | 国产一级免费在线观看 | 色偷偷888欧美精品久久久 | 在线欧美亚洲 | 91久久精品国产91久久 | 在线观看中文字幕dvd播放 | 99视频免费播放 | 成人黄视频在线观看 | 国产欧美精品在线观看 | 一区 | av在线免费观看网址 | 国产欧美日韩一区二区三区在线观看 | 99re视频这里只有精品 | 中文字幕在线欧美 | 成人精品国产免费网站 | 久久高清亚洲 | 久久久精彩视频 | 国产一区二区精品在线 | 国产日韩欧美在线一区 | 免费日本视频 | 亚洲成人一区 | 久久久久国产精品 |