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

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_ndarray

每個點的標簽

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]))
'''

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

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

相關文章

hadoop shell操作 hdfs處理文件命令 hdfs上傳命令 hadoop fs -put命令hadoop fs相關命令 hadoop(十三)

hadoop fs -help rm 查看rm命令作用 hadoop fs 查看命令 1. 創建文件夾: # hdfs前綴也是可以的。更推薦hadoop hadoop fs -mkdir /sanguo 2.上傳至hdfs命令: 作用: 從本地上傳hdfs系統 (本地文件被剪切走,不存在了&…

論防火墻的體系結構

防火墻的體系結構 防火墻的體系結構 雙重宿主主機體系結構。屏蔽主機體系結構。屏蔽子網體系結構。 雙重宿主主機體系結構 雙重宿主主機體系結構是指以一臺具有雙重宿主的主機計算機作為防火墻系統的主體,執行分離外部網絡與內部網絡的任務。該計算機至少有兩個…

【NGINX--4】大規模可擴展的內容緩存

1、緩存區 緩存內容并定義緩存的存儲位置。 使用 proxy_cache_path 指令定義共享內存緩存區和內容的位置: proxy_cache_path /var/nginx/cachekeys_zoneCACHE:60m levels1:2inactive3h max_size20g; proxy_cache CACHE;上述緩存定義示例在文件系統 /var/nginx/ca…

為什么要用多線程?

提高響應速度:對于耗時操作,使用多線程可以使得應用程序更快地響應用戶的請求,從而提高用戶體驗。實現并行計算:多線程可以同時執行多個任務,從而實現并行計算,提高程序的運行效率。提高CPU利用率&#xff…

html屬性值可以不用引號嗎,實例驗證

html屬性值可以不用引號 HTML元素的屬性值可以不適用引號來包裹,瀏覽器一樣可以將其進行渲染。不過,如果這樣寫HTML的代碼的話,屬性與屬性值之間需要用空格來進行隔開,避免后面的屬性變成前面屬性的屬性值。 提示:雖…

達夢列式存儲和clickhouse基準測試

要驗證達夢BigTable和ClickHouse的性能差異,您需要進行一系列基準測試。基準測試通常包括多個步驟,如準備測試環境、設計測試案例、執行測試、收集數據和分析結果。以下是您可以遵循的一般步驟: 準備測試環境: 確保兩個數據庫系統…

sql手工注入漏洞測試(MYSQL)-墨者-url信息

背景: 自己在墨者官網靶場練習的時候,一直出錯,手工容易出錯,所以列舉一些信息供大家核對,可以參考改動。 數據庫版本version() 5.7.22-0ubuntu0.16.04.1 當前數據庫名稱database() m…

模擬量采集----測量輸入的電流

生活中的模擬量有很多 大多都為電壓信號和電流信號 今天講如何測量輸入的電流信號 通過歐姆定律可知 電流測量的測量:是將電流加載在固定阻值的電阻上,來測量這個電阻二端的電壓 最后反算出電流的大小 所用的公式是IU/R 我們使用仿真軟件來看測量…

神經網絡中間層特征圖可視化(輸入為音頻)(二)

相比方法一個人感覺這種方法更好 import librosa import numpy as np import utils import torch import matplotlib.pyplot as pltclass Hook:def __init__(self):self.features Nonedef hook_fn(self, module, input, output):self.features output# 創建鉤子的實例 hook …

EasyExcel listener無法通過Autowired注入xxMapper

easyexcel listener無法通過Autowired注入xxMapper 文章目錄 easyexcel listener無法通過Autowired注入xxMapperbug記錄:解決方案:easyexcel 使用例子controllerServiceImpllistener bug記錄: productMapper注入一直為null,而procureDetailM…

Visual Studio(VS) C++程序LNK2005錯誤,提示“error LNK2005: _XXX已經在xxx.obj中定義”解決方案

1.問題如圖 2.出現原因 項目中有多個源文件或頭文件,include后導致有些變量重復定義,加上Visual Studio新版版要求更嚴格 3.解決辦法 查詢到的解決辦法很多不好用,此處記錄解決自己問題的一個辦法:直接讓編譯器忽略第二次定義的…

圖形數據庫的實戰應用:如何在 Neo4j 中有效管理復雜關系

關系數據庫管理系統( RDBMS ) 代表了最先進的技術,這在一定程度上要歸功于其由周邊技術、工具和廣泛的專業技能組成的完善的生態系統。 在這個涵蓋信息技術(IT) 和運營技術(OT) 的技術革命時代,人們普遍認識到性能方面出現了重大挑戰,特別是…

連續變量降維:主成分分析和因子分析

主成分分析(Principal Component Analysis,PCA)和因子分析(Factor Analysis)都是用于處理連續變量降維的統計方法,它們在數據分析和特征提取中經常被使用。盡管它們有一些相似之處,但它們的目標…

初識JVM(簡單易懂),解開JVM神秘的面紗

目錄 一、什么是JVM(Java虛擬機)? 二、JVM的功能 三、JVM的功能-即時編譯 四、常見的JVM 五、JVM的組成 五、JVM的工作流程 參考資料 一、什么是JVM(Java虛擬機)? 在Java的世界里,Java虛…

代碼文檔瀏覽器 Dash mac中文版軟件特色

Dash mac是一個基于 Python 的 web 應用程序框架,它可以幫助開發者快速構建數據可視化應用。Dash 的工作原理是將 Python 代碼轉換成 HTML、CSS 和 JavaScript,從而在瀏覽器中呈現交互式的數據可視化界面。Dash 提供了一系列組件,包括圖表、表…

如何將設置為靜態IP的VMware虛擬機進行克隆以便可以復刻相應的環境

一定要關閉需要克隆的虛擬機右鍵要選擇克隆的虛擬機,選擇管理->克隆,進入克隆虛擬機向導 設定克隆出來的虛擬機名稱以及位置,選擇完成 克隆完成之后將會生成虛擬機,示例中生成的虛擬機為ubuntu-dev2 因為原本的虛擬機為靜態ip的…

區域人員超限AI算法的介紹及TSINGSEE視頻智能分析技術的行業應用

視頻AI智能分析已經滲透到人類生活及社會發展的各個方面。從生活中的人臉識別、停車場的車牌識別、工廠園區的翻越圍欄識別、入侵識別、工地的安全帽識別、車間流水線產品的品質缺陷AI檢測等,AI智能分析技術無處不在。在某些場景中,重點區域的人數統計與…

3:kotlin 邏輯控制(Control flow)

向其他語言一樣,kotlin也有循環和邏輯控制 條件判斷(Conditional expressions) kotlin使用if和when來進行條件判斷 如果糾結選擇if還是when,建議使用when,因為它更能提高程序的健壯性 if 普通寫法 fun main() {val…

Java集合拓展01

1、List,Set,Map三者的區別 List:一個有序(元素存入集合的順序和取出的順序一致)容器,元素可以重復,可以插入多個null元素,元素都有索引。常用的實現類有 ArrayList、LinkedList 和…

EMG肌肉信號處理合集 (一)

本文歸納了常見的肌肉信號預處理流程,方便EMG信號的后續分析。使用pyemgpipeline庫 來進行信號的處理。文中使用了 UC Irvine 數據庫的下肢數據。 目錄 1 使用wrappers 定義數據類,來進行后續的操作 2 肌電信號DC偏置去除 3 帶通濾波器處理 4 對肌電…