王海燕,崔文超,許佩迪,李 闖
(1.長(zhǎng)春大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長(zhǎng)春 130022;2.吉林大學(xué) 理論化學(xué)研究所,長(zhǎng)春 130021;3.吉林師范大學(xué) 計(jì)算機(jī)學(xué)院,吉林 四平 136000)
1 引言與預(yù)備知識(shí)
聚類分析(cluster analysis)[1]又稱群分析,是研究分類問(wèn)題的一種統(tǒng)計(jì)分析方法,是數(shù)據(jù)挖掘領(lǐng)域中重要的無(wú)監(jiān)督機(jī)器學(xué)習(xí)方法.聚類算法用途廣泛,如區(qū)分消費(fèi)群體、獲取消費(fèi)趨勢(shì)、輿情分析及幫助市政規(guī)劃等.常見(jiàn)的聚類算法有劃分法、層次法、密度法、圖論法、網(wǎng)格法和模型法等,其中劃分法應(yīng)用廣泛.K-means聚類是經(jīng)典的劃分聚類算法,具有方法簡(jiǎn)單、效率高的特點(diǎn).
隨著K-means算法的廣泛應(yīng)用,其缺陷逐漸凸顯[2]:1) 聚類中心數(shù)目K需要在聚類分析前確定,而這在實(shí)際應(yīng)用中很難估計(jì);2) 初始聚類中心需要人為選取,而不同的初始聚類可能導(dǎo)致不同的聚類結(jié)果.針對(duì)K-means算法的不足,目前已有許多改進(jìn)算法:成衛(wèi)青等[3]基于數(shù)據(jù)實(shí)例間的最大最小距離選取初始聚類中心,基于誤差平方和(SSE)選擇相對(duì)最稀疏的簇分裂,并根據(jù)SSE變化趨勢(shì)停止簇分裂從而自動(dòng)確定簇?cái)?shù);蔣麗等[4]提出了一種改進(jìn)的K-means聚類算法,先根據(jù)類簇指標(biāo)確定需要聚類的個(gè)數(shù)K,再采用基于密度的思想,實(shí)驗(yàn)證明改進(jìn)后的算法比原K-means聚類算法準(zhǔn)確性更高;針對(duì)第二項(xiàng)不足,周愛(ài)武等[5]通過(guò)基于評(píng)價(jià)距離確定初始聚類中心,優(yōu)化后的算法針對(duì)存在孤立點(diǎn)的數(shù)據(jù)效果明顯;Gu[6]采用減法聚類的算法確定初始聚類中心;鮑雷[7]針對(duì)傳統(tǒng)K-means聚類算法在數(shù)據(jù)聚類分析時(shí)受初始聚類中心的影響,提出了將遺傳算法嵌入到K-means算法中的混合式聚類算法.
K-means++是一種針對(duì)K-means算法第二類不足提出的優(yōu)化算法[8].在K-means算法中,初始中心是以隨機(jī)方式產(chǎn)生的,而K-means++算法則是在選取初始中心前對(duì)所有的數(shù)據(jù)進(jìn)行一次計(jì)算,使選擇的初始聚類中心間的相互距離盡可能遠(yuǎn),以減少計(jì)算的過(guò)程量.如果隨機(jī)產(chǎn)生的中心點(diǎn)過(guò)于相似,則會(huì)導(dǎo)致需要多次迭代才能將聚類劃分開(kāi).而如果選擇的初始中心點(diǎn)距離較大,則其屬于同一個(gè)聚簇的可能性極小,使得聚類在最開(kāi)始時(shí)就能很好地分開(kāi),因此計(jì)算量也會(huì)相應(yīng)減少.假設(shè)數(shù)據(jù)集合X={x1,x2,…,xn},聚類數(shù)目為K,D(x)表示從數(shù)據(jù)點(diǎn)到已選取的最近聚類中心的最短距離.K-means++算法工作流程如下:
步驟1) 從數(shù)據(jù)集合X中隨機(jī)取一點(diǎn)作為第一個(gè)聚類中心c1;
步驟2) 通過(guò)某種特定方式,在數(shù)據(jù)集合X中選取x作為下一個(gè)聚類中心ci;
步驟3) 重復(fù)步驟2),直到選取K個(gè)聚類中心;
步驟4) 繼續(xù)使用標(biāo)準(zhǔn)K-means算法進(jìn)行下一步計(jì)算.
在對(duì)K-means++算法研究的過(guò)程中,工作流程中步驟2)選取初始聚類中心點(diǎn)的特定方式有很多種,最經(jīng)典的主要有以下幾種:

2) 計(jì)算每個(gè)數(shù)據(jù)樣本的密度,并按密度大小排序,將密度最大的數(shù)據(jù)樣本點(diǎn)與其最接近樣本點(diǎn)的中點(diǎn)作為初始聚類中心,最后使用圓域進(jìn)行劃分[10];
3) 先選取一個(gè)種子點(diǎn),再計(jì)算檢測(cè)節(jié)點(diǎn)與最近種子節(jié)點(diǎn)間的距離D(xi,yi),求取sum(D(xi,yi)),再取可以落在sum(D(xi,yi))中的隨機(jī)值random,計(jì)算random-=D(xi,yi),直至random<0,此時(shí)的點(diǎn)即為新的簇中心點(diǎn),重復(fù)操作直到全部選取出K個(gè)種子節(jié)點(diǎn)[11].
但K-means++算法初始聚類中心選取方式計(jì)算出的誤差平方和值上下波動(dòng)明顯,會(huì)出現(xiàn)誤差平方和過(guò)大或過(guò)小的情形.為了改善該不足,本文提出一種局部概率引導(dǎo)的PK-means++算法,借助局部概率對(duì)選取初始聚類中心點(diǎn)的方式進(jìn)行改進(jìn).為說(shuō)明PK-means++算法的優(yōu)勢(shì),本文將改進(jìn)算法應(yīng)用在具有代表性的分散數(shù)據(jù)集上,在針對(duì)同一K值的情形下聚類時(shí),聚類后的誤差平方和較原K-means++算法更穩(wěn)定,保證了隨機(jī)實(shí)驗(yàn)取值的穩(wěn)定性.
2 K-means++算法優(yōu)化
2.1 問(wèn)題描述

圖1 西瓜數(shù)據(jù)集4.0誤差平方和曲線Fig.1 Curve of sum squared error on watermelon data set 4.0
在K-means++算法3種選取初始聚類中心方式中,最常見(jiàn)的是最后一種.但在使用第三種方式進(jìn)行多次聚類實(shí)驗(yàn)時(shí),誤差平方和間有明顯波動(dòng).即常用的K-means++算法得到的誤差平方和受實(shí)驗(yàn)隨機(jī)性的影響較大.
本文以西瓜數(shù)據(jù)集4.0為例進(jìn)行聚類.首先,將數(shù)據(jù)集的聚類個(gè)數(shù)設(shè)為4,然后使用常見(jiàn)的選取初始聚類中心的方式將西瓜數(shù)據(jù)集4.0的30個(gè)二維數(shù)據(jù)向量進(jìn)行K-means++聚類.圖1為西瓜數(shù)據(jù)集4.0誤差平方和曲線.由圖1可見(jiàn),誤差平方和的取值不穩(wěn)定,上下波動(dòng)較明顯,最大值超過(guò)0.45,最小值接近0.25,這種波動(dòng)會(huì)嚴(yán)重影響聚類的精度和速度.
2.2 PK-means++算法
為進(jìn)一步縮小誤差、減少工作量,本文針對(duì)K-means++算法在誤差平方和取值時(shí)遇到的問(wèn)題進(jìn)行優(yōu)化.主要思想是通過(guò)K-means++算法計(jì)算每個(gè)點(diǎn)所占的概率區(qū)間,距離越遠(yuǎn)的點(diǎn)在(0,1)中占有概率段比例越大,隨機(jī)取到該區(qū)間的概率就越大.
假設(shè)將輸入設(shè)置為:一個(gè)包含n個(gè)對(duì)象的集合D;聚類個(gè)數(shù)K;距離數(shù)組D[n],D[i]表示第i個(gè)點(diǎn)到最近簇中心的距離;概率數(shù)組P[n]; 概率點(diǎn)數(shù)組PK[n].
將輸出設(shè)置為K個(gè)聚類中心點(diǎn)集合.則PK-means++算法步驟如下:
1) 在數(shù)組中,隨機(jī)取一點(diǎn),作為第一個(gè)簇中心點(diǎn);
2) 迭代集合D中所有的點(diǎn),計(jì)算所有點(diǎn)到最近簇中心點(diǎn)的距離,并將數(shù)據(jù)記錄到距離數(shù)組中,記為D[1],D[2],…,D[n];
3) 將所有的D[i](i=1,2,…,n)疊加,得到距離和Sum(D[n]),并分別計(jì)算D[i]在Sum(D[n])中的概率,記為P[i];將概率P[i]通過(guò)概率段的形式在(0,1)中表示,將概率段的起始點(diǎn)存入數(shù)組PK中;
4) 取隨機(jī)數(shù)rP(0