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

機器學習K-means算法在Python中的實現

人工智能 機器學習 算法
K-means是機器學習中一個比較常用的算法,屬于無監督學習算法,其常被用于數據的聚類,只需為它指定簇的數量即可自動將數據聚合到多類中,相同簇中的數據相似度較高,不同簇中數據相似度較低。

K-means算法簡介

K-means是機器學習中一個比較常用的算法,屬于無監督學習算法,其常被用于數據的聚類,只需為它指定簇的數量即可自動將數據聚合到多類中,相同簇中的數據相似度較高,不同簇中數據相似度較低。

K-menas的優缺點:

優點:

  • 原理簡單
  • 速度快
  • 對大數據集有比較好的伸縮性

缺點:

  • 需要指定聚類 數量K
  • 對異常值敏感
  • 對初始值敏感

K-means的聚類過程

其聚類過程類似于梯度下降算法,建立代價函數并通過迭代使得代價函數值越來越小

  • 適當選擇c個類的初始中心;
  • 在第k次迭代中,對任意一個樣本,求其到c個中心的距離,將該樣本歸到距離最短的中心所在的類;
  • 利用均值等方法更新該類的中心值;
  • 對于所有的c個聚類中心,如果利用(2)(3)的迭代法更新后,值保持不變,則迭代結束,否則繼續迭代。

 

該算法的***優勢在于簡潔和快速。算法的關鍵在于初始中心的選擇和距離公式。

K-means 實例展示

python中km的一些參數:

  1. sklearn.cluster.KMeans( 
  2.  
  3.     n_clusters=8, 
  4.  
  5.     init='k-means++'
  6.  
  7.     n_init=10, 
  8.  
  9.     max_iter=300, 
  10.  
  11.     tol=0.0001, 
  12.  
  13.     precompute_distances='auto'
  14.  
  15.     verbose=0, 
  16.  
  17.     random_state=None, 
  18.  
  19.     copy_x=True
  20.  
  21.     n_jobs=1, 
  22.  
  23.     algorithm='auto' 
  24.  
  25.     )  
  • n_clusters: 簇的個數,即你想聚成幾類
  • init: 初始簇中心的獲取方法
  • n_init: 獲取初始簇中心的更迭次數,為了彌補初始質心的影響,算法默認會初始10個質心,實現算法,然后返回***的結果。
  • max_iter: ***迭代次數(因為kmeans算法的實現需要迭代)
  • tol: 容忍度,即kmeans運行準則收斂的條件
  • precompute_distances:是否需要提前計算距離,這個參數會在空間和時間之間做權衡,如果是True 會把整個距離矩陣都放到內存中,auto 會默認在數據樣本大于featurs*samples 的數量大于12e6 的時候False,False 時核心實現的方法是利用Cpython 來實現的
  • verbose: 冗長模式(不太懂是啥意思,反正一般不去改默認值)
  • random_state: 隨機生成簇中心的狀態條件。
  • copy_x: 對是否修改數據的一個標記,如果True,即復制了就不會修改數據。bool 在scikit-learn 很多接口中都會有這個參數的,就是是否對輸入數據繼續copy 操作,以便不修改用戶的輸入數據。這個要理解Python 的內存機制才會比較清楚。
  • n_jobs: 并行設置
  • algorithm: kmeans的實現算法,有:’auto’, ‘full’, ‘elkan’, 其中 ‘full’表示用EM方式實現

雖然有很多參數,但是都已經給出了默認值。所以我們一般不需要去傳入這些參數,參數的。可以根據實際需要來調用。

下面展示一個代碼例子 

  1. from sklearn.cluster import KMeans 
  2.  
  3. from sklearn.externals import joblib 
  4.  
  5. from sklearn import cluster 
  6.  
  7. import numpy as np  
  8.   
  9.  
  10. # 生成10*3的矩陣 
  11.  
  12. data = np.random.rand(10,3) 
  13.  
  14. print data 
  15.  
  16. # 聚類為4類 
  17.  
  18. estimator=KMeans(n_clusters=4) 
  19.  
  20. # fit_predict表示擬合+預測,也可以分開寫 
  21.  
  22. res=estimator.fit_predict(data) 
  23.  
  24. # 預測類別標簽結果 
  25.  
  26. lable_pred=estimator.labels_ 
  27.  
  28. # 各個類別的聚類中心值 
  29.  
  30. centroids=estimator.cluster_centers_ 
  31.  
  32. # 聚類中心均值向量的總和 
  33.  
  34. inertia=estimator.inertia_  
  35.   
  36.  
  37. print lable_pred 
  38.  
  39. print centroids 
  40.  
  41. print inertia  
  42.   
  43.  
  44. 代碼執行結果 
  45.  
  46. [0 2 1 0 2 2 0 3 2 0]  
  47.   
  48.  
  49. [[ 0.3028348   0.25183096  0.62493622] 
  50.  
  51. [ 0.88481287  0.70891813  0.79463764] 
  52.  
  53. [ 0.66821961  0.54817207  0.30197415] 
  54.  
  55. [ 0.11629904  0.85684903  0.7088385 ]] 
  56.  
  57. 0.570794546829  

