汪峰坤,張婷婷
(安徽機(jī)電職業(yè)技術(shù)學(xué)院,安徽 蕪湖 241000)
?
通用數(shù)據(jù)挖掘系統(tǒng)的結(jié)構(gòu)與設(shè)計(jì)
汪峰坤,張婷婷
(安徽機(jī)電職業(yè)技術(shù)學(xué)院,安徽 蕪湖 241000)
數(shù)據(jù)挖掘是當(dāng)前應(yīng)用系統(tǒng)有效的功能擴(kuò)展,通過數(shù)據(jù)挖掘模塊可以提升應(yīng)用系統(tǒng)的價(jià)值,發(fā)現(xiàn)數(shù)據(jù)的深層次知識(shí)。但是數(shù)據(jù)挖掘算法的多樣性,以及開發(fā)的高難度,限制了數(shù)據(jù)挖掘功能的廣泛應(yīng)用。為了提高數(shù)據(jù)挖掘模塊的通用性及擴(kuò)展性,減少與特定領(lǐng)域的耦合性,設(shè)計(jì)出一個(gè)結(jié)構(gòu)松散、擴(kuò)展性強(qiáng)、領(lǐng)域無關(guān)、支持動(dòng)態(tài)配置的通用數(shù)據(jù)挖掘系統(tǒng)是非常必要的。利用高級(jí)語言支持的反射功能,設(shè)計(jì)了簡(jiǎn)單的插件模型和數(shù)據(jù)挖掘過程中各功能模塊的統(tǒng)一接口,通過系統(tǒng)內(nèi)核動(dòng)態(tài)加載并運(yùn)行插件,有效地增加了數(shù)據(jù)挖掘模塊的通用性和擴(kuò)展性,具有一定的實(shí)用價(jià)值。
數(shù)據(jù)挖掘;框架;低耦合;反射;插件
隨著網(wǎng)絡(luò)的快速發(fā)展以及信息技術(shù)的深入應(yīng)用,人們產(chǎn)生、收集和存儲(chǔ)數(shù)據(jù)的能力大幅增加。對(duì)這些具有海量、結(jié)構(gòu)非良好、模糊、隨機(jī)等特征的數(shù)據(jù)進(jìn)行有效的處理分析,提取出隱藏在數(shù)據(jù)內(nèi)部的潛在知識(shí),是數(shù)據(jù)挖掘技術(shù)所研究的目標(biāo)。數(shù)據(jù)挖掘是一門跨學(xué)科、跨領(lǐng)域的研究課題。在數(shù)據(jù)挖掘技術(shù)中,融合了統(tǒng)計(jì)學(xué)、概率論、面向?qū)ο蠹夹g(shù)、數(shù)據(jù)庫技術(shù)、機(jī)器學(xué)習(xí)、人工智能、信息檢索、數(shù)據(jù)可視化以及知識(shí)工程等研究領(lǐng)域。[1][2][3]
當(dāng)前大部分的網(wǎng)絡(luò)應(yīng)用系統(tǒng)中,為了綜合有效地利用已有數(shù)據(jù),都會(huì)開發(fā)相應(yīng)的數(shù)據(jù)挖掘模塊。商用的數(shù)據(jù)挖掘系統(tǒng)一般都是閉源收費(fèi),如:IBM 公司的 Intelligent Miner、SGI 公司的 SetMiner、SPSS 公司的 Clementine、 SAS 公 司 的 Enterprise Miner等。一些開源的數(shù)據(jù)挖掘系統(tǒng)如Weka等,具有功能較弱,與應(yīng)用系統(tǒng)集成困難等缺點(diǎn)。
本文介紹了一種適用于數(shù)據(jù)挖掘系統(tǒng)的軟件體系結(jié)構(gòu),此種體系結(jié)構(gòu)具有多數(shù)據(jù)源支持、挖掘算法增加方便、參數(shù)配置簡(jiǎn)單、挖掘算法之間耦合性低、平臺(tái)無關(guān)性等優(yōu)點(diǎn)。
數(shù)據(jù)挖掘算法主要分成:關(guān)聯(lián)規(guī)則挖掘算法、分類挖掘算法、聚類挖掘算法三大類型。對(duì)于每種類型又存在著多種基本算法,以及增強(qiáng)算法。關(guān)聯(lián)規(guī)則挖掘算法常見的有:Apriori算法簇、FP_Growth算法簇、Two-Phase算法簇等。分類挖掘算法常見的有:決策樹、 Bayes分類、神經(jīng)網(wǎng)絡(luò)、支持向量機(jī)等。聚類挖掘算法常見的有:基于劃分聚類算法簇、基于層次聚類算法簇、基于密度聚類算法簇等。[4][5][6][7]
通過對(duì)上述各類型挖掘算法進(jìn)行分析,可發(fā)現(xiàn)數(shù)據(jù)挖掘挖掘算法有以下幾個(gè)特點(diǎn)。
(1) 各挖掘算法對(duì)數(shù)據(jù)特征要求不一樣。例如:關(guān)聯(lián)規(guī)則挖掘算法只需要指定數(shù)據(jù)所在列,而分類挖掘算法既要指定數(shù)據(jù)所在列,又要指定分類結(jié)果列。
(2) 各挖掘算法參數(shù)配置不同。例如:對(duì)于基于劃分聚類挖掘算法要設(shè)置類的個(gè)數(shù),對(duì)于基于密度聚類挖掘算法簇要指定密度大小。
(3) 各挖掘算法運(yùn)算后輸出結(jié)果的格式是不同的。例如:聚類挖掘算法輸出結(jié)果是多個(gè)集合,每個(gè)集合就是求解的一個(gè)簇。關(guān)聯(lián)規(guī)則挖掘算法求解的結(jié)果是一組蘊(yùn)含式和相應(yīng)的概率。
由上可以得出數(shù)據(jù)挖掘挖掘算法在輸入、參數(shù)配置和輸出結(jié)果上差距很大,即使在同種類型的挖掘算法簇中,不同挖掘算法的參數(shù)個(gè)數(shù)和類型也有區(qū)別。
開發(fā)通用的數(shù)據(jù)挖掘系統(tǒng)應(yīng)該滿足如下條件。
(1) 支持多種輸入的數(shù)據(jù)類型。在當(dāng)前的數(shù)據(jù)挖掘系統(tǒng)中,不同的軟件支持的數(shù)據(jù)源類型是不同的。常見的數(shù)據(jù)源類型有:關(guān)系型數(shù)據(jù)庫、網(wǎng)絡(luò)數(shù)據(jù)、文本數(shù)據(jù)、電子表格數(shù)據(jù)等。系統(tǒng)要支持結(jié)構(gòu)良好、半結(jié)構(gòu)化和無結(jié)構(gòu)化的數(shù)據(jù)。
(2) 支持挖掘算法多種開式的輸出結(jié)果。系統(tǒng)中要考慮輸出結(jié)果的多樣性,支持控制臺(tái)直接輸出、操作系統(tǒng)事件日志輸出、系統(tǒng)日志文件輸出、Excel表格輸出、XML文件輸出及JSON數(shù)據(jù)格式輸出等。
(3) 挖掘算法增加刪除方便。對(duì)于通用數(shù)據(jù)挖掘系統(tǒng),要非常重視系統(tǒng)的可擴(kuò)展性。系統(tǒng)要做到對(duì)于新增加的挖掘算法,通過簡(jiǎn)單的參數(shù)配置就可以在系統(tǒng)中直接使用,無需重新編譯整個(gè)系統(tǒng)。
(4) 所有挖掘算法所需要的參數(shù)設(shè)置配置化。即挖掘算法中用到的參數(shù)個(gè)數(shù)、類型、值等都是通過配置文件完成,由通用數(shù)據(jù)挖掘系統(tǒng)統(tǒng)一讀寫,無需在系統(tǒng)中寫死。方便參數(shù)管理,減少挖掘算法參數(shù)配置部分的代碼量。
(5) 為了保證挖掘算法性能,系統(tǒng)提供多線程機(jī)制、提供同步鎖、提供挖掘算法中止功能等。
所以在設(shè)計(jì)通用數(shù)據(jù)挖掘系統(tǒng)時(shí),要符合軟件設(shè)計(jì)原則,盡可能的屏蔽各挖掘算法不同之處,高度抽象出挖掘算法的共同接口,以低耦合的方式聯(lián)接各種挖掘算法。通用數(shù)據(jù)挖掘系統(tǒng)應(yīng)使用插件結(jié)構(gòu),通過良好的體系結(jié)構(gòu)設(shè)計(jì)分離出數(shù)據(jù)挖掘的各部分,每個(gè)部分屏蔽了數(shù)據(jù)、算法等的差異性,以插件的方式來動(dòng)態(tài)加載和運(yùn)行各部分模塊。[8][9][10]
通用數(shù)據(jù)挖掘系統(tǒng)體系如下圖(圖1),由系統(tǒng)內(nèi)核、算法接口、算法插件、數(shù)據(jù)源讀取接口、數(shù)據(jù)源讀取插件、數(shù)據(jù)結(jié)果輸出接口、數(shù)據(jù)結(jié)果輸出插件等部分組成。
圖1 通用數(shù)據(jù)挖掘系統(tǒng)體系結(jié)構(gòu)圖
2.1 內(nèi)核。
數(shù)據(jù)挖掘系統(tǒng)的內(nèi)核部分是整個(gè)系統(tǒng)最基礎(chǔ)的部分,通過反射機(jī)制實(shí)現(xiàn)了動(dòng)態(tài)數(shù)據(jù)源插件配置讀取與加載、挖掘算法插件配置讀取與加載、輸出插件配置讀取與加載、異常處理等。內(nèi)核主要包括線程管理、插件管理、配置管理、對(duì)象管理器、日志管理、對(duì)象管理器等功能模塊。
線程管理是用來啟動(dòng)、暫停、終止挖掘算法的線程,提供了簡(jiǎn)單的線程同步鎖。如果挖掘算法需要多線程操作,則可以通過線程管理模塊中提供的線程同步鎖進(jìn)行線程同步。
為了能夠使本系統(tǒng)具有良好的可擴(kuò)展性,系統(tǒng)中的數(shù)據(jù)讀取、挖掘算法和結(jié)果輸出三個(gè)主要的部分的功能都是通過插件方式提供。內(nèi)核中的插件管理模塊是對(duì)數(shù)據(jù)讀取等三部分功能進(jìn)行動(dòng)態(tài)管理,不需要重新啟動(dòng)本系統(tǒng)就可以動(dòng)態(tài)的增加、修改或刪除數(shù)據(jù)源讀取插件、挖掘算法插件和挖掘結(jié)果輸出插件,即支持熱插撥技術(shù)。
當(dāng)要運(yùn)行某個(gè)插件時(shí),首先插件管理器通過反射功能得到此插件的元數(shù)據(jù),配置管理器讀取插件的配置信息,然后將插件元數(shù)據(jù)和配置信息傳遞給對(duì)象加載器。對(duì)象加載器到對(duì)象管理器中查找是否已經(jīng)實(shí)例化此插件的對(duì)象,如果已經(jīng)實(shí)例化,則直接返回此對(duì)象。如果未實(shí)例化,則由對(duì)象加載器生成此插件的唯一實(shí)例。動(dòng)態(tài)刪除一個(gè)插件時(shí),由插件管理器以事件方式通知對(duì)象加載器,對(duì)象加載器到對(duì)象管理器中查找,如果找到則將插件實(shí)例對(duì)象設(shè)置為空。
對(duì)象管理器是管理系統(tǒng)中通過反射自動(dòng)實(shí)例化的插件實(shí)例對(duì)象的容器。每一個(gè)實(shí)例化后的對(duì)象在對(duì)象管理器中會(huì)自動(dòng)賦給一個(gè)唯一編號(hào),方便查找。在對(duì)象管理器中,至少有三類對(duì)象,即數(shù)據(jù)源插件對(duì)象、挖掘算法插件對(duì)象和運(yùn)算結(jié)果輸出插件對(duì)象。如果系統(tǒng)以單線程方式運(yùn)行,則對(duì)象管理器中只要三個(gè)對(duì)象就可以了。如果系統(tǒng)以多線程方式運(yùn)行,則每一類可以有多個(gè)對(duì)象,對(duì)象管理器中有多個(gè)(超過3個(gè))對(duì)象。
為了方便插件參數(shù)設(shè)置,本系統(tǒng)所有插件參數(shù)都是放到配置文件中。因?yàn)閄ML格式文件具有跨平臺(tái)、擴(kuò)展方便、易理解和驗(yàn)證,以及支持的語言和工具很多等優(yōu)點(diǎn),所有本系統(tǒng)所有的配置文件都使用的是XML格式文件。內(nèi)核中的配置管理模塊對(duì)插件的配置文件進(jìn)行統(tǒng)一的驗(yàn)證和讀寫。配置管理模塊的主要功能有:XML讀取功能、XML Schema配置文件正確性驗(yàn)證、XML配置內(nèi)容解析等。
系統(tǒng)內(nèi)核中還包括了其它的一些通用服務(wù)功能,如:日志管理器可以記錄程序的運(yùn)行情況。日志管理器集成了開源的Log4Net組件,利用Log4Net強(qiáng)大的記錄功能,通過配置可將日志在控制臺(tái)顯示,可保存到文本文件、數(shù)據(jù)庫和事件管理器中。錯(cuò)誤處理模塊可以捕獲系統(tǒng)中出現(xiàn)的異常信息,并通過日志模塊將異常信息進(jìn)行保存。
2.2 數(shù)據(jù)挖掘算法統(tǒng)一接口。
數(shù)據(jù)挖掘算法的統(tǒng)一接口是通用數(shù)據(jù)挖掘系統(tǒng)和數(shù)據(jù)挖掘算法插件唯一聯(lián)系的地方。通過此接口,系統(tǒng)內(nèi)核無需了解算法的內(nèi)部實(shí)現(xiàn),屏蔽不同挖掘算法在參數(shù)、實(shí)現(xiàn)等方面的不同之處。
其主要內(nèi)容如下。
interface IAlgorithm
{void Build(Instance instance, Parameter para,Log log);
void Run();
string GetAlgorithmName();}
所有的挖掘算法插件都要實(shí)現(xiàn)此接口。此接口中Build方法是內(nèi)核向挖掘算法提供挖掘的數(shù)據(jù)內(nèi)容和算法自身的配置信息。instance對(duì)象是內(nèi)核實(shí)例化后的數(shù)據(jù)源插件對(duì)象讀取的待挖掘的數(shù)據(jù),para對(duì)象是由內(nèi)核中的配置管理器實(shí)例化后的算法的配置信息。log對(duì)象是內(nèi)核中日志對(duì)象,挖掘算法中通過日志對(duì)象可以記錄算法運(yùn)行的中間狀態(tài)和數(shù)據(jù)。
接口中的Run方法是由內(nèi)核反射后調(diào)用的算法運(yùn)行的主方法。
GetAlgorithmName方法由挖掘算法實(shí)現(xiàn),提供挖掘算法的名稱,此名稱也是挖掘算法配置文件的名稱。內(nèi)核反射調(diào)用挖掘算法名稱進(jìn)行算法配置對(duì)象的讀取和裝配。
對(duì)于通用數(shù)據(jù)挖掘系統(tǒng)的主調(diào)方法非常簡(jiǎn)單,所有算法插件調(diào)用方法都是一樣的,如下所示。
IAlgorithm algorithm= GetInstance(algorithmName);
algorithm.Build(instance, para,log);
algorithm.Run();
其中GetInstance方法就是根據(jù)用戶選擇的算法名稱得到實(shí)例化后的對(duì)象,代碼如下:
static IAlgorithm GetInstance(string algorithmName)
{Type tp = Type.GetType(algorithmName);
object obj =
Assembly.LoadFile(dllPath).CreateInstance(algorithmName);
IAlgorithm ia = (IAlgorithm)obj;
return ia; }
GetInstance方法利用C#提供的反射功能,根據(jù)算法的名稱,動(dòng)態(tài)實(shí)例化相應(yīng)算法的內(nèi)存對(duì)象,并且將此對(duì)象強(qiáng)制轉(zhuǎn)換成算法接口。因?yàn)樗型诰蛩惴▽?shí)現(xiàn)了同一個(gè)接口,所以從通用數(shù)據(jù)挖掘系統(tǒng)的角度上屏蔽了所有挖掘算法內(nèi)部實(shí)現(xiàn)的差異性。
2.3 通用數(shù)據(jù)挖掘系統(tǒng)工作流程。
通用數(shù)據(jù)挖掘系統(tǒng)內(nèi)核啟動(dòng)過程:內(nèi)核啟動(dòng)時(shí)首先由配置管理器讀取并驗(yàn)證默認(rèn)的主配置文件,然后根據(jù)主配置文件由插件管理器按順序檢查并獲取插件元數(shù)據(jù)信息,最后由對(duì)象加載器加載并實(shí)例化內(nèi)核插件。內(nèi)核啟動(dòng)成功后,顯示主界面,等待用戶操作。
數(shù)據(jù)挖掘主流程是用戶選擇并配置數(shù)據(jù)源插件、算法插件和輸出插件,確定選擇后,由通用數(shù)據(jù)挖掘系統(tǒng)內(nèi)核依次驗(yàn)證、加載并運(yùn)行相應(yīng)插件。
結(jié)束語
數(shù)據(jù)挖掘模塊是在當(dāng)前的很多應(yīng)用系統(tǒng)中重要組成部分,通過數(shù)據(jù)挖掘模塊可以有效的深入發(fā)現(xiàn)已獲取數(shù)據(jù)的深層次的知識(shí)。通過挖掘的知識(shí)可用于決策支持、信息管理、過程控制,以及對(duì)應(yīng)用系統(tǒng)自身的數(shù)據(jù)優(yōu)化。
本文提出并實(shí)踐了一個(gè)通用的數(shù)據(jù)挖掘系統(tǒng),此系統(tǒng)通過良好的系統(tǒng)架構(gòu)、統(tǒng)一的操作接口、簡(jiǎn)單的插件模型,降低了各子模塊之間的耦合性,提高了系統(tǒng)的擴(kuò)展能力。使用本系統(tǒng),開發(fā)者只需把精力用于挖掘算法的研發(fā),通過簡(jiǎn)單的插件配置,使應(yīng)用系統(tǒng)支持各種挖掘處理算法。
[1]Pang-Ning, Tan;Michael, Steinbach. 數(shù)據(jù)挖掘?qū)д揫M]. 北京:人民郵電出版社,2011:1-8.
[2]Ian H Witten,Eibe Frank,Mark A Hall. 數(shù)據(jù)挖掘?qū)嵱脵C(jī)器學(xué)習(xí)工具與技術(shù)[M]. 北京:機(jī)械工業(yè)出版社, 2014:14-20.
[3]Jiawei Han,Micheline Kamber,Jian Pei. 數(shù)據(jù)挖掘概念與技術(shù)[M]. 北京:機(jī)械工業(yè)出版社, 2014:1-26.
[4]劉紅巖,陳劍,陳國(guó)青. 數(shù)據(jù)挖掘中的數(shù)據(jù)分類算法綜述[J]. 清華大學(xué)學(xué)報(bào)(自然科學(xué)版), 2002(6):727-730.
[5]王光宏, 蔣平. 數(shù)據(jù)挖掘綜述[J]. 同濟(jì)大學(xué)學(xué)報(bào),2004(2):246-251.
[6]賀玲,吳玲達(dá),蔡益朝.數(shù)據(jù)挖掘中的聚類算法綜述[J]. 計(jì)算機(jī)應(yīng)用研究, 2007(1):10-13.
[7]鐘曉,等. 數(shù)據(jù)挖掘綜述[J]. 模式識(shí)別與人工智能,2001(1):48-55.
[8]王孝明,胡健,等. 基于.NET平臺(tái)可復(fù)用軟件框架的設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)工程,2004(22):76-78.
[9]崔冬華,劉吉林. 基于反射的低耦合軟件框架的研究[J]. 計(jì)算機(jī)信息,2007(10):232-234.
[10]孫玉鈺. 基于.NET組件技術(shù)的插件式框架的研究[J]. 計(jì)算機(jī)應(yīng)用與軟件,2009(6):143-145.
Class No.:TP31 Document Mark:A
(責(zé)任編輯:蔡雪嵐)
On Structure and Design of General Data Mining System
Wang Fengkun,Zhang Tingting
(Anhui Technical College of Mechanical and Electrical Engineering, Wuhu, Anhui 241000,China)
Data mining is the effective function of the current application system expansion, with the data mining module, we can enhance the value of the application system and found the deep knowledge of the data. But the diversity of data mining algorithms and the development of high difficulty limit the wide range of data mining applications. In order to improve the data mining module versatility and scalability, reducing the coupling with a particular field, people has designed a loose, expanded, field independent, support dynamic configuration of the general data mining system. We provided a general data mining system with high-level language support function of the reflex, uniform interface simple plug-in model and the data mining process of each function module. Through the kernel dynamic load and run the plug-in, the system can effectively increase the commonality and expansibility of the data mining module.
data mining; framework; low coupling; reflection; plug-in
汪峰坤,碩士,講師,安徽機(jī)電職業(yè)技術(shù)學(xué)院。研究方向:數(shù)據(jù)挖掘,大數(shù)據(jù)處理。 張婷婷,碩士,講師,安徽機(jī)電職業(yè)技術(shù)學(xué)院。研究方向:數(shù)據(jù)挖掘,無線網(wǎng)絡(luò)協(xié)議分析。
2016年安徽省高校省級(jí)自然科學(xué)研究重點(diǎn)項(xiàng)目“基于云平臺(tái)的健康體檢項(xiàng)智能推薦系統(tǒng)研究”(KJ2016A136);2014年安徽省高校省級(jí)自然科學(xué)研究重點(diǎn)項(xiàng)目“基于移動(dòng)客戶端的教職工健康體檢數(shù)據(jù)智能分析管理系統(tǒng)的研發(fā)”(KJ2014A038);安徽省質(zhì)量工程項(xiàng)目(2014mooc093)。
TP31
A
1672-6758(2016)11-0060-4