機器學習/sklearn 筆記:K-means,kmeans++,MiniBatchKMeans

1? K-means介紹

1.0 方法介紹

  • KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類,該算法要求指定群集的數量。它適用于大量樣本,并已在許多不同領域的廣泛應用領域中使用。
  • KMeans算法將一組樣本分成不相交的簇,每個簇由簇中樣本的平均值描述。這些平均值通常稱為簇的“質心”;
    • 注意,質心通常不是樣本點,盡管它們存在于相同的空間中。

  • KMeans算法旨在選擇最小化慣性或稱為群內平方和標準的質心:

1.1 慣性的缺點

  • 慣性可以被認為是衡量簇內部一致性的一種度量。它有各種缺點:
    • 慣性假設簇是凸形的和各向同性的,但這不總是情況。
      • 對于拉長的簇或形狀不規則的流形反應不佳
    • 慣性不是一個規范化的度量:
      • 我們只知道較低的值更好,零是最優的。但是在非常高維的空間中,歐幾里得距離往往會變得膨脹(這是所謂的“維數詛咒”的一個實例)。
      • ——>在k均值聚類之前運行一個降維算法,如主成分分析(PCA),可以緩解這個問題并加快計算速度。
  • 以下是幾個K-means效果不加的例子:
      • clusters的數量不是最優
      • 各向異性的cluster分布
      • 方差不同
      • 各個簇數量不同

1.2 Kmeans算法的步驟

  • K均值算法通常被稱為勞埃德算法(Lloyd's algorithm)。簡單來說,該算法有三個步驟
    • 第一步選擇初始質心,最基本的方法是從數據集中選擇樣本
    • 初始化之后,K均值算法由兩個步驟的循環組成
      • 第一個步驟是將每個樣本分配給最近的質心
      • 第二步是通過取分配給每個前一個質心的所有樣本的平均值來創建新的質心
      • 計算舊質心和新質心之間的差異,并重復這最后兩個步驟,直到這個值小于一個閾值(直到質心不再有顯著移動為止)
  • K均值算法等同于期望最大化算法,帶有一個小的、全相等的、對角線協方差矩陣

  • 給定足夠的時間,K均值總會收斂,但這可能是到一個局部最小值
    • 這在很大程度上取決于質心的初始化
    • 因此,計算通常會進行多次,質心的初始化也各不相同
    • 一個幫助解決這個問題的方法是k-means++初始化方案(init='k-means++')
      • 這樣初始化質心通常會相互遠離,導致比隨機初始化更好的結果

2 sklearn.cluster.KMeans

sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init='warn', max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='lloyd')

2.1 主要參數

n_clusters簇的數量
init
  • {‘k-means++’, ‘random’}或形狀為(n_clusters, n_features)的數組,默認為'k-means++' 初始化方法
    • ‘k-means++’:使用基于點對總慣性貢獻的經驗概率分布的采樣來選擇初始簇質心。這種技術加快了收斂速度
      • 這里實現的算法是“貪婪k-means++”。它與普通的k-means++的不同之處在于,每個采樣步驟進行多次嘗試,并從中選擇最佳質心
    • ‘random’:從數據中隨機選擇n_clusters個觀測(行)作為初始質心
    • 數組:形狀應為(n_clusters, n_features),并給出初始中心
n_init
  • 'auto'或int,默認值為10
  • k-means算法運行的次數,每次都使用不同的質心種子
  • 最終結果是n_init連續運行中慣性最佳的輸出。
  • 當n_init='auto'時,運行次數取決于init的值:
    • 如果使用init='random',則為10
    • 如果使用init='k-means++'或init是類數組的,則為1
max_iter
  • int,默認值為300
  • k-means算法單次運行的最大迭代次數
tol兩次連續迭代的簇中心的Frobenius范數差異來聲明收斂的相對容忍度

2.2 舉例

from sklearn.cluster import KMeans
import numpy as npX = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])kmeans=KMeans(n_clusters=2,n_init='auto').fit(X)

2.2.1 屬性

