
Kmeans算法,又叫做K均值聚類(lèi)算法,可以說(shuō)是無(wú)監(jiān)督聚類(lèi)算法中最具代表性,最經(jīng)典的聚類(lèi)算法了,這一算法的主要作用是將相似的樣本自動(dòng)歸到一個(gè)類(lèi)別中。小編特意整理了這一經(jīng)典聚類(lèi)算法的基本原理供大家參考,希望對(duì)大家有所幫助。
一、首先來(lái)看一下Kmeans算法的效果
#通過(guò)簡(jiǎn)單的例子來(lái)直接查看K均值聚類(lèi)的效果 from sklearn.cluster import KMeans import matplotlib.pyplot as plt import numpy as np %matplotlib inline #聚類(lèi)前 X = np.random.rand(100,2) plt.scatter(X[:,0],X[:,1], marker='o')
#聚類(lèi)后 kmeans = KMeans(n_clusters=4).fit(X) label_pred = kmeans.labels_ plt.scatter(X[:,0],X[:,1],c=label_pred) plt.show()
二、Kmeans算法基本原理
假定給定數(shù)據(jù)樣本X,包含了n個(gè)對(duì)象
其中每個(gè)對(duì)象都具有m個(gè)維度的屬性。Kmeans算法的目標(biāo)是將n個(gè)對(duì)象依據(jù)對(duì)象間的相似性聚集到指定的k個(gè)類(lèi)簇中,每個(gè)對(duì)象屬于且僅屬于一個(gè)其到類(lèi)簇中心距離最小的類(lèi)簇中。對(duì)于Kmeans,首先需要初始化k個(gè)聚類(lèi)中心{C1.C2.C3....,Ck},1<k≤n,然后通過(guò)計(jì)算每一個(gè)對(duì)象到每一個(gè)聚類(lèi)中心的歐式距離,如下式所示
依次比較每一個(gè)對(duì)象到每一個(gè)聚類(lèi)中心的距離,將對(duì)象分配到距離最近的聚類(lèi)中心的類(lèi)簇中,得到k個(gè)類(lèi)簇{S1.S2.S3....,Sk}
Kmeans算法用中心定義了類(lèi)簇的原型,類(lèi)簇中心就是類(lèi)簇內(nèi)所有對(duì)象在各個(gè)維度的均值,其計(jì)算公式如下
代碼實(shí)現(xiàn)
Kmeans算法 % 輸入: % data 輸入的不帶分類(lèi)標(biāo)號(hào)的數(shù)據(jù) % K 數(shù)據(jù)一共分多少類(lèi) % iniCentriods 自行指定初始聚類(lèi)中心 % iterations 迭代次數(shù) % 輸出: % Idx 返回的分類(lèi)標(biāo)號(hào) % centroids 每一類(lèi)的中心 % Distance 類(lèi)內(nèi)總距離 function [Idx,centroids,Distance]=KMeans(data,K,iniCentriods,iterations) [numOfData,numOfAttr]=size(data); % numOfData是數(shù)據(jù)個(gè)數(shù),numOfAttr是數(shù)據(jù)維數(shù) centroids=iniCentriods; %% 迭代 for iter=1:iterations pre_centroids=centroids;% 上一次求得的中心位置 tags=zeros(numOfData,K); %% 尋找最近中心,更新中心 for i=1:numOfData D=zeros(1,K);% 每個(gè)數(shù)據(jù)點(diǎn)與每個(gè)聚類(lèi)中心的標(biāo)準(zhǔn)差 Dist=D; % 計(jì)算每個(gè)點(diǎn)到每個(gè)中心點(diǎn)的標(biāo)準(zhǔn)差 for j=1:K Dist(j)=norm(data(i,:)-centroids(j,:),2); end [minDistance,index]=min(Dist);% 尋找距離最小的類(lèi)別索引 tags(i,index)=1;% 標(biāo)記最小距離所處的位置(類(lèi)別) end %% 取均值更新聚類(lèi)中心點(diǎn) for i=1:K if sum(tags(:,i))~=0 % 未出現(xiàn)空類(lèi),計(jì)算均值作為下一聚類(lèi)中心 for j=1:numOfAttr centroids(i,j)=sum(tags(:,i).*data(:,j))/sum(tags(:,i)); end else % 如果出現(xiàn)空類(lèi),從數(shù)據(jù)集中隨機(jī)選中一個(gè)點(diǎn)作為中心 randidx = randperm(size(data, 1)); centroids(i,:) = data(randidx(1),:); tags(randidx,:)=0; tags(randidx,i)=1; end end if sum(norm(pre_centroids-centroids,2))<0.001 % 不斷迭代直到位置不再變化 break; end end %% 計(jì)算輸出結(jié)果 Distance=zeros(numOfData,1); Idx=zeros(numOfData,1); for i=1:numOfData D=zeros(1,K);% 每個(gè)數(shù)據(jù)點(diǎn)與每個(gè)聚類(lèi)中心的標(biāo)準(zhǔn)差 Dist=D; % 計(jì)算每個(gè)點(diǎn)到每個(gè)中心點(diǎn)的標(biāo)準(zhǔn)差 for j=1:K Dist(j)=norm(data(i,:)-centroids(j,:),2); end [distance,idx]=min(Dist);% 尋找距離最小的類(lèi)別索引 distance=Dist(idx); Distance(i)=distance; Idx(i)=idx; end Distance=sum(Distance,1);% 計(jì)算類(lèi)內(nèi)總距離 end
二、Kmeans的優(yōu)化算法
1.二分K-means算法
二分KMeans特點(diǎn):解決K-Means算法對(duì)初始簇心比較敏感的問(wèn)題,二分K-Means算法是一種弱化初 始質(zhì)心的一種算法
二分Kmeans 具體思路步驟:
(1) 將所有樣本數(shù)據(jù)放回到一個(gè)蔟隊(duì)列中
(2) 隊(duì)列中的一個(gè)蔟進(jìn)行 k = 2 的KMeans算法聚類(lèi)形成兩個(gè)子蔟,將他們放回到蔟隊(duì)列中
(3)重復(fù)這個(gè)步驟,直到中止條件達(dá)到(主要是聚簇?cái)?shù)量)
選取隊(duì)列蔟二劃分的條件:
(1)選取蔟距離平方和SSE 最大的蔟進(jìn)行二劃分(優(yōu)先)。
(2)選取樣本較多的蔟進(jìn)行二劃分。
2.Kmeans++算法
K-Means++算法就是對(duì)K-Means隨機(jī)初始化質(zhì)心的方法的優(yōu)化。K-Means++的對(duì)于初始化質(zhì)心的優(yōu)化策略也很簡(jiǎn)單,如下:
(1)從輸入的數(shù)據(jù)點(diǎn)集合中隨機(jī)選擇一個(gè)點(diǎn)作為第一個(gè)聚類(lèi)中心μ1
(2)
(3)選擇一個(gè)新的數(shù)據(jù)點(diǎn)作為新的聚類(lèi)中心,選擇的原則是:D(x)較大的點(diǎn),被選取作為聚類(lèi)中心的概率較大
(4)重復(fù)2和3直到選擇出k個(gè)聚類(lèi)質(zhì)心
(5)利用這k個(gè)質(zhì)心來(lái)作為初始化質(zhì)心去運(yùn)行標(biāo)準(zhǔn)的K-Means算法
簡(jiǎn)單的來(lái)說(shuō), Kmeans++ 就是選擇離已選中心點(diǎn)最遠(yuǎn)的點(diǎn)。
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10