劉 超 李茂寬 王偉華
摘 要:針對(duì)Visual Basic數(shù)值計(jì)算能力和圖像處理能力的不足,不利于系統(tǒng)開發(fā),介紹了模糊C均值法的原理及其基于VB和MatrixVB的實(shí)現(xiàn);該方法將Matlab的強(qiáng)大計(jì)算功能與VB的Windows用戶界面開發(fā)方面優(yōu)勢(shì)結(jié)合起來,充分發(fā)揮各自優(yōu)勢(shì),縮短了軟件的開發(fā)周期。軟件測(cè)試結(jié)果表明,該計(jì)算方法正確,軟件界面友好,計(jì)算速度快,系統(tǒng)資源消耗少,操作簡(jiǎn)便易行,能滿足數(shù)據(jù)分類的要求。
關(guān)鍵詞:Visual Basic;MatrixVB;模糊C均值;模式識(shí)別
中圖分類號(hào):TQ15.9;TP311 文獻(xiàn)標(biāo)識(shí)碼:B 文章編號(hào):1004 373X(2009)02 102 02
Realization of Fuzzy C-Means Based on Visual Basic and MatrixVB
LIU Chao1,LI Maokuan2,WANG Weihua3
(1.PLA General Staff Meteorological and Hydrological Department,Beijing,100081,China;
2.Naval Aeronautical and Astronautical University,Yantai,264001,China;3.Unit 61828 of PLA,Kashi,844200,China)
Abstract:According to the situation that Visual Basic is insufficient in numerical computation,image processing ability and is weak in algorithm development.The theory of fuzzy C-means and the realization of fuzzy C-means by incorporating VBand MatrixVB are introduced.The incorporated advances of Matlab′s powerful calculation function and Visual Basic′s friendly graphic user interface shorten the period of software development by taking the advantages of both.It has been demonstrated by the instance that the calculating procedure is accurate.The software interface is friendly.Beside this,resource expenditure of computer is low and calculating speed is quick,the software is convenient to use.It can fulfill the data clustering problem well.
Keywords:Visual Basic;MatrixVB;fuzzy C-means;pattern recognition
0 引 言
聚類是將一組給定的未知類標(biāo)號(hào)的樣本分成內(nèi)在的多個(gè)類別,使得同一類中的樣本具有較高的相似度,而不同類中的樣本差別大。聚類分析的目的是揭示和刻畫數(shù)據(jù)的內(nèi)在結(jié)構(gòu),其內(nèi)容涉及統(tǒng)計(jì)學(xué)、生物學(xué)、以及機(jī)器學(xué)習(xí)等研究領(lǐng)域,并在模式識(shí)別、數(shù)據(jù)分析和挖掘、圖像處理等領(lǐng)域獲得了廣泛的應(yīng)用[1]。模糊C均值(Fuzzy C-Means,F(xiàn)CM)算法是一種基于劃分的聚類算法,它的思想就是使得被劃分到同一類的對(duì)象之間相似度最大,而不同類之間的相似度最小。模糊C均值算法是普通C均值算法的改進(jìn),普通C均值算法對(duì)于數(shù)據(jù)的劃分是硬性的,而FCM則是一種柔性的模糊劃分。
目前大多數(shù)針對(duì)模式識(shí)別的軟件都是基于Matlab,模糊C均值就已經(jīng)集成在Matlab語言中。Matlab是集數(shù)值分析、矩陣運(yùn)算、信號(hào)處理和圖形顯示于一體的高性能數(shù)學(xué)軟件,但Matlab也存在其自身的局限性:一般基于Matlab的應(yīng)用程序不能脫離Matlab集成環(huán)境工作,而且編寫界面的功能相對(duì)較弱,Matlab本身是一種解釋性的語言,運(yùn)行速度非常慢,大大降低了程序的效率。因此,將Matlab與VB有效地集成在一起,實(shí)現(xiàn)應(yīng)用系統(tǒng)的無縫集成,對(duì)于有效縮短開發(fā)周期,優(yōu)化系統(tǒng)性能是十分有意義的。介紹用VB與MatrixVB的混編來實(shí)現(xiàn)模糊C均值聚類方法。
1 關(guān)于MatrixVB 的簡(jiǎn)介
MatrixVB[2] 是Mathworks 公司針對(duì)VB 提供的一個(gè)Matlab 組件庫(kù)(Component Object Model Library) ,它提供了600 多個(gè)函數(shù),包括基本的數(shù)學(xué)運(yùn)算和功能強(qiáng)大的信號(hào)處理、線性代數(shù)、串運(yùn)算及圖形圖像處理功能等,用來彌補(bǔ)VB 內(nèi)建函數(shù)的不足,主要是針對(duì)數(shù)學(xué)函數(shù)而言,它具有Matlab繪圖的強(qiáng)大功能,讓VB 能很輕易地畫出一些數(shù)學(xué)函數(shù)圖形,為VB 提供了強(qiáng)大的功能擴(kuò)展,讓程序員更容易地去開發(fā)計(jì)算應(yīng)用方面的程序代碼。在VB中使用該數(shù)學(xué)工具包可以避免重復(fù)性勞動(dòng),可以減少開發(fā)人員實(shí)現(xiàn)算法和界面設(shè)計(jì)方面的困難。
2 模糊C均值原理及其實(shí)現(xiàn)
模糊C均值(FCM),是用隸屬度確定每個(gè)數(shù)據(jù)點(diǎn)屬于某個(gè)聚類的程度的一種聚類算法。由Bezdek[3]提出了該算法,作為早期硬C均值聚類(HCM)方法的一種改進(jìn)。
FCM把n個(gè)向量x璱(i=1,2,…,n)分為c個(gè)模糊組,并求每組的聚類中心,使得非相似性指標(biāo)的價(jià)值函數(shù)達(dá)到最小。FCM與HCM的主要區(qū)別在于FCM用模糊劃分,使得每個(gè)給定數(shù)據(jù)點(diǎn)用值在[0,1]間的隸屬度來確定其屬于各個(gè)組的程度。與引入模糊劃分相適應(yīng),隸屬矩陣U允許有取值在[0,1]間的元素。不過,加上歸一化規(guī)定,一個(gè)數(shù)據(jù)集的隸屬度和總等于1:
∑ci=1u璱j=1,衘=1,2,…,n(1)
則FCM的價(jià)值函數(shù)(或目標(biāo)函數(shù))就是一般化形式:
J(U,c1,c2,…,c璫)=∑ci=1J璱=∑ci=1∑njum璱jd2璱j(2)
式中,c璱為模糊組i的聚類中心;d璱j=||c璱-x璲||為第i個(gè)聚類中心與第j個(gè)數(shù)據(jù)點(diǎn)間的歐幾里德距離;且m是一個(gè)加權(quán)指數(shù)。構(gòu)造如下新的目標(biāo)函數(shù),可求得使式(2)達(dá)到最小值的必要條件:
(U,c1 ,c2,…,c璫 ,λ1,λ2,…,λ璶 )=
J(U,c1,c2,…,c璫 ) + ∑nj = 1λ璲 (∑ci = 1u璱j -1)=
∑ci = 1∑njum璱jd2璱j + ∑nj = 1(∑ci = 1u璱j -1)(3)
式中,λ璲,j=1,2,…,n是式(1)的n個(gè)約束式拉格朗日乘子。對(duì)所有輸入?yún)⒘壳髮?dǎo),使式(2)達(dá)到最小的必要條件為:
c璱=∑nj=1um璱jx璲/∑nj=1um璱j(4)
和:
u璱j=1/∑ck=1d璱jd璳kj2/(m-1)(5)
根據(jù)上述兩個(gè)必要條件,模糊C均值聚類算法是一個(gè)簡(jiǎn)單的迭代過程。在批處理方式運(yùn)行時(shí),F(xiàn)CM用下列步驟確定聚類中心c璱和隸屬矩陣U :
步驟1 用值在0,1間的隨機(jī)數(shù)初始化隸屬矩陣U,使其滿足式(1)中的約束條件。
步驟 2 用式(4)計(jì)算c個(gè)聚類中心c璱,i=1,2,…,c。
步驟3 用式(2)計(jì)算價(jià)值函數(shù)。如果它小于某個(gè)確定的閾值,或它相對(duì)上次價(jià)值函數(shù)值的改變量小于某個(gè)閾值,則算法停止。
步驟4 用式(5)計(jì)算新的U矩陣。返回步驟2。
通過上面的討論,不難看出FCM算法需要兩個(gè)參數(shù),一個(gè)是聚類數(shù)目C;另一個(gè)是參數(shù)m。以下利用VB和MatrixVB實(shí)現(xiàn)上述算法。首先讀入待分類的數(shù)據(jù),數(shù)據(jù)分布如圖1所示,是200組二維數(shù)據(jù)。設(shè)置參數(shù):將數(shù)據(jù)分為3類,初始化隸屬度矩陣U,m=2。程序如下所示:
Cluster_N = 3
data_N = 200
Data = vbload("c:\data.mat")‘讀入數(shù)據(jù)并顯示
ax = vbaxes(Form1.hWnd)
aa = Data(linspace(1,200,200),1)
bb = Data(linspace(1,200,200),2)
Call scatter(aa,bb,".")
U = randM(Cluster_N,data_N) ‘初始化隸屬矩陣
tmp = Sum(U)
tmp = mtimes(ones(Cluster_N,1),tmp)
U = rdivide(U,tmp)
dist = zeros(3,200) ‘初始距離矩陣
算法的輸出是C個(gè)聚類中心點(diǎn)向量和大小為C×N的一個(gè)模糊劃分矩陣,這個(gè)矩陣表示的是每個(gè)樣本點(diǎn)屬于每個(gè)類的隸屬度。根據(jù)這個(gè)劃分矩陣,按照模糊集合中的最大隸屬原則就能夠確定每個(gè)樣本點(diǎn)歸為哪個(gè)類。聚類中心表示的是每個(gè)類的平均特征,可以認(rèn)為是這個(gè)類的代表點(diǎn)。以下是迭代求取聚類中心和隸屬度矩陣的程序:
mf = power(U,2)
center = rdivide(mtimes(mf,Data),
transpose(mtimes(ones(2,1),Sum(transpose(mf)))))
For j = 1 To 200
For i = 1 To 3
a1 = center(i,linspace(1,2,2))
a2 = Data(j,linspace(1,2,2))
dist(i,j) = Sum(power(minus(a1,a2),2))
Next i
Next j
obj_fuc = Sum(Sum(times(power(dist,2),mf)))
tmp = power(dist,-2)
U = rdivide(tmp,mtimes(ones(3,1),Sum(tmp)))
圖2是對(duì)未知類別的待分類數(shù)據(jù)進(jìn)行模糊C均值聚類的最終結(jié)果,不同的圖形表示不同的類別。
圖1 待分類數(shù)據(jù)
圖2 分類后數(shù)據(jù)
3 結(jié) 語
在此介紹VB與MatrixVB混合編程的模糊C均值方法實(shí)現(xiàn),程序在 Windows XPProfessional 版上用MatrixVB4.5和Visual Basic6.0中文版實(shí)現(xiàn),具有效率高,占用系統(tǒng)資源少等優(yōu)點(diǎn)。文中給出了部分基本代碼,可以根據(jù)自己的需要進(jìn)行擴(kuò)充,并應(yīng)用于分類處理。這種編程方式既節(jié)省了時(shí)間,又提高了軟件的性能,對(duì)于優(yōu)化系統(tǒng),縮短軟件開發(fā)周期很有意義。
參考文獻(xiàn)
[1]邊肇祺,張學(xué)工.模式識(shí)別[M].2版.北京:清華大學(xué)出版社,2000.
[2]MathWorks.Inc.MatrixVB User′s Guide[Z].2000.
[3]Bezdek J C.Pattern Recognition with Objective Function Algorithms [M].New York:Plenum Press,1981.
[4]王躍強(qiáng),王紀(jì)龍,王云才.VB 程序中實(shí)現(xiàn)調(diào)用Matlab 的方法[J].計(jì)算機(jī)應(yīng)用,2002,2(21):95-96.
[5]何強(qiáng),何英.Matlab 擴(kuò)展編程[M].北京:清華大學(xué)出版社,2002.
[6]劉炳文.精通Visual Basic6.0中文版[M].北京:電子工業(yè)出版社,1999.
[7]黃錫泉.VB與Matlab 無縫接口編程[J].微計(jì)算機(jī)應(yīng)用,2005,26(2):238-239.
[8]董樑,李光軍,賀仲雄.復(fù)雜系統(tǒng)的集對(duì)模式識(shí)別方法.現(xiàn)代電子技術(shù),2007(2):68-70.
作者簡(jiǎn)介 劉 超 男,1981年出生,山東青島人,碩士研究生。研究方向?yàn)橛?jì)算機(jī)仿真。
李茂寬 男,1979年出生,山東即墨人,博士研究生。研究方向?yàn)閳D像處理與模式識(shí)別。
王偉華 男,1974年出生,河南人。研究方向?yàn)橛?jì)算機(jī)仿真。