kmeans手寫實現與sklearn接口

kmeans手寫實現與sklearn接口

kmeans簡介

K 均值聚類是最基礎的一種聚類方法。它是一種迭代求解的聚類分析算法。

kmeans的迭代步驟

  1. 給各個簇中心 μ1,…,μc\mu_1,\dots,\mu_cμ1?,,μc? 以適當的初值;

  2. 更新樣本 x1,…,xnx_1,\dots,x_nx1?,,xn? 對應的簇標簽 y1,…,yny_1,\dots,y_ny1?,,yn?
    yi←argminy∈{1,…,c}∣∣xi?μy∣∣2,i=1,…,ny_i\leftarrow argmin_{y\in \{1,\dots,c\}}||x_i-\mu_y||^2,\ \ \ i=1,\dots,n yi?argminy{1,,c}?∣∣xi??μy?2,???i=1,,n

  3. 更新各個簇中心 μ1,…,μc\mu_1,\dots,\mu_cμ1?,,μc?
    μy←1ny∑i:yi=yxi,y=1,…,c\mu_y\leftarrow \frac{1}{n_y}\sum_{i:y_i=y}x_i,\ \ \ y=1,\dots,c μy?ny?1?i:yi?=y?xi?,???y=1,,c
    其中,nyn_yny? 為屬于簇 yyy 的類別總數

  4. 重復上述步驟2, 3,直到簇標簽不再變化(變化足夠小),達到收斂精度為止

優缺點

優點

  1. 算法快速、簡單;
  2. 對大數據集有較高的效率并且是可伸縮性的;
  3. 時間復雜度近于線性,而且適合挖掘大規模數據集。K-Means聚類算法的時間復雜度是O(n×k×t) ,其中n代表數據集中對象的數量,t代表著算法迭代的次數,k代表著簇的數目

缺點

  1. 在k-measn算法中K是事先給定的,但是K值的選定是非常難以估計的。
  2. 在 K-means 算法中,首先需要根據初始聚類中心來確定一個初始劃分,然后對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結果,這也成為 K-means算法的一個主要問題。
  3. 當數據量很大時,算法的開銷是非常大的。

kmeans算法的改進

  • kmeans++
  • 二分Kmeans
    • 分解最大 SSE (誤差平方和)的簇
    • 合并距離最小的簇 或者 合并SSE增幅最小的兩個簇。

手寫實現

偽代碼:

創建 k 個點作為起始質心 (隨機選擇):當任意一個點的簇分配結果發生改變的時候:對數據集中的每個數據點:對每個質心:計算質心與數據點之間的距離將數據點分配到距其最近的簇對每一個簇:求出均值并將其更新為質心

Python實現:

import numpy as npdef kmeans(data, n_clusters, tolerence):n_samples = data.shape[0]sample_asign = np.zeros((n_samples, 2))cluster_centers = data[: n_clusters, :]isChanged = Trueepoch_cnt = 0while isChanged:epoch_cnt += 1isChanged = False# 更新每個樣本點所屬于的類for sample_index in range(n_samples):min_dist = np.infmin_index = 0for cluster_index in range(n_clusters):dist = np.linalg.norm(data[sample_index, :] - cluster_centers[cluster_index, :])if dist < min_dist:min_dist = distmin_index = cluster_indexsample_asign[sample_index, :] = min_dist, min_index# 更新每個聚類中心for cluster_index in range(n_clusters):new_cluster_samples = data[ sample_asign[:, 1] == cluster_index ]new_center = np.mean(new_cluster_samples, axis=0)cluster_center_diff = np.linalg.norm( new_center - cluster_centers[cluster_index, :] )cluster_centers[cluster_index, :] = new_centerif cluster_center_diff > tolerence:isChanged = Trueprint(f"epoch count: {epoch_cnt}")return cluster_centersif __name__ == '__main__':n_samples = 512data_dim = 3n_clusters = 4data = np.random.randn(n_samples, data_dim)tol = 1e-12centers = kmeans(data, n_clusters, tol)print(centers)

