亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解K-means算法在Python中的實現(xiàn)

 更新時間:2017年12月05日 17:06:33   作者:Stardustsky  
這篇文章主要介紹了詳解K-means算法在Python中的實現(xiàn),具有一定借鑒價值,需要的朋友可以了解下。

K-means算法簡介

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

K-MEANS算法是輸入聚類個數(shù)k,以及包含 n個數(shù)據(jù)對象的數(shù)據(jù)庫,輸出滿足方差最小標(biāo)準(zhǔn)k個聚類的一種算法。k-means 算法接受輸入量 k ;然后將n個數(shù)據(jù)對象劃分為 k個聚類以便使得所獲得的聚類滿足:同一聚類中的對象相似度較高;而不同聚類中的對象相似度較小。

核心思想

通過迭代尋找k個類簇的一種劃分方案,使得用這k個類簇的均值來代表相應(yīng)各類樣本時所得的總體誤差最小。

k個聚類具有以下特點:各聚類本身盡可能的緊湊,而各聚類之間盡可能的分開。

k-means算法的基礎(chǔ)是最小誤差平方和準(zhǔn)則,K-menas的優(yōu)缺點:

優(yōu)點:

原理簡單
速度快
對大數(shù)據(jù)集有比較好的伸縮性

缺點:

需要指定聚類 數(shù)量K
對異常值敏感
對初始值敏感

K-means的聚類過程

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

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

該算法的最大優(yōu)勢在于簡潔和快速。算法的關(guān)鍵在于初始中心的選擇和距離公式。

K-means 實例展示

python中km的一些參數(shù):

sklearn.cluster.KMeans(
  n_clusters=8,
  init='k-means++', 
  n_init=10, 
  max_iter=300, 
  tol=0.0001, 
  precompute_distances='auto', 
  verbose=0, 
  random_state=None, 
  copy_x=True, 
  n_jobs=1, 
  algorithm='auto'
  )
n_clusters: 簇的個數(shù),即你想聚成幾類
init: 初始簇中心的獲取方法
n_init: 獲取初始簇中心的更迭次數(shù),為了彌補(bǔ)初始質(zhì)心的影響,算法默認(rèn)會初始10個質(zhì)心,實現(xiàn)算法,然后返回最好的結(jié)果。
max_iter: 最大迭代次數(shù)(因為kmeans算法的實現(xiàn)需要迭代)
tol: 容忍度,即kmeans運(yùn)行準(zhǔn)則收斂的條件
precompute_distances:是否需要提前計算距離,這個參數(shù)會在空間和時間之間做權(quán)衡,如果是True 會把整個距離矩陣都放到內(nèi)存中,auto 會默認(rèn)在數(shù)據(jù)樣本大于featurs*samples 的數(shù)量大于12e6 的時候False,False 時核心實現(xiàn)的方法是利用Cpython 來實現(xiàn)的
verbose: 冗長模式(不太懂是啥意思,反正一般不去改默認(rèn)值)
random_state: 隨機(jī)生成簇中心的狀態(tài)條件。
copy_x: 對是否修改數(shù)據(jù)的一個標(biāo)記,如果True,即復(fù)制了就不會修改數(shù)據(jù)。bool 在scikit-learn 很多接口中都會有這個參數(shù)的,就是是否對輸入數(shù)據(jù)繼續(xù)copy 操作,以便不修改用戶的輸入數(shù)據(jù)。這個要理解Python 的內(nèi)存機(jī)制才會比較清楚。
n_jobs: 并行設(shè)置
algorithm: kmeans的實現(xiàn)算法,有:'auto', ‘full', ‘elkan', 其中 ‘full'表示用EM方式實現(xiàn)
雖然有很多參數(shù),但是都已經(jīng)給出了默認(rèn)值。所以我們一般不需要去傳入這些參數(shù),參數(shù)的??梢愿鶕?jù)實際需要來調(diào)用。

下面展示一個代碼例子

from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np

# 生成10*3的矩陣
data = np.random.rand(10,3)
print data
# 聚類為4類
estimator=KMeans(n_clusters=4)
# fit_predict表示擬合+預(yù)測,也可以分開寫
res=estimator.fit_predict(data)
# 預(yù)測類別標(biāo)簽結(jié)果
lable_pred=estimator.labels_
# 各個類別的聚類中心值
centroids=estimator.cluster_centers_
# 聚類中心均值向量的總和
inertia=estimator.inertia_

