欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python sklearn中的K-Means聚類使用方法淺析

 更新時間:2022年12月20日 16:19:58   作者:微小冷  
這篇文章主要介紹了Python sklearn中的K-Means聚類使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

初步認識

k-means翻譯過來就是K均值聚類算法,其目的是將樣本分割為k個簇,而這個k則是KMeans中最重要的參數(shù):n_clusters,默認為8。

下面做一個最簡單的聚類

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
X, y = make_blobs(1500)
fig = plt.figure()
for i in range(2):
    ax = fig.add_subplot(1,2,i+1)
    y = KMeans(i+2).fit_predict(X)
    plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

其中,y是聚類結(jié)果,其數(shù)值表示對應(yīng)位置X所屬類號。

效果如圖所示,對于下面這組數(shù)據(jù)來說,顯然最好是分為兩類,但如果KMeansn_clusters設(shè)為3,那就會聚成3類。

上面調(diào)用的KMeans是一個類,sklearn中同樣提供了函數(shù)形式的調(diào)用,其使用方法如下

from sklearn.cluster import k_means
cen, y, interia = k_means(X, 3)

其中,cen表示聚類后,每一類的質(zhì)心;y為聚類后的標(biāo)簽;interia表示均方誤差之和。

初值選取

KMeans最重要的概念是簇,也就是被分割后的數(shù)據(jù)種類;而每個簇都有一個非常重要的點,就是質(zhì)心。在設(shè)定好簇的個數(shù)之后,也就相當(dāng)于確定了質(zhì)心的個數(shù),而KMeans算法的基本流程是

  • 選擇k個點作為k個簇的初始質(zhì)心
  • 計算樣本到這k個質(zhì)心(簇)的距離,并將其劃入距離最近的簇中
  • 計算每個簇的均值,并使用該均值更新簇的質(zhì)心

重復(fù)上述2-3的操作,直到質(zhì)心區(qū)域穩(wěn)定或者達到最大迭代次數(shù)。

從這個流程可以看出來,KMeans算法至少有兩個細節(jié)需要考慮,一個是初始化方案,另一個則是質(zhì)心更新的方案。

KMeans類或者k_means函數(shù)中,提供了兩種初始化質(zhì)心方案,通過參數(shù)init來控制

  • 'random':表示隨機生成k個質(zhì)心
  • 'k-means++':此為默認值,通過kMeans++方法來初始化質(zhì)心。

kMeans++初始化質(zhì)心的流程如下

  • 隨機選擇1個點作為初始質(zhì)心 x 0
  • ?計算其他點到最近質(zhì)心的距離
  • 假定現(xiàn)有 n n n個質(zhì)心了,那么選擇距離當(dāng)前質(zhì)心較遠的點作為下一個質(zhì)心 x n x_n xn?

重復(fù)步驟2和3,直到質(zhì)心個數(shù)達到 k k k個。

若希望直接調(diào)用kMeans++函數(shù),則可使用kmeans_plusplus。

小批

sklearn提供了KMeans的一個變種MiniBatchKMeans,可在每次訓(xùn)練迭代中隨機抽樣,這種小批量的訓(xùn)練過程大大減少了運算時間。

當(dāng)樣本量非常巨大時,小批KMeans的優(yōu)勢是非常明顯的

from sklearn.cluster import MiniBatchKMeans
import time
ys, xs = np.indices([4,4])*6
cens = list(zip(xs.reshape(-1), ys.reshape(-1)))
X, y = make_blobs(100000,centers=cens)
km = KMeans(16)
mbk = MiniBatchKMeans(16)
def test(func, value):
    t = time.time()
    func(value)
    print("耗時", time.time()-t)
test(km.fit_predict, X)
# 耗時 3.2028110027313232
test(mbk.fit_predict, X)
# 耗時 0.2590029239654541

可見效果非常明顯,其中fit_predictpredict相似,但并沒有返回值,km.fit_predict(X)運行之后,會更改km中的labels_屬性,此即分類結(jié)果

fig = plt.figure()
ax = fig.add_subplot(1,2,1)
ax.scatter(X[:,0], X[:,1], c=km.labels_, 
    marker='.', alpha=0.5)
ax = fig.add_subplot(1,2,2)
ax.scatter(X[:,0], X[:,1], c=mbk.labels_, 
    marker='.', alpha=0.5)
plt.show()

效果如圖所示,可見小批的KMeans算法和KMeans算法從結(jié)果上來看區(qū)別不大。

到此這篇關(guān)于Python sklearn中的K-Means聚類使用方法淺析的文章就介紹到這了,更多相關(guān)Python K-Means聚類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中關(guān)于面向?qū)ο蟾拍畹脑敿氈v解

    Python中關(guān)于面向?qū)ο蟾拍畹脑敿氈v解

    要了解面向?qū)ο笪覀兛隙ㄐ枰戎缹ο蟮降资鞘裁赐嬉鈨?。關(guān)于對象的理解很簡單,在我們的身邊,每一種事物的存在都是一種對象。總結(jié)為一句話也就是:對象就是事物存在的實體
    2021-10-10
  • 如何使用python操作vmware

    如何使用python操作vmware

    這篇文章主要介紹了如何使用python操作vmware,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 關(guān)于Python中Inf與Nan的判斷問題詳解

    關(guān)于Python中Inf與Nan的判斷問題詳解

    這篇文章主要介紹了關(guān)于Python中Inf與Nan的判斷問題,文中介紹的很詳細,對大家具有一定的參考價值,有需要的朋友們下面來一起看看吧。
    2017-02-02
  • 基于Python制作一個文件去重小工具

    基于Python制作一個文件去重小工具

    我們常常在下載網(wǎng)絡(luò)素材時會下載很多的重復(fù)文件亂七八糟的,于是想實現(xiàn)一個去重的操作就顯得很重要。本文將用Python制作一個簡單的文件去重小工具,需要的可以參考一下
    2022-02-02
  • python交互式圖形編程實例(一)

    python交互式圖形編程實例(一)

    這篇文章主要為大家詳細介紹了python交互式圖形編程實例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Python全局變量與局部變量區(qū)別及用法分析

    Python全局變量與局部變量區(qū)別及用法分析

    這篇文章主要介紹了Python全局變量與局部變量區(qū)別及用法,結(jié)合實例形式分析了Python全局變量與局部變量的定義、常見用法、區(qū)別及相關(guān)操作注意事項,需要的朋友可以參考下
    2018-09-09
  • python寫xml文件的操作實例

    python寫xml文件的操作實例

    這篇文章主要介紹了python寫xml文件的操作實例,是非常常見的實用技巧,需要的朋友可以參考下
    2014-10-10
  • Python數(shù)字圖像處理代數(shù)之加減乘運算

    Python數(shù)字圖像處理代數(shù)之加減乘運算

    這篇文章主要介紹了Python數(shù)字圖像處理代數(shù)運算,對其中的加、減、乘運算分別作了詳細的講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • python模擬表單提交登錄圖書館

    python模擬表單提交登錄圖書館

    這篇文章主要為大家詳細介紹了python模擬表單提交登錄圖書館的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Python語法糖遍歷列表時刪除元素方法示例詳解

    Python語法糖遍歷列表時刪除元素方法示例詳解

    這篇文章主要為大家介紹了Python語法糖遍歷列表時刪除元素詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論