sklearn接口

kmeans 手寫實現主要還是為了理解算法,在實際應用中,我們一般調 sklearn 的包就好了。

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

類初始化參數

  • init:指定初始化聚類中心的方法。可以是 kmeans++ (默認),random 隨機選取,或者是一個形狀為 (n_clusters, n_features) 的數組,直接將該數組作為初始的聚類中心。
  • n_init:使用不同質心 (centeroid) 種子運行k -means 算法的次數。最終結果將是 inertia 最佳時的輸出。整型,默認為 10。
  • max_iter:kmeans 算法單詞運行的最大迭代數。整型,默認 300。
  • tol:關于兩次連續迭代的聚類中心差異的 Frobenius 范數的相對容忍度,小于該值認為收斂。浮點數。
  • verbose:是否打印迭代過程中的輸出。整型,默認為 0。
  • random_state:決定初始聚類中心的隨機數種子。整型。
  • copy_x:在預先計算距離時,首先將數據居中在數值上更準確。 如果 copy_x 為 True(默認),則不修改原始數據。 如果為 False,則修改原始數據,并在函數返回之前放回,但通過減去再添加數據均值可能會引入小的數值差異。 請注意,如果原始數據不是 C 連續的,即使 copy_x 為 False,也會進行復制。 如果原始數據是稀疏的,但不是 CSR 格式,即使 copy_x 為 False,也會進行復制。
  • algorithm:要使用的 K-means 算法。 默認是經典的 EM 風格算法 “lloyd”。可選項有:“lloyd”, “elkan”, “auto”, “full”。

類屬性

  • cluster_centers_:聚類中心的坐標,是一個形狀為 (n_clusters, n_features) 的數組。如果算法完全收斂,則與 labels_ 一致。
  • labels_:每個點的標簽,形狀為 (n_clusters, ) 。
  • inertia_:樣本到其最近聚類中心的平方距離總和,如果給了權重的話會計算加權和。浮點數。
  • n_features_in_:在運行 fit 方法時見到的特征數,整型、
  • feature_names_in_:在運行 fit 方法時見到到的特征名稱。只有當 X 的要素名稱均為字符串時才定義。形狀為 (n_features_in_, ) 的數組。

類方法

函數簽名說明
fit(X[, y, sample_weight])計算 kmeans 聚類
fit_predict(X[, y, sample_weight])計算 kmeans 聚類并預測每個樣本的簇序號
fit_transform(X[, y, sample_weight])計算 kmeans 聚類并將 X 轉換到聚類距離空間
get_feature_names_out([input_features])獲取轉換的輸出特征名稱
get_params([deep])獲取 estimator 的參數
predict(X[, sample_weight])預測 X 中每個樣本所屬于的簇
score(X[, y, sample_weight])(看起來是評估模型的準確率)
set_params(**params)設置 estimator 的參數
transform(X)將 X 轉換到聚類距離空間

模型保存與加載

需要通過 joblib 來保存,安裝:

pip install joblib

保存/加載模型

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
import joblibx, y = make_blobs(n_samples=1000, n_features=4, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]], cluster_std=[0.4, 0.2, 0.2, 0.4], random_state=42)
model = KMeans(n_clusters=6)
model.fit(x, y)
print(model.cluster_centers_)
# 保存模型
joblib.dump(model, 'kmeans_model.pkl')
# 加載模型
model = joblib.load('kmeans_model.pkl')
print(model.cluster_centers_)

Ref

  1. 圖解機器學習——杉山將
  2. sklearn官方文檔
  3. k-means原理與實現

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

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

相關文章

小說中場景的功能_《流浪地球》:從小說到電影

2019年春節賀歲檔冒出一匹黑馬&#xff1a;國產科幻片《流浪地球》大年初一上映后口碑、票房雙豐收&#xff1a;截至9日下午&#xff0c;票房已破15億&#xff0c;并獲得9.2的高評分。著名導演詹姆斯卡梅隆通過社交媒體對我國春節期間上映的科幻影片《流浪地球》發出的祝愿&…