cluster_centers_

簇中心的坐標

labels_

每個點的標簽

inertia_

樣本到最近簇中心的平方距離之和,如果提供了樣本權重,則按樣本權重加權

n_iter_

運行的迭代次數

2.2.2 fit


fit(X, sample_weight=None)

?sample_weight 是X中每個觀測的權重。如果為None,則所有觀測都被賦予相等的權重

3?sklearn.cluster.kmeans_plusplus

類似于使用k_means++來進行

sklearn.cluster.kmeans_plusplus(X, n_clusters, *, sample_weight=None, x_squared_norms=None, random_state=None, n_local_trials=None)
X

用來選擇初始種子的數據

(也就是KMeans里面fit的內容)

n_cluster要初始化的質心數量
sample_weightX中每個觀測的權重

3.1 返回值:

centers:形狀為(n_clusters, n_features) ,k-means的初始中心。

indices:形狀為(n_clusters,) 在數據數組X中選擇的中心的索引位置。對于給定的索引和中心,X[index] = center

3.2 舉例

from sklearn.cluster import kmeans_plusplus
import numpy as npX = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])kmeans_plusplus(X,n_clusters=2)
'''
(array([[10,  0],[ 1,  4]]),array([5, 1]))
'''

4?Mini Batch K-Means

  • MiniBatchKMeans是KMeans算法的一個變種,它使用小批量(mini-batches)來減少計算時間,同時仍然試圖優化相同的目標函數
    • 小批量是輸入數據的子集,在每次訓練迭代中隨機采樣
    • 這些小批量大大減少了收斂到局部解所需的計算量
    • 與其他減少k-means收斂時間的算法不同,mini-batch k-means產生的結果通常只比標準算法稍差
  • 該算法在兩個主要步驟之間迭代,類似于傳統的k-means算法
    • 在第一步中,從數據集中隨機抽取樣本,形成一個小批量.然后,這些樣本被分配到最近的質心
    • 在第二步中,更新質心。與k-means不同,這是按樣本進行的
      • 對于小批量中的每個樣本,通過取樣本及其之前分配到該質心的所有樣本的流式平均值來更新分配的質心。
      • 這樣做的效果是隨著時間的推移減少質心變化的速率。
    • 這些步驟執行直到收斂或達到預定的迭代次數為止
  • MiniBatchKMeans比KMeans收斂得更快,但結果的質量有所降低

4.1?sklearn.cluster.MiniBatchKMeans

class sklearn.cluster.MiniBatchKMeans(n_clusters=8, *, init='k-means++', max_iter=100, batch_size=1024, verbose=0, compute_labels=True, random_state=None, tol=0.0, max_no_improvement=10, init_size=None, n_init='warn', reassignment_ratio=0.01)

4.1.1 主要參數

n_clusters簇的數量
init
  • {‘k-means++’, ‘random’}或形狀為(n_clusters, n_features)的數組,默認為'k-means++' 初始化方法
    • ‘k-means++’:使用基于點對總慣性貢獻的經驗概率分布的采樣來選擇初始簇質心。這種技術加快了收斂速度
      • 這里實現的算法是“貪婪k-means++”。它與普通的k-means++的不同之處在于,每個采樣步驟進行多次嘗試,并從中選擇最佳質心
    • ‘random’:從數據中隨機選擇n_clusters個觀測(行)作為初始質心
    • 數組:形狀應為(n_clusters, n_features),并給出初始中心
max_iter
  • int,默認值為300
  • k-means算法單次運行的最大迭代次數
batch_sizemini batch的大小,默認是1024
n_init
  • 'auto'或int,默認值為3
  • k-means算法運行的次數,每次都使用不同的質心種子
  • 最終結果是n_init連續運行中慣性最佳的輸出。
  • 當n_init='auto'時,運行次數取決于init的值:
    • 如果使用init='random',則為3
    • 如果使用init='k-means++'或init是類數組的,則為1

?4.1.2 屬性

還是那些:cluster_centers,labels_,inertia_,n_iter_,n_steps