為了更直觀的描述,這次在圖上做一個展示,由于圖像上繪制二維比較直觀,所以數據調整到了二維,選取100個點繪制,聚類類別為3類 

  1. from sklearn.cluster import KMeans 
  2.  
  3. from sklearn.externals import joblib 
  4.  
  5. from sklearn import cluster 
  6.  
  7. import numpy as np 
  8.  
  9. import matplotlib.pyplot as plt  
  10.   
  11.  
  12. data = np.random.rand(100,2) 
  13.  
  14. estimator=KMeans(n_clusters=3) 
  15.  
  16. res=estimator.fit_predict(data) 
  17.  
  18. lable_pred=estimator.labels_ 
  19.  
  20. centroids=estimator.cluster_centers_ 
  21.  
  22. inertia=estimator.inertia_ 
  23.  
  24. #print res 
  25.  
  26. print lable_pred 
  27.  
  28. print centroids 
  29.  
  30. print inertia  
  31.   
  32.  
  33. for i in range(len(data)): 
  34.  
  35.     if int(lable_pred[i])==0: 
  36.  
  37.         plt.scatter(data[i][0],data[i][1],color='red'
  38.  
  39.     if int(lable_pred[i])==1: 
  40.  
  41.         plt.scatter(data[i][0],data[i][1],color='black'
  42.  
  43.     if int(lable_pred[i])==2: 
  44.  
  45.         plt.scatter(data[i][0],data[i][1],color='blue'
  46.  
  47. plt.show() 

 

可以看到聚類效果還是不錯的,對k-means的聚類效率進行了一個測試,將維度擴寬到50維

 

對于***的數據,擬合時間還是能夠接受的,可見效率還是不錯,對模型的保存與其它的機器學習算法模型保存類似

  1. from sklearn.externals import joblib  
  2. joblib.dump(km,"model/km_model.m")   
責任編輯:龐桂玉 來源: Python開發者
相關推薦

2024-04-18 15:44:20

2012-08-09 09:57:54

K-means

2012-05-08 16:29:32

K-meansJava算法

2019-06-06 08:52:00

2021-03-03 10:08:40

數據算法技術

2024-05-27 00:05:00

2012-06-14 09:46:55

數據分析

2024-10-14 16:37:25

2021-07-21 11:25:17

機器學習?AI人工智能

2018-04-25 08:10:50

算法k-means代碼

2020-12-16 15:56:26

機器學習人工智能Python

2025-05-22 10:06:49

2022-02-15 23:38:22

Python機器學習算法

2020-07-13 14:50:51

機器學習模型算法

2019-11-25 14:24:24

機器學習算法數據

2023-02-17 08:10:58

2018-04-16 08:56:40

2022-03-18 17:53:14

機器學習物聯網工業物聯網

2022-04-18 11:36:43

機器學習制造業人工智能

2017-04-14 08:33:47

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 蜜桃av鲁一鲁一鲁一鲁 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 黄色av大片 | 日韩福利在线 | 91在线精品秘密一区二区 | 欧美寡妇偷汉性猛交 | 一级一级毛片免费看 | av一二三区| 亚洲成人中文字幕 | 日韩www| 美女一区| 国产精品99久久久久久久久久久久 | 久久久精品综合 | wwwxxx国产 | 国产乱码精品1区2区3区 | 日本成人午夜影院 | 五月天婷婷狠狠 | 成人超碰 | 麻豆精品国产91久久久久久 | 五月婷婷视频 | a级在线免费 | 欧美一区二区二区 | 成人高清视频在线观看 | 中文字幕99| 国产在线精品一区二区三区 | 久久男人 | 国产精品美女久久久久久久网站 | 一区二区三区高清不卡 | 九九亚洲| 久久最新精品视频 | 成人欧美一区二区三区黑人孕妇 | 狠狠亚洲 | 精品毛片| 国产精品日韩欧美一区二区三区 | 日韩有码在线播放 | 亚洲欧美成人 | 国产精品成人一区二区 | 亚洲免费网 | 国产精品久久久久久av公交车 | 中文字幕一区二区三区乱码在线 | 91精品一区二区三区久久久久久 |