線性回歸與邏輯回歸及其實現

線性回歸與邏輯回歸及其實現 回歸與分類 預測值定性分析&#xff0c;即離散變量預測時&#xff0c;稱之為分類&#xff1b;預測值定量分析&#xff0c;即連續變量預測時&#xff0c;稱之為回歸。 如預測一張圖片是貓還是狗&#xff0c;是分類問題&#xff1b;預測明年的房價…

hbase 頁面訪問_HBase

HBase 特點 海量存儲 Hbase 適合存儲 PB 級別的海量數據&#xff0c;在 PB 級別的數據以及采用廉價 PC 存儲的情況下&#xff0c;能在幾十到百毫秒內返回數據。這與 Hbase 的極易擴展性息息相關。正式因為 Hbase 良好的擴展性&#xff0c;才為海量數據的存儲提供了便利。 2&…

深入理解L1、L2正則化

深入理解L1、L2正則化 轉自&#xff1a;【面試看這篇就夠了】L1、L2正則化理解 一、概述 正則化&#xff08;Regularization&#xff09;是機器學習中一種常用的技術&#xff0c;其主要目的是控制模型復雜度&#xff0c;減小過擬合。正則化技術已經成為模型訓練中的常用技術&a…

rk3128屏幕占空比參數設置_瑞芯微RK3128芯片怎么樣 性能全面解讀

最近&#xff0c;筆者聽說一款搭載瑞芯微RK3128芯片方案的盒子問市了&#xff0c;打聽了一下才知道還真有其事&#xff0c;這款上市的RK3128盒子叫做開博爾M1&#xff0c;報價229元&#xff0c;這個價位在如今的四核網絡機頂盒市場可謂是不多見&#xff0c;但是這款芯片的性能怎…

機器學習中的概率模型

機器學習中的概率模型 轉自&#xff1a;https://zhuanlan.zhihu.com/p/164551678 機器學習中的概率模型 概率論&#xff0c;包括它的延伸-信息論&#xff0c;以及隨機過程&#xff0c;在機器學習中有重要的作用。它們被廣泛用于建立預測函數&#xff0c;目標函數&#xff0c;以…

訪問云服務器儲存的mp4_訪問云服務器儲存的mp4

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服務器 ECS(Elastic Compute Service)是一…

先驗、后驗、似然

先驗、后驗、似然 先驗分布、后驗分布和似然函數 本節轉自&#xff1a;先驗分布、后驗分布、似然估計這幾個概念是什么意思&#xff0c;它們之間的關系是什么&#xff1f; 通俗解釋 先驗分布&#xff1a;根據一般的經驗認為隨機變量應該滿足的分布。先驗分布是你瞎猜參數服從啥…

max std value 宏_Rust Macro/宏 新手指南

Rust語言最強大的一個特點就是可以創建和利用宏/Macro。不過創建 Rust宏看起來挺復雜&#xff0c;常常令剛接觸Rust的開發者心生畏懼。這片文章 的目的就是幫助你理解Rust Macro的基本運作原理&#xff0c;學習如何創建自己的 Rust宏。相關鏈接&#xff1a;在線學編程 - 匯智網…

高斯分布及其極大似然估計

高斯分布及其極大似然估計 高斯分布 一維高斯分布 一維高斯分布的概率密度函數為&#xff1a; N(μ,σ2)12πσexp?(?(x?μ)22σ2)N(\mu,\sigma^2)\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) N(μ,σ2)2π?σ1?exp(?2σ2(x?μ)2?) 多維高斯分布…

農林資金 大數據審計案例_大數據審計:現狀與發展

大數據審計&#xff1a;現狀與發展【摘要】傳統手工環境下&#xff0c;審計人員常用的審計方法包括檢查法、觀察法、重新計算法、外部調查法、分析法、鑒定法等。隨著信息技術的發展&#xff0c;被審計單位的運行越來越依賴于信息化環境。信息化環境下審計工作發生了巨大的變化…

商標45類分類表明細表_2019版注冊商標分類表,商標注冊45類范圍明細