print lable_pred
print centroids
print inertia

代碼執(zhí)行結(jié)果
[0 2 1 0 2 2 0 3 2 0]

[[ 0.3028348  0.25183096 0.62493622]
 [ 0.88481287 0.70891813 0.79463764]
 [ 0.66821961 0.54817207 0.30197415]
 [ 0.11629904 0.85684903 0.7088385 ]]
 
0.570794546829

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

from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(100,2)
estimator=KMeans(n_clusters=3)
res=estimator.fit_predict(data)
lable_pred=estimator.labels_
centroids=estimator.cluster_centers_
inertia=estimator.inertia_
#print res
print lable_pred
print centroids
print inertia

for i in range(len(data)):
  if int(lable_pred[i])==0:
    plt.scatter(data[i][0],data[i][1],color='red')
  if int(lable_pred[i])==1:
    plt.scatter(data[i][0],data[i][1],color='black')
  if int(lable_pred[i])==2:
    plt.scatter(data[i][0],data[i][1],color='blue')
plt.show()

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

數(shù)據(jù)規(guī)模 消耗時間 數(shù)據(jù)維度
10000條 4s 50維
100000條 30s 50維
1000000條 4'13s 50維

對于百萬級的數(shù)據(jù),擬合時間還是能夠接受的,可見效率還是不錯,對模型的保存與其它的機(jī)器學(xué)習(xí)算法模型保存類似

from sklearn.externals import joblib
joblib.dump(km,"model/km_model.m")

總結(jié)

以上就是本文關(guān)于詳解K-means算法在Python中的實現(xiàn)的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

Python實現(xiàn)調(diào)度算法代碼詳解

Python算法輸出1-9數(shù)組形成的結(jié)果為100的所有運(yùn)算式

Python編程實現(xiàn)蟻群算法詳解

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

您可能感興趣的文章:

相關(guān)文章

  • python實現(xiàn)簡易名片管理系統(tǒng)

    python實現(xiàn)簡易名片管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡易名片管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Python的Web框架Django介紹與安裝方法

    Python的Web框架Django介紹與安裝方法

    這篇文章介紹了Python的Web框架Django與安裝方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • pytorch下大型數(shù)據(jù)集(大型圖片)的導(dǎo)入方式

    pytorch下大型數(shù)據(jù)集(大型圖片)的導(dǎo)入方式

    今天小編就為大家分享一篇pytorch下大型數(shù)據(jù)集(大型圖片)的導(dǎo)入方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • pyqt5 禁止窗口最大化和禁止窗口拉伸的方法

    pyqt5 禁止窗口最大化和禁止窗口拉伸的方法

    今天小編就為大家分享一篇pyqt5 禁止窗口最大化和禁止窗口拉伸的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 完美解決Python 2.7不能正常使用pip install的問題

    完美解決Python 2.7不能正常使用pip install的問題

    今天小編就為大家分享一篇完美解決Python 2.7不能正常使用pip install的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python+Splinter實現(xiàn)12306搶票功能

    python+Splinter實現(xiàn)12306搶票功能

    這篇文章主要為大家詳細(xì)介紹了python+Splinter實現(xiàn)12306搶票功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python?pycryptodome庫實現(xiàn)RSA加密解密消息

    Python?pycryptodome庫實現(xiàn)RSA加密解密消息

    本文為大家介紹了如何在?Python?中使用?RSA?公鑰加密技術(shù)來加密和解密消息,并使用?pycryptodome?庫進(jìn)行實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-02-02
  • Python 寫小游戲吃金幣+打乒乓+滑雪(附源碼)

    Python 寫小游戲吃金幣+打乒乓+滑雪(附源碼)

    這篇文章主要給大家分享的是利用Python 寫小游戲吃金幣、打乒乓、滑雪并附上源碼,具有一的知識性參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • python實現(xiàn)感知機(jī)模型的示例

    python實現(xiàn)感知機(jī)模型的示例

    這篇文章主要介紹了python實現(xiàn)感知機(jī)模型的示例,幫助大家更好的理解和學(xué)習(xí)python 機(jī)器學(xué)習(xí)的相關(guān)知識,感興趣的朋友可以了解下
    2020-09-09
  • Python selenium如何打包靜態(tài)網(wǎng)頁并下載

    Python selenium如何打包靜態(tài)網(wǎng)頁并下載

    這篇文章主要介紹了Python selenium如何打包靜態(tài)網(wǎng)頁并下載,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論