成人免费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算法

2021-03-03 10:08:40

數據算法技術

2019-06-06 08:52:00

2024-05-27 00:05:00

2024-10-14 16:37:25

2012-06-14 09:46:55

數據分析

2018-04-25 08:10:50

算法k-means代碼

2021-07-21 11:25:17

機器學習?AI人工智能

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

2017-04-14 08:33:47

2016-11-15 15:02:00

機器學習算法

2022-03-18 17:53:14

機器學習物聯網工業物聯網
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久免费视频 | av电影一区 | 国产97视频在线观看 | 日韩精品网站 | 国产精品一区二 | 亚洲国产成人av | 久久大陆 | yeyeav| 亚洲在线视频 | 91在线电影 | 99re6在线视频精品免费 | 日本免费在线 | 欧洲一区在线观看 | 日韩精品一区二区三区在线观看 | 亚洲一区二区三区在线免费 | 亚洲成av人影片在线观看 | 狠狠骚| 密色视频| 欧美不卡在线 | 亚洲精品1区2区3区 91免费看片 | 超碰在线播 | 亚洲视频在线免费观看 | 欧美日韩一区二区在线观看 | 亚洲一区二区三区四区五区中文 | 99久久久国产精品 | 视频三区 | 国产目拍亚洲精品99久久精品 | 国产在线二区 | 欧美日韩在线不卡 | 国产美女免费视频 | 中文字幕人成乱码在线观看 | 久久亚洲综合 | 日韩午夜网站 | 99精彩视频 | 高清一区二区 | 成年人网站免费视频 | 日韩电影免费观看中文字幕 | 99久久免费精品视频 | 精品视频一区二区三区在线观看 | 久久久国产一区二区三区 | 亚洲乱码国产乱码精品精98午夜 |