注冊商標的時候都是要確定具體的產品或服務的&#xff0c;目前我國商標分類是用《類似商品和服務區分表–基于尼斯分類第十一版》2019年版這本分類書。這本分類表也是全球通用的分類表&#xff0c;商標分類總共有45個類別&#xff0c;1-34類是產品類、35-45類是服務類。這45個大…

高維高斯分布基礎

高維高斯分布基礎 多位高斯分布的幾何理解 多維高斯分布表達式為&#xff1a; p(x∣μ,Σ)1(2π)p/2∣Σ∣1/2e?12(x?μ)TΣ?1(x?μ)p(x|\mu,\Sigma)\frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)(2π)p/2∣Σ∣1/21?…

angularjs sill 創建項目_開源項目——博客項目MyBlogs.Core,基于.NET 5

個人博客站項目源碼&#xff0c;高性能低占用的博客系統&#xff0c;這也許是我個人目前寫過的性能最高的web項目了 。目前日均處理請求數80-120w次&#xff0c;同時在線活躍用戶數30-100人&#xff0c;數據量累計已達到100多萬條&#xff0c;數據庫Redis網站主程序同時運行在一…

懷舊服推薦配置_【懷舊服】狂暴戰P4畢業裝備推薦

在懷舊服開啟P4階段之后&#xff0c;狂暴戰玩家的輸出也得到了進一步的提升。當然&#xff0c;狂暴戰想要打出足夠的傷害離不開對應的裝備&#xff0c;現在就給大家介紹下狂暴戰P4階段的BIS裝備。散件裝備狂暴戰在這一階段依舊有非常不錯的散件裝備&#xff0c;個人建議玩家入手…

高斯混合模型GMM及EM迭代求解算法(含代碼實現)

高斯混合模型GMM及EM迭代求解算法&#xff08;含代碼實現&#xff09; 高斯分布與高斯混合模型 高斯分布 高斯分布大家都很熟悉了&#xff0c;下面是一元高斯分布的概率密度函數&#xff08;Probability Density Function&#xff0c;PDF&#xff09;&#xff1a; P(x)N(μ,…

十個模塊_專欄 | ABAQUS Part模塊的十個小技巧

作者介紹星辰_北極星2012年開始從事Abaqus仿真相關工作&#xff0c;服務大小課題逾百項; 主要仿真領域&#xff1a;石油工程、巖土工程和金屬加工工藝&#xff1b; 重點研究方向&#xff1a;ABAQUS GUI二次開發、固體力學、斷裂以及損傷等。Abaqus有部件(Part)和裝配體(Assembl…

深度學習時代的視頻理解綜述

深度學習時代的視頻理解綜述 本文為b站bryanyzhu老師四期視頻理解相關論文解讀的匯總圖文筆記。 我們先精讀深度學習時代視頻理解領域最為重要的兩篇論文&#xff1a;雙流網絡和 I3D。它們分別是領域內兩大類方法雙流&#xff08;利用光流&#xff09;網絡和 3D CNN 網絡的代…

typec擴展塢hdmi沒反應_typec擴展塢轉hdmi/vga多功能網口usb轉換器蘋果華為電腦matebook6元優惠券券后價26.8元...

★typec擴展塢轉hdmi/vga多功能網口usb轉換器蘋果華為電腦matebook&#xff0c;6元拼多多優惠券★券后價26.8元★★★typec擴展塢轉hdmi/vga多功能網口usb轉換器蘋果華為電腦matebook&#xffe5;26.8元&#xffe5;32.8元已拼5097件點擊搶購猜你喜歡[速發]喵喵機P1熱敏打印機手…

NLP任務概覽

NLP任務概覽 本文為臺灣大學李宏毅老師視頻課程筆記。本課程介紹了 &#xff08;2020年&#xff09;NLP 領域常見的 17 種任務。本文只會從輸入輸出的角度概覽多種 NLP 任務&#xff0c;并簡介它們的常見做法&#xff0c;并不會細致地介紹每個任務模型的具體細節。 兩種模式與…