4.1.3 方法

方法上fit,tranform,predict這些都有,多了一個partial_fit,表示使用一個mini-batch的樣本

4.2 舉例

from sklearn.cluster import MiniBatchKMeans
import numpy as npX = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])mini_kmeans=MiniBatchKMeans(n_clusters=2).fit(X)mini_kmeans.cluster_centers_
'''
array([[ 1.        ,  2.57142857],[10.        ,  2.        ]])
'''mini_kmeans.labels_
#array([0, 0, 0, 1, 1, 1])

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163167.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么要寫測試用例,測試用例寫給誰看?

📢專注于分享軟件測試干貨內容,歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!📢交流討論:歡迎加入我們一起學習!📢資源分享:耗時200小時精選的「軟件測試」資…

mysql查詢統計最近12個月的數據

項目場景: mysql查詢統計最近12個月的數據,按每個月縱向展示,效果圖 sql語句 注意:count( v.uuid ) 這里的是被統計那張表的id SELECT m.month,count( v.uuid ) AS total FROM (SELECT DATE_FORMAT(( CURDATE()), %Y-%m ) AS mon…

Leetcode—6.N字形變換【中等】

2023每日刷題&#xff08;三十七&#xff09; Leetcode—6.N字形變換 算法思想 參考k神的題解 實現代碼 class Solution { public:string convert(string s, int numRows) {if(numRows < 2) {return s;}vector<string> rows(numRows);int flag -1;int i 0;for(…

JMeter集結點的使用場景以及如何使用?

JMeter是一個開源的負載測試工具&#xff0c;它被廣泛用于測試應用程序、Web服務和網絡協議等的性能。在JMeter中&#xff0c;集結點&#xff08;JMeter Cluster&#xff09;是一種分布式測試環境&#xff0c;它允許多個JMeter實例同時工作來模擬高并發負載。 使用集結點的場景…

聚水潭連接API,集成無代碼開發,優化電商平臺運營

聚水潭連接API&#xff0c;實現電商平臺的高效運營 聚水潭作為一款SaaS ERP解決方案&#xff0c;通過其出色的產品和服務&#xff0c;迅速在市場上占據了一席之地。而其無代碼開發的特點&#xff0c;為電商系統和客服系統的連接與集成提供了便利。聚水潭開放平臺的優勢在于&am…

常見的電商模式

市面上5種常見的電商模式&#xff1a; B2B模式 B2B&#xff08;business to business&#xff09;,是指商家與商家建立的商業關系。如&#xff1a;阿里巴巴 B2C模式 B2C&#xff08;business to consumer&#xff09;,商對客模式&#xff0c;商業零售。直接面向消費者銷售產品…

2024年荊州中級工程師職稱申報時間是什么時候?

甘建二十年耕耘職稱。 2024年荊州中級工程師職稱開始準備了&#xff0c;關于荊門中級職稱具體申報時間&#xff0c;甘建二告訴你。 ?2024年荊州中級工程師職稱申報時間&#xff1a; 1.水平能力測試報名3月份 2.水平能力測試考試4月份3.職稱申報9月份&#xff0c;采取的是網上申…

ElementPlusError: [ElOnlyChild] no valid child node found

突然發現頁面報了一堆黃色的錯誤提示 查了下原來是這里導致的&#xff0c;只需要把v-if 挪到popover那層即可 解決

服務器安全防護導致使用多款行業頂尖軟件搭配使用,還是單獨一款解決呢?

如今&#xff0c;在全球各地&#xff0c;數以千計的公司、組織和個人都依賴于服務器來存儲和訪問重要數據&#xff0c;托管應用程序&#xff0c;以及提供服務。但是&#xff0c;這些服務器不斷面臨著來自網絡黑客的威脅&#xff0c;因此服務器的安全成為了當務之急。 在這種情…

win10底部任務欄無響應?試試這些方法!

win10的任務欄是一個關鍵的用戶界面元素&#xff0c;允許您輕松訪問應用程序和系統功能。然而&#xff0c;有時您可能會遇到win10底部任務欄無響應的問題&#xff0c;這會妨礙您的工作流程。本篇文章將介紹解決win 10底部任務欄無響應的問題的三種方法&#xff0c;每種方法都會…

git操作分支命令

# 列出所有本地分支 $ git branch# 列出所有遠程分支 $ git branch -r# 列出所有本地分支和遠程分支 $ git branch -a# 新建一個分支&#xff0c;但依然停留在當前分支 $ git branch [branch-name]# 新建一個分支&#xff0c;并切換到該分支 $ git checkout -b [branch]# 新建一…

RocketMQ保姆級教程

RocketMQ是阿里巴巴旗下一款開源的MQ框架&#xff0c;經歷過雙十一考驗、Java編程語言實現&#xff0c;有非常好完整生態系統。RocketMQ作為一款純java、分布式、隊列模型的開源消息中間件&#xff0c;支持事務消息、順序消息、批量消息、定時消息、消息回溯等&#xff0c;總之…

為Oracle鏈接服務器使用分布式事務

1 現象 在SQL Server中創建指向Oracle的鏈接服務器&#xff0c;SQL語句在事務中向鏈接服務器插入數據。返回鏈接服務器無法啟動分布式事務的報錯。 2 解決 在Windows平臺下&#xff0c;SQL Server依賴分布式事務協調器&#xff08;MSDTC&#xff09;來使用分布式事務&#xff0…

關于APP備案的通知以及APP備案的常見問題

前言 眾所周知今年8月份&#xff0c;工信部出臺了《工業和信息化部關于開展移動互聯網應用程序備案工作的通知》&#xff0c;APP開發者的影晌是顯而易見的。開發者需要按照要求提交相關材料進行備案&#xff0c;這無疑增加了開發者的時間和精力成本。雖然備案制度會增加開發者…

深度學習之基于Tensorflow卷積神經網絡鳥類目標識別檢測系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 基于Tensorflow的卷積神經網絡&#xff08;Convolutional Neural Networks&#xff0c;CNN&#xff09;在鳥類目標識…

MAX/MSP SDK學習06:內存管理

提供兩種內存分配方式&#xff1a;①簡單指針&#xff0c;②句柄&#xff08;二級指針&#xff09;&#xff1b;官方文檔建議使用前者。 // 簡單指針 char *ptr; ptr sysmem_newptr(2000); post("I have a pointer %lx and it is %ld bytes in size",ptr, sysmem_p…

opencv-分水嶺算法分割

原理 任何一副灰度圖像都可以被看成拓撲平面&#xff0c;灰度值高的區域可以被看成是山峰&#xff0c;灰度值低的區域可以被看成是山谷。我們向每一個山谷中灌不同顏色的水。隨著水的位的升高&#xff0c;不同山谷的水就會相遇匯合&#xff0c;為了防止不同山谷的水匯合&#x…

ios(swiftui) 畫中畫

一、環境 要實現畫中畫 ios系統必須是 iOS14 本文開發環境 xcode14.2 二、權限配置 在項目導航器中單擊項目&#xff0c;然后單擊Signing & Capabilities。單擊 Capabilit搜索Background Modes&#xff0c;然后雙擊將其添加為功能。在新添加的Background Modes部分&a…

前端——設計模式

0 設計模式分類 創建型&#xff1a;幫助創建對象&#xff08;工廠模式、單例模式、建造者模式、原型模式&#xff09;結構型&#xff1a;幫助設計代碼結構&#xff08;適配器模式、裝飾者模式、享元模式&#xff09;行為型&#xff1a;幫助組織模塊行為&#xff08;策略模式、…

Pyqt5實現多線程程序

主從架構 Pyqt常常使用**主從架構&#xff08;Master-Workers 架構&#xff09;**來避免界面卡死的情況。 Master-Workers 架構就像它的名字&#xff0c;一個master統領著幾個workers一起干活。其中某個worker倒下了不會導致整體任務失敗。matser不用干活&#xff0c;因此可以…