慈溪白云小學(xué)班級(jí)網(wǎng)站建設(shè)成都網(wǎng)站建設(shè)
原理說(shuō)明
Kmeans是一種常見(jiàn)的聚類(lèi)算法,用于將相似的數(shù)據(jù)點(diǎn)歸類(lèi)到不同的群組中。Kmeans的原理如下:
初始化:Kmeans算法首先需要初始化一個(gè)用戶指定數(shù)量的聚類(lèi)中心點(diǎn),通常是隨機(jī)選取K個(gè)數(shù)據(jù)點(diǎn)作為聚類(lèi)中心點(diǎn)。
分配:對(duì)于每個(gè)數(shù)據(jù)點(diǎn),計(jì)算其到每個(gè)聚類(lèi)中心點(diǎn)的距離,并將其分配到距離最近的聚類(lèi)中心點(diǎn)所代表的聚類(lèi)中。
更新:在所有數(shù)據(jù)點(diǎn)都被分配到對(duì)應(yīng)的聚類(lèi)中之后,重新計(jì)算每個(gè)聚類(lèi)中心點(diǎn)的位置,即將每個(gè)聚類(lèi)中的所有數(shù)據(jù)點(diǎn)的坐標(biāo)平均值作為新的聚類(lèi)中心點(diǎn)位置。
重復(fù):重復(fù)步驟2和3,直到所有聚類(lèi)中心點(diǎn)的位置不再改變,或達(dá)到預(yù)設(shè)的最大迭代次數(shù)。
輸出:輸出聚類(lèi)結(jié)果,即每個(gè)數(shù)據(jù)點(diǎn)所屬的聚類(lèi)編號(hào)。
Kmeans算法的核心是通過(guò)最小化每個(gè)數(shù)據(jù)點(diǎn)到其所屬聚類(lèi)中心點(diǎn)的距離平方和來(lái)確定最優(yōu)的聚類(lèi)中心點(diǎn)位置。在實(shí)際應(yīng)用中,Kmeans算法通常需要多次運(yùn)行并比較結(jié)果,以獲得最優(yōu)的聚類(lèi)結(jié)果。
原理推導(dǎo)
隨機(jī)選擇K個(gè)中心點(diǎn)作為簇的初始中心;
將每個(gè)數(shù)據(jù)點(diǎn)分配到離它最近的簇中;
計(jì)算每個(gè)簇的中心點(diǎn),更新簇中心;
重復(fù)步驟2和3,直到簇中心不再發(fā)生變化或達(dá)到最大迭代次數(shù)。
下面對(duì)K-means算法進(jìn)行數(shù)學(xué)推導(dǎo):
設(shè)數(shù)據(jù)集為X={x1, x2, …, xn},其中每個(gè)數(shù)據(jù)點(diǎn)xi是一個(gè)d維向量。假設(shè)將數(shù)據(jù)點(diǎn)分為K個(gè)簇,第k個(gè)簇的中心點(diǎn)為μk,則第i個(gè)數(shù)據(jù)點(diǎn)與第k個(gè)簇的中心點(diǎn)的距離為:
dist(xi, μk) = ||xi - μk||2
其中||.||2表示歐幾里得范數(shù)。
K-means算法的目標(biāo)是最小化所有數(shù)據(jù)點(diǎn)與其所屬簇中心點(diǎn)的距離之和,即:
J(μ1, μ2, …, μK) = ∑i=1 to n min_k{dist(xi, μk)}^2
其中min_k{.}表示求解所有K個(gè)簇中與xi距離最近的中心點(diǎn)μk,并將xi分配到第k個(gè)簇中。
為了求解上述目標(biāo)函數(shù)J,需要對(duì)μ1, μ2, …, μK進(jìn)行優(yōu)化。具體而言,需要先固定簇分配,對(duì)簇中心進(jìn)行優(yōu)化,然后再固定簇中心,對(duì)簇分配進(jìn)行優(yōu)化。
對(duì)于固定簇分配,目標(biāo)函數(shù)J是關(guān)于μ1, μ2, …, μK的凸函數(shù),因此可以使用梯度下降法求解其最小值。具體而言,需要將目標(biāo)函數(shù)對(duì)μk求導(dǎo),即:
?J(μ1, μ2, …, μK) / ?μk = ∑i=1 to n 2xi(μk - xi)^T*[μk - xi = 0
其中^T表示向量的轉(zhuǎn)置,即矩陣的行列互換。令上述導(dǎo)數(shù)等于0,得到μk的最優(yōu)解:
μk = 1/Nk * ∑i∈Ck xi
其中Ck表示第k個(gè)簇中的數(shù)據(jù)點(diǎn),Nk表示第k個(gè)簇中的數(shù)據(jù)點(diǎn)個(gè)數(shù)。
對(duì)于固定簇中心,目標(biāo)函數(shù)J是關(guān)于數(shù)據(jù)點(diǎn)分配的離散優(yōu)化問(wèn)題,可以使用交替最小化法(alternating optimization)求解。具體而言,可以先隨機(jī)分配數(shù)據(jù)點(diǎn)到簇中
具體而言,可以先隨機(jī)分配數(shù)據(jù)點(diǎn)到簇中,然后依次更新每個(gè)簇的中心點(diǎn),直到簇中心點(diǎn)不再發(fā)生變化或達(dá)到最大迭代次數(shù)。更新簇分配時(shí),可以根據(jù)當(dāng)前簇中心點(diǎn),將每個(gè)數(shù)據(jù)點(diǎn)分配到距離其最近的簇中。
具體而言,假設(shè)第i個(gè)數(shù)據(jù)點(diǎn)當(dāng)前被分配到第k個(gè)簇中,其所屬簇中心為μk,則將該數(shù)據(jù)點(diǎn)分配到其他簇中的中心點(diǎn)為μl時(shí),目標(biāo)函數(shù)的變化量為:
ΔJ = ||xi - μl||2 - ||xi - μk||2
將ΔJ展開(kāi),得到:
ΔJ = ||xi||2 + ||μl||2 - 2xi^Tμl - ||xi||2 - ||μk||2 + 2xi^Tμk
ΔJ = 2(xi^Tμk - xi^Tμl + μl^Tμl - μk^Tμk)
由于將xi分配到距離其最近的簇中時(shí),ΔJ應(yīng)當(dāng)小于等于0,因此可以通過(guò)比較ΔJ的大小,將xi分配到距離其最近的簇中。
綜上所述,K-means算法的具體步驟如下:
隨機(jī)選擇K個(gè)中心點(diǎn)作為簇的初始中心;
將每個(gè)數(shù)據(jù)點(diǎn)分配到離它最近的簇中;
計(jì)算每個(gè)簇的中心點(diǎn),更新簇中心;
重復(fù)步驟2和3,直到簇中心不再發(fā)生變化或達(dá)到最大迭代次數(shù)。
其中,簇分配可以使用上述交替最小化法求解,簇中心可以使用梯度下降法求解。最終的目標(biāo)函數(shù)是所有數(shù)據(jù)點(diǎn)與其所屬簇中心點(diǎn)的距離之和的平方,即:
J(μ1, μ2, …, μK) = ∑i=1 to n min_k{dist(xi, μk)}^2
其中dist(xi, μk) = ||xi - μk||2表示數(shù)據(jù)點(diǎn)xi與簇中心點(diǎn)μk之間的距離。