摘要:設(shè)計(jì)并用C#編程語言實(shí)現(xiàn)了一個面向初學(xué)者的開放通用數(shù)據(jù)挖掘系統(tǒng)。系統(tǒng)框架明晰、接口規(guī)范,便于系統(tǒng)的擴(kuò)展和完善,給從事數(shù)據(jù)挖掘研究和應(yīng)用的初學(xué)者提供了一個良好學(xué)習(xí)平臺。
關(guān)鍵詞:數(shù)據(jù)挖掘;C#;軟件系統(tǒng)設(shè)計(jì)
Design and Implementation of Data Mining System
LIN Xia, LI Cheng-yan, ZHANG Lu
(School of Information Science and Engineering, Ludong University, Yantai 264025, China)
Abstract: A universal data mining system is designed and implemented with C# for beginner. The system has a clear framework and provides regular programming interfaces so as to be easily expanded and improved, which offers a good learning platform for beginners who study and use data mining techniques.
Key words: data mining; C#; Software system design
隨著計(jì)算機(jī)的網(wǎng)絡(luò)化、數(shù)據(jù)庫技術(shù)的迅速發(fā)展以及數(shù)據(jù)庫管理系統(tǒng)的廣泛應(yīng)用,大量的數(shù)據(jù)被產(chǎn)生和存儲,激增的數(shù)據(jù)背后隱藏著許多重要的信息,因此人們希望能夠?qū)@些數(shù)據(jù)進(jìn)行多層次分析,以獲取隱藏其內(nèi)的知識。目前的數(shù)據(jù)庫系統(tǒng)可以高效地實(shí)現(xiàn)數(shù)據(jù)的錄入、查詢、統(tǒng)計(jì)等功能,但無法發(fā)現(xiàn)數(shù)據(jù)中存在的關(guān)系、規(guī)則或模式,無法根據(jù)現(xiàn)有的數(shù)據(jù)預(yù)測未來的發(fā)展趨勢。缺乏挖掘數(shù)據(jù)背后隱藏的知識的手段,導(dǎo)致了“數(shù)據(jù)豐富而信息貧乏[1]”的現(xiàn)象,為有效地處理此類問題,數(shù)據(jù)挖掘技術(shù)應(yīng)運(yùn)而生。
數(shù)據(jù)挖掘(Data Mining)是從大量的、不完全的、有噪聲的、模糊的、隨機(jī)的實(shí)際應(yīng)用數(shù)據(jù)中,提取隱含在其中的、人們事先不知道的、但潛在有用的信息和知識的過程,是知識發(fā)現(xiàn)(Knowledge Discovery in Database)的重要組成部分。同時數(shù)據(jù)挖掘也是一種新的商業(yè)信息處理技術(shù),其主要特點(diǎn)是對商業(yè)數(shù)據(jù)庫中的大量業(yè)務(wù)數(shù)據(jù)進(jìn)行抽取、轉(zhuǎn)換、分析和其它的模型化處理,然后從中提取輔助商業(yè)決策的關(guān)鍵性數(shù)據(jù)。數(shù)據(jù)挖掘的主要任務(wù)是關(guān)聯(lián)分析、聚類分析、分類、預(yù)測、時序模式和偏差分析等。
如今人們已開發(fā)出了多種數(shù)據(jù)挖掘系統(tǒng),國外的主要有IBM的Intelligent Miner、SAS的Enterprise Miner、SPSS的Clementine 和Oracle的Darwin等,此類軟件多為商業(yè)系統(tǒng)且價格較昂貴,國內(nèi)較有影響的相關(guān)平臺有中科院的MSMiner、哈工大與香港大學(xué)合作研發(fā)的AlphaMiner等,但沒有獲得廣泛的應(yīng)用且系統(tǒng)較為復(fù)雜,不利于初學(xué)者學(xué)習(xí)、使用和擴(kuò)展。
本文設(shè)計(jì)了一個開放的通用數(shù)據(jù)挖掘系統(tǒng),通過簡化的框架設(shè)計(jì)和編程接口,系統(tǒng)提供了對多種挖掘技術(shù)和算法的支持,其可視化的友好界面用以接收用戶請求和呈現(xiàn)挖掘結(jié)果,并且具有對同一功能的不同挖掘算法產(chǎn)生的結(jié)果和效率進(jìn)行比較分析的功能。
1 數(shù)據(jù)挖掘的基本過程
從數(shù)據(jù)源中發(fā)現(xiàn)有用的模式、規(guī)則等知識是一個系統(tǒng)的過程。首先必須根據(jù)相應(yīng)的挖掘目標(biāo)選定合適的數(shù)據(jù)源。然后清洗選定的數(shù)據(jù),把它們組織成適合挖掘的形式。最后運(yùn)用適當(dāng)?shù)臄?shù)據(jù)挖掘算法交互地發(fā)現(xiàn)有用的知識。并且這是一個反復(fù)的過程[2],利用反饋可以逐步精化挖掘結(jié)果,以獲取更有有價值的信息。
一般來說,數(shù)據(jù)挖掘是一個多步驟的處理過程,其常規(guī)的運(yùn)行流程[3]如圖1,主要由以下幾部分組成:
1) 數(shù)據(jù)庫、數(shù)據(jù)倉庫、萬維網(wǎng)或其它類型數(shù)據(jù)構(gòu)成知識發(fā)現(xiàn)的信息源。
2) 數(shù)據(jù)的選擇、規(guī)整和清洗主要對選取的數(shù)據(jù)進(jìn)行再加工。數(shù)據(jù)的選擇、規(guī)整主要是依據(jù)挖掘知識的類型從龐大的數(shù)據(jù)源中選擇適當(dāng)?shù)臄?shù)據(jù)并整它們成適合數(shù)據(jù)挖掘的標(biāo)準(zhǔn)樣式。數(shù)據(jù)清理則是是去除或修正數(shù)據(jù)中不一致、不完整的數(shù)據(jù),根據(jù)挖掘算法的要求離散化數(shù)據(jù)屬性值等。
3) 數(shù)據(jù)庫或數(shù)據(jù)倉庫服務(wù)器主要用來執(zhí)行數(shù)據(jù)挖掘引擎提交的相關(guān)運(yùn)算請求。
4) 數(shù)據(jù)挖掘引擎主要是一些數(shù)據(jù)挖掘算法的集合,用來完成分類、聚類、關(guān)聯(lián)規(guī)則、預(yù)測、奇異值分析等任務(wù)。
5) 知識庫主要由領(lǐng)域知識組成,用來指導(dǎo)數(shù)據(jù)挖掘引擎和模式評價過程以發(fā)現(xiàn)有價值的知識。
6) 模式評價模塊主要應(yīng)用興趣度閾值、用戶偏好或領(lǐng)域知識過濾挖掘到的無用知識,從而快速定位有用的知識。
7) 用戶界面模塊為用戶和數(shù)據(jù)挖掘系統(tǒng)交互平臺。用戶可以通過該模塊設(shè)定挖掘類型及相關(guān)屬性、提供個性化信息以優(yōu)化挖掘過程;數(shù)據(jù)挖掘系統(tǒng)通過該模塊提供可視化的運(yùn)行結(jié)果便于用戶更好地認(rèn)識理解挖掘到的知識。
2 軟件系統(tǒng)的框架
2.1 設(shè)計(jì)思路
現(xiàn)已開發(fā)出的很多數(shù)據(jù)挖掘軟件基本以提供豐富的功能、多樣的可視化方法和易操作性為設(shè)計(jì)目標(biāo),如此設(shè)計(jì)的軟件系統(tǒng)結(jié)構(gòu)較為龐大和復(fù)雜,這使得充分認(rèn)識和理解這樣系統(tǒng)會花費(fèi)大量的時間和精力。如果一開始就讓初學(xué)者學(xué)習(xí)使用此類系統(tǒng),勢必會存在一定的難度。鑒于此,為了設(shè)計(jì)一個面向數(shù)據(jù)挖掘入門者的系統(tǒng),我們簡化了數(shù)據(jù)挖掘的基本步驟,目的是為初學(xué)者提供一個理解、設(shè)計(jì)、應(yīng)用和比較數(shù)據(jù)挖掘相關(guān)算法的清晰簡單的通用平臺,并支持可視化的用戶友好界面以接受挖掘請求和呈現(xiàn)挖掘結(jié)果。
2.2 系統(tǒng)框架
基于3.1節(jié)的討論,在此系統(tǒng)中,我們把數(shù)據(jù)挖掘的常規(guī)流程分成數(shù)據(jù)輸入、數(shù)據(jù)挖掘算法和用戶界面三個模塊,各模塊通過相關(guān)接口實(shí)現(xiàn)數(shù)據(jù)和消息的傳輸。具體的系統(tǒng)框架如圖2所示。
數(shù)據(jù)輸入模塊完成從數(shù)據(jù)源中導(dǎo)入原始數(shù)據(jù),根據(jù)不同的數(shù)據(jù)源設(shè)計(jì)實(shí)現(xiàn)不同的數(shù)據(jù)輸入子模塊,且根據(jù)需要還可以添加數(shù)據(jù)的清洗、離散化等模塊;
數(shù)據(jù)挖掘算法模塊提供豐富的挖掘算法以完成多種知識發(fā)現(xiàn)任務(wù),它由規(guī)則化數(shù)據(jù)、算法接口、規(guī)則化結(jié)果三個子模塊組成。規(guī)則化數(shù)據(jù)子模塊主要完成簡化數(shù)據(jù)的形式以盡可能提高算法的效率,例如轉(zhuǎn)換字符串型數(shù)據(jù)為單個字符或數(shù)字等。算法接口子模塊為各類挖掘算法提供標(biāo)準(zhǔn)的對外接口,便于模塊之間的交互。規(guī)則化結(jié)果子模塊把算法產(chǎn)生的結(jié)果轉(zhuǎn)化為標(biāo)準(zhǔn)化數(shù)據(jù)以便于數(shù)據(jù)的展示,以盡可能統(tǒng)一的格式對各種可視化組件提供支持。
用戶界面模塊完成接受用戶挖掘請求和參數(shù)設(shè)置以及挖掘算法產(chǎn)生結(jié)果的可視化展示功能。比如分類規(guī)則挖掘中,規(guī)則的樹形展示、圖形展示、PMML展示等。
系統(tǒng)框架中的各個模塊都是松耦合的,因此各個模塊都可以根據(jù)需要進(jìn)行擴(kuò)展和裁剪模塊內(nèi)的子功能模塊。
3 軟件系統(tǒng)的實(shí)現(xiàn)
C#是一種簡單的、類型安全的、平臺無關(guān)的而且是面向?qū)ο蟮木幊陶Z言[4]。它由C和C++衍生而來,繼承了C和C++強(qiáng)大功能的同時去掉了一些的復(fù)雜特性(拋棄宏和模版,不允許多重繼承),且吸收了Java語言的一些精髓(通過拋出和捕捉異常對象來管理錯誤處理過程,底層框架自動進(jìn)行內(nèi)存垃圾回收等)。C#綜合了VB簡單的可視化操作和C++運(yùn)行的高效率,因此我們采用C#語言作為本系統(tǒng)的實(shí)現(xiàn)語言。
3.1 數(shù)據(jù)輸入
系統(tǒng)對多種文件格式提供了支持,包括Excel、Text、數(shù)據(jù)庫文件等,依據(jù)不同的文件格式調(diào)用相關(guān)的文件讀取模塊。由于Excel表格即包含較豐富的文檔信息又操作簡單方便,因此系統(tǒng)以Excel作為默認(rèn)的輸入數(shù)據(jù)文件格式。圖3示例說明了Excel表格數(shù)據(jù)讀入的具體實(shí)現(xiàn)。
string strConn = \"Provider=Microsoft.Jet.Oledb.4.0;Data Source= \" + myAbsPath + \"; Extended Properties=\\\"Excel 8.0;HDR=No;IMEX=1;\\\"\";
string strCom = \" SELECT * FROM [Sheet1$] \";
OleDbConnection myConnExcel = new OleDbConnection(strConn);
myConnExcel.Open();
OleDbDataAdapter myAdapter = new OleDbDataAdapter(strCom, myConnExcel);
DataSet myDataSet = new DataSet();
myAdapter.Fill(myDataSet, \"[Sheet1$]\");
myConnExcel.Close();
圖3Excel文件讀取實(shí)現(xiàn)
3.2 數(shù)據(jù)挖掘算法
挖掘算法模塊中,規(guī)則化數(shù)據(jù)子模塊可以根據(jù)具體情況添加不同的數(shù)據(jù)規(guī)整規(guī)則。系統(tǒng)采用整型數(shù)字代替字符串的規(guī)則以規(guī)則化數(shù)據(jù)。
算法接口中主要三個成員組成,如圖4所示,其中一個屬性,兩個方法。屬性Name_of_algorithm用來存儲算法的名字,便于標(biāo)示系統(tǒng)的運(yùn)行結(jié)果;方法Run_Algorithm()用來執(zhí)行算法的相關(guān)操作;方法Generate_Result()把算法產(chǎn)生結(jié)果發(fā)送到結(jié)果存儲器。加入系統(tǒng)的算法必須繼承算法接口,具體實(shí)現(xiàn)接口成員。如此,當(dāng)需要某個算法時,系統(tǒng)只需調(diào)用這兩個方法而不必關(guān)心算法的具體實(shí)現(xiàn)即可完成獲取相應(yīng)的知識的任務(wù),系統(tǒng)使用Name_of_algorithmsh屬性就可以獲取算法的名字或描述。系統(tǒng)分別提供了兩個屬性約簡算法和兩個規(guī)則獲取算法,其中兩個約簡算法分別出自文獻(xiàn)[4]文獻(xiàn)[5],兩個規(guī)則獲取算法則通過改進(jìn)文獻(xiàn)[4]和文獻(xiàn)[5]而來。
規(guī)則化結(jié)果子模塊把算法產(chǎn)生的結(jié)果轉(zhuǎn)化成一種中間數(shù)據(jù)形式,并且提前計(jì)算設(shè)置好必要的屬性值,以支持盡可能豐富的可視化組件。系統(tǒng)采用一個二進(jìn)制串表示一條規(guī)則,如果一條規(guī)則包含某個屬性則相應(yīng)的二進(jìn)制位為1否則為0。此種數(shù)據(jù)格式對系統(tǒng)內(nèi)嵌的一些可視化組件提供了統(tǒng)一的數(shù)據(jù)源。
3.3 用戶界面
用戶界面模塊提供一些可視化組件以形象地展示挖掘到的知識。系統(tǒng)為用戶提供了數(shù)據(jù)探查、屬性約簡、規(guī)則抽取和算法比較四個操作選項(xiàng),以完成約簡數(shù)據(jù)規(guī)模和獲取分類規(guī)則等任務(wù)。算法比較選項(xiàng)完成不同算法的比較分析功能,并提出相應(yīng)的改進(jìn)措施。
對于輸入數(shù)據(jù),系統(tǒng)以餅圖的形式展示了各屬性的屬性值分布狀況,以條形圖的形式顯示了各個條件屬性的屬性值在不同決策屬性值的上的分布形態(tài)。圖5、6是系統(tǒng)關(guān)于數(shù)據(jù)各屬性值分布的可視化輸出。
執(zhí)行完屬性約簡操作后,系統(tǒng)提供約簡后數(shù)據(jù)、約簡后/前屬性對比、約簡后屬性描述三種形式展示算法執(zhí)行結(jié)果,并提供了約簡后數(shù)據(jù)的Excel和Text文件格式導(dǎo)出功能。
規(guī)則抽取操作后的結(jié)果以規(guī)則、表、混淆矩陣、規(guī)則信息描述四種形式展示相關(guān)算法的運(yùn)行結(jié)果,并提供了IF-Then規(guī)則的Excel和Text文件格式導(dǎo)出功能。
算法比較選項(xiàng)執(zhí)行后,系統(tǒng)除了展示與所選算法相應(yīng)的結(jié)果形式外,還顯示算法間的比較信息,并依據(jù)比較信息提出相應(yīng)了的改進(jìn)建議。圖7顯示了規(guī)則算法比較后以IF-Then規(guī)則形式顯示的結(jié)果,圖8 則給出了對參與比較算法的信息匯總和改進(jìn)建議。
較分析與建議視圖
4 結(jié)論
該文設(shè)計(jì)并實(shí)現(xiàn)了一個面向初學(xué)者的數(shù)據(jù)挖掘開放系統(tǒng),闡述了具體的框架設(shè)計(jì)和內(nèi)部接口的定義和實(shí)現(xiàn),以便于功能的擴(kuò)展。系統(tǒng)提供了數(shù)據(jù)探查、屬性約簡、規(guī)則獲取和算法比較等功能以完成數(shù)據(jù)挖掘的主要步驟。增添多種的數(shù)據(jù)挖掘方法以提供一個更完善的系統(tǒng)將是我們下一步的工作重點(diǎn)。
參考文獻(xiàn):
[1] 毛國君.數(shù)據(jù)挖掘原理與算法[M].北京:清華大學(xué)出版,2007.
[2] 康塔尼克.數(shù)據(jù)挖掘:概念、模型、方法和算法[M].閃四清,譯.北京:清華大學(xué)出版,2003.
[3] Han Jiawei.數(shù)據(jù)挖掘:概念與技術(shù)(英文版)[M].2版.北京:機(jī)械工業(yè)出版社,2006.
[4] 呂偉臣,霍言,呂寶臣.Visual C# 2005入門與提高[M].北京:清華大學(xué)出版,2006.
[5] 梁吉業(yè),曲開社,徐宗本.信息系統(tǒng)的屬性約簡[J].系統(tǒng)工程理論與實(shí)踐,2001(12):76-80.
[6] 楊明,楊萍.基于廣義差別矩陣的核和屬性約簡算法[J].控制與決策,2008,23(9):1049-1054.