連續(xù)數據的離散化研究【畢業(yè)論文+文獻綜述+任務書+開題報告】_第1頁
已閱讀1頁,還剩41頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  本科畢業(yè)設計(論文)</p><p><b>  ( 屆)</b></p><p>  論文題目連續(xù)數據的離散化研究</p><p>  所在學院 </p><p>  專業(yè)班級 信息管理與信息系統(tǒng) </p>

2、<p>  學生姓名 學號 </p><p>  指導教師 職稱 </p><p>  完成日期 年 月 日</p><p><b>  誠 信 聲 明</b></p><p>

3、  我申明,所呈交的論文(設計)是本人在老師指導下進行的研究工作及取得的研究成果。據我查證,除了文中特別加以標注和致謝的地方外,論文(設計)中不包含其他人已經發(fā)表或撰寫過的研究成果,也不包含為獲得______或其他教育機構的學位或證書而使用過的材料。我承諾,論文(設計)中的所有內容均真實、可信。</p><p>  論文(設計)作者簽名: 簽名日期: 年 月 日</p>&

4、lt;p><b>  授 權 聲 明</b></p><p>  學校有權保留送交論文(設計)的原件,允許論文(設計)被查閱和借閱,學??梢怨颊撐模ㄔO計)的全部或部分內容,可以影印、縮印或其他復制手段保存論文(設計),學校必須嚴格按照授權對論文(設計)進行處理,不得超越授權對論文(設計)進行任意處置。</p><p>  論文(設計)作者簽名:

5、 簽名日期: 年 月 日</p><p>  連續(xù)數據的離散化研究</p><p>  中文摘要: 數據資源是21世紀的新興戰(zhàn)略資源,因此對數據資源進行數據挖掘是非常重要的一項工作,而對連續(xù)數據進行離散化處理是數據挖掘過程中必不可少的一項工作。連續(xù)數據的離散化研究作為一種相對比較新興的領域,其現(xiàn)有的算法還遠沒有達到令人滿意的程度。因此,本人認為對連續(xù)數據的離散化研究是當今國內的一

6、個重要的課題。本文闡述連續(xù)數據的離散化的研究現(xiàn)狀、研究方法、決策樹、幾種離散化方法。主要通過使用C4.5算法,在Visual Studio.NET編寫代碼來實現(xiàn)連續(xù)數據的離散化。</p><p>  關鍵詞:決策樹;C4.5;離散化方法</p><p>  The Research of Discretization of Continuous Data</p><p&

7、gt;  Abstract: Data resource is the 21st century's emerging strategy resources, so data mining is a very important work, and the discretization of continuous data is a necessary job in data mining process. As a relat

8、ively new field, the existing algorithm of discretization of continuous data is far from reaching satisfactory degree. Therefore, I think the discretization of continuous data research a very important issue in the domes

9、tic. This paper expounds the present situation of research of discret</p><p>  Key words: The decision tree;C4.5;Discretization method</p><p><b>  目錄</b></p><p><b>

10、;  第1章 緒論1</b></p><p>  1.1 選題背景及意義1</p><p>  1.2 研究的基本內容1</p><p>  1.3 研究的基本方法2</p><p>  1.3.1 文獻分析法2</p><p>  1.3.2 面向對象程序設計3</p>

11、<p>  第2章 決策樹4</p><p>  2.1 決策樹4</p><p>  2.2 創(chuàng)建決策樹的步驟5</p><p>  第3章 數據離散化的幾類算法8</p><p>  3.1 離散化的基本算法和標準8</p><p>  3.1.1 離散化的基本算法8</

12、p><p>  3.1.2 離散化算法的標準8</p><p>  3.2 離散化算法的分類和比較8</p><p>  3.3 BMIC離散化算法9</p><p>  3.4 基于云模式連續(xù)型屬性離散化的算法10</p><p>  3.5 人工魚群算法11</p><p>

13、  第4章 BMIC離散化實現(xiàn)12</p><p>  4.1 開發(fā)工具12</p><p>  4.1.1 整體功能12</p><p>  4.1.2 組件構成12</p><p>  4.1.3 版本13</p><p>  4.2 BMIC設計13</p><p>

14、;  4.2.1 運行界面13</p><p>  4.2.2 運行結果14</p><p>  4.2.3 類15</p><p>  第5章 總結與展望24</p><p><b>  致 謝25</b></p><p><b>  參考文獻25</b&g

15、t;</p><p><b>  1 緒論</b></p><p>  1.1 選題背景及意義</p><p>  如今,隨著計算機的普及,網絡以及通訊等信息技術的高速發(fā)展,當今社會已經進入了網絡信息時代。隨著計算機技術的高速發(fā)展,包括存儲技術、數據技術和網絡技術等信息處理方式,已經人們對計算機的認識和管理水平的提高,對信息的處理在整個社會

16、生產中實現(xiàn)規(guī)模產業(yè)化,在技術上表現(xiàn)為對大規(guī)模數據操作的產業(yè)化已經得到實現(xiàn)。而且隨著存儲設備的單位價格不斷下跌而容量卻急劇地擴大,關系數據庫、對象數據庫、多媒體數據庫、地理信息數據庫和空間數據庫的不斷成熟并得到廣泛的應用,數據庫管理系統(tǒng)的日益普及,這使得人們所積累的數據越來越多,并且數據與信息系統(tǒng)中的不確定性更加顯著。</p><p>  作為二十一世紀的重要資源,信息資源的價值已經越來越得到人們重視,并且很多國家

17、把信息資源挖掘作為國家發(fā)展的一項重要指標。海量的數據背后隱藏著許多重要的信息,但是目前的數據庫系統(tǒng)僅僅只能高效地實現(xiàn)數據的錄入、查詢、統(tǒng)計等功能,卻無法挖掘數據中存在的關系和規(guī)則,無法根據現(xiàn)在的數據預測未來的發(fā)展趨勢,即缺乏挖掘數據背后隱藏關系的手段。因此,如何從大量的、雜亂無章的、有強干擾的數據中挖掘出數據背后又利用價值的信息,由此產生了人工智能研究的一個嶄新領域——數據挖掘(Data Mining,簡稱DM)[1]。</p&g

18、t;<p>  在傳統(tǒng)的機器語言學習中,連續(xù)數據離散化技術被當作邊緣性課題,因而沒有受到足夠的重視,但近年來隨著數據挖掘的不斷發(fā)展,數據離散化技術漸漸在數據挖掘技術中顯現(xiàn)出其不可替代的重要性,在規(guī)則提取、特征分類等這些算法中,特別是在應用粗集理論進行數據挖掘的研究中,連續(xù)屬性數據必須要進行離散化處理,因此國內的專家和學者開始越來越關注連續(xù)數據的離散化[2]。</p><p>  對連續(xù)數據的離散化雖

19、不是什么研究的熱點,然而它是對數據信息進行預處理的一個重要部分。實際數據庫中存在較多的連續(xù)型屬性,而現(xiàn)有的很多數據挖掘方法只能處理離散型的屬性,因而需要對連續(xù)屬性進行離散化。因此,連續(xù)數據離散化方法成為數據挖掘領域的重要性工作,直接影響數據挖掘的質量。但作為一種相對比較新興的領域,其現(xiàn)有的算法還遠沒達到令人滿意的程度。因此,對連續(xù)數據的離散化研究是當今國內的一個重要的課題。</p><p>  1.2 研究的基

20、本內容</p><p> ?。?)本文主要對連續(xù)數據的離散化進行研究,主要包括決策樹及決策樹的建立、離散化的幾種算法。</p><p>  (2)學習幾種離散化的方法,采用BMIC的方法在Visual Studio.NET的編程環(huán)境下編寫代碼,并實現(xiàn)對連續(xù)數據的離散化。</p><p>  1.3 研究的基本方法</p><p>  本文采

21、用的研究方法有文獻分析法、面向對象程序設計兩種。</p><p>  1.3.1 文獻分析法</p><p>  文獻分析法主要指搜集、鑒別、整理文獻,并通過對文獻的研究等途徑,形成對事實科學認識的方法。由于文獻分析法和內容分析法有共同的對象,都不與文獻中記載的人與事直接接觸,因此,都稱為非接觸性研究方法。</p><p>  現(xiàn)代對文獻的定義指的是“已經發(fā)表過的

22、、或者雖未發(fā)表但已被整理、報導過的那些保存有知識等的一切載體”。“一切載體”,包括期刊、圖書、科學報告、檔案、學位論文等常見的紙面印刷品,也包括有實物形態(tài)在內的各種材料。</p><p>  從整理情況分類,文獻可以分為4類:</p><p> ?。?) 零次文獻(零次文獻指曾經歷過特別事件或行為的人以撰寫的目的描述或使用其他方式的實況紀錄,是有意識處理的和未經發(fā)表的最原始的資料,即pri

23、mary documents);</p><p>  (2) 一次文獻(直接記錄事件經過、調查報告、新知識、研究成果、論文、新技術的專著等文獻);</p><p> ?。?) 二次文獻(對一次文獻進行檢索性的文獻);</p><p> ?。?)三次文獻(通過在利用二次文獻檢索的基礎上,系統(tǒng)地對一次文獻整理并概括論述等幾方面操作的文獻)[3]。</p>

24、<p>  文獻分析法的方法有許多種,而常用到的方法是內容分析法,內容分析法的過程有建立研究目標、確定研究總體和選擇分析單位、抽樣和量化分析材料、設計分析維度體系、進行評判記錄和分析推論等幾部分的步驟。具體內容如下:</p><p><b> ?。?) 研究目標</b></p><p>  在現(xiàn)在教育科學研究中,內容分析法運用于多種研究目標的研究工作。常用到

25、的類型有:現(xiàn)狀分析、趨勢分析、意向分析、比較分析。</p><p>  (2) 設計分析維度及體系</p><p>  設計分析維度、類別有兩類基本方法,一是根據研究的目標,研究者自行設計,二是采用現(xiàn)成的分析維度系統(tǒng)。</p><p>  分析維度(分析類目)是根據現(xiàn)有的研究需要而設計的將資料內容進行分類的項目和標準。</p><p> ?。?/p>

26、3) 抽取分析材料(抽樣)</p><p>  抽樣工作包括兩個方面的內容:一是對總體進行界定,二是從總體中抽取一些具有代表性的樣本。內容分析法常用的三種抽樣方式是:分析單位取樣、日期抽樣、來源取樣。</p><p><b> ?。?) 量化處理</b></p><p>  量化處理就是把樣本從形式上轉化為數據化形式的過程,包括作評判記錄、進行

27、信度分析等兩部分內容。根據已確定的分析維度(類目)和分析單位,對樣本中的信息來進行分類記錄,并且登記下每一個分析單位中分析維度(類目)的出現(xiàn)的頻率和判斷是否存在,這就是評判記錄[4]。</p><p>  1.3.2 面向對象程序設計</p><p>  面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。面向對象程序設計

28、中主要包括的概念:對象、數據抽象、類、繼承、多態(tài)性、數據封裝、動態(tài)綁定、消息傳遞。面向對象的思想通過這些概念得到了具體的體現(xiàn)[5]。 </p><p>  對象:對象是具有數據、標識和行為的編程結構,對象是運行期的基本實體,它是一個數據封裝和這些數據的代碼操作的邏輯實體,對象數據包括在對象的字段、屬性和事件中。  </p><p>  類:類是對相同類型的對象的抽象。類像結構一樣,類也定義

29、了數據類型的數據和行為,然后程序員可以創(chuàng)建作為此類的實例的對象。一個對象所包含的所有數據和代碼可以通過類來構造。   </p><p>  封裝:將數據和代碼捆綁到起來,以避免了外界的干擾和不確定性等因素,這就是封裝。同時對象的某些代碼和數據是私有的,且不能被外界訪問,通過封裝操作來實現(xiàn)數據和代碼不同級別設置的訪問權限。  </p><p>  繼承:通過某個類型的對象來獲得其他類型的對象

30、的特征的過程就是對象的繼承。通過對象的繼承可以實現(xiàn)重用代碼,即從已存在的類中派生出的一個新類,并且繼承原來那個類的特性,同時,它還可以創(chuàng)建自己的新特性。</p><p>  多態(tài):多態(tài)是指不同事物具有不同表現(xiàn)形式的能力。一個類可以用作多種類型,可以用作它自己的類型、任何基類型或者在實現(xiàn)接口時用作任何接口類型,這也稱作為多態(tài)性。具有不同內部結構的對象通過多態(tài)機制可以共享相同的外部接口,從而能夠減少代碼的復雜度。&l

31、t;/p><p>  方法:方法是包括一系列語句的代碼塊,是定義一個類可以做的,但不一定會去做的事。</p><p>  動態(tài)綁定:調用一個過程并與相應代碼鏈接起來的過程就是綁定。動態(tài)綁定則是指,只有在運行期,調用給定的過程中相關聯(lián)的代碼才可知的一種綁定,這是多態(tài)實現(xiàn)的具體形式。</p><p>  消息傳遞:消息傳遞指的是對象之間溝通的途徑就是對象之間進行收發(fā)信息的過

32、程。消息內容包括需要調用的函數的標識,接收消息的對象的標識,以及其他必要的信息。消息傳遞的概念讓面向對象程序設計對現(xiàn)實世界的描述變得更加簡捷[5]。   </p><p><b>  2 決策樹</b></p><p>  決策樹是一種能夠直觀、清晰地表達加工的邏輯要求,用二叉樹形圖來表示處理邏輯的工具,尤其適合應用于邏輯組合關系不復雜、判斷因素比較少的情況。許多機

33、器學習法采用的基本知識表達形式是決策樹,也就是很多數據挖掘的輸出采用的形式。</p><p><b>  2.1 決策樹</b></p><p>  以下我們先引用一個決策樹的例子:隱形眼鏡</p><p><b>  表2-1視力檢查表</b></p><p>  圖2-1 關于視力診斷的決策樹

34、</p><p>  以上是一個簡單化的模型:隱形眼鏡數據,是通過給出的一些有關病人的信息,來告訴患者被推薦的隱形眼鏡類型。</p><p>  表2-1的第一列給出了患者的年齡,第二列給出了眼睛的診斷:myope是近視,Hypermetrope是遠視;第三列顯示患者是否散光;第四列是有關眼淚的產生率,這是一個重要因素,因為隱形眼鏡需要淚水潤滑,最后一列顯示所推薦的隱形眼鏡的種類:hard

35、、soft或者none。這個表呈現(xiàn)了所有的屬性的組合。</p><p>  圖2-1以一個決策樹的形式展示了關于隱形眼鏡數據的結構的表述,在多種用途上是一個更簡練、明確了的規(guī)則表示法,并且有更加便于觀察的優(yōu)勢。樹首先對屬性淚流量進行測試,產生的兩個分支與兩個可能的輸出結果相對應。如果淚流量是reduced(左支),輸出是none;如果是normal(右支),第二個測試是散光屬性。最后,無論測試是什么結果,所達到的

36、樹的葉子指出了向病人推薦的隱形眼鏡的類型。</p><p>  以上就是一個決策樹的例子。</p><p>  一個決策樹上的節(jié)點包含了對某個特定屬性的測試。通常來說,在一個節(jié)點上的測試是比較一個屬性值與一個常量。然而,有一些樹節(jié)點上的測試其實就是在兩個屬性值與一個常量之間進行比較。葉節(jié)點對所有到達葉實例給出一組分類,或者一個分類,或是包括了所有可能分類的一個概率分布。在對一個未知實例進行

37、分類時,在各個連續(xù)節(jié)點上對未知實例的屬性值進行測試,然后根據測試的結果,從樹的自上而下地尋找出一條路徑,當實例到達目標葉子時,葉子所標注的類就是該實例的分類 [6]。</p><p>  在一個節(jié)點上測試,如果測試的屬性是名詞性屬性,那么在這個節(jié)點之下產生這個名詞性屬性所有可能屬性值數量的分支。在這種情形下,因為任何一個可能的名詞性屬性值都對應一個分支,所以在以后的建樹過程中,相同的名詞性屬性將不會再次被測試。而

38、有些時候,名詞性屬性值被分成兩個子集,那么就產生兩個分支,屬性值所在的子集決定了實例的分配。在這種情況下,也許會在一條路徑上一個名詞性屬性將會被不止一次地測試。</p><p>  在一個節(jié)點上測試,如果測試的屬性是數值屬性,那么事先定義好一個常量,在一個節(jié)點上的測試中一般是判斷這個數值是否大于或者小于這個常量,并導出一個二叉分裂?;蛘咭部赡苁褂萌娣至眩踔翆霈F(xiàn)多個不同的可能性。若把殘缺值也作為一個獨立的屬

39、性值看待的話,那么將產生出第三個分支。對于為實數值屬的數值屬性來說,等于的操作是一個沒有實際意義的操作,所以在實數上的測試應該是用一個區(qū)間而不是一個常量,同樣也可以運用于落在區(qū)間以下、區(qū)間內和區(qū)間以上的判斷來實行三叉分裂 [6]。</p><p>  2.2 創(chuàng)建決策樹的步驟</p><p>  根據數據創(chuàng)建決策樹的方法有許多種,以下從C4.5方法的角度創(chuàng)建一個決策樹。</p>

40、;<p>  C4.5算法其實是ID3算法的改進,比較ID3算法它增加了對連續(xù)型屬性、屬性值空缺情況等情況的操作。算法的主體由剪枝算法C4.5pruning、決策樹生成C4.5tree、規(guī)則生成算法C4.5rules 等3部分組成。C4.5算法是根據信息熵的研究理論,通過選擇把當前樣本集中具有最大信息增益率的屬性作為測試屬性,并且不斷地對樣本集進行劃分,構造出最終的一棵完全決策樹。對于連續(xù)型的屬性,通常先對連續(xù)屬性進行離散

41、化處理,即把連續(xù)型屬性的值劃分成不同的區(qū)間,從而便于處理后面的步驟。C4.5rules則是把完全決策樹轉化成一組if.then規(guī)則集且進行化簡。經剪枝或規(guī)則生成過程中得到的簡化決策樹和規(guī)則集都可用于分類。而C4.5pruning是基于錯誤的剪枝方法,采用剪枝方法對完全決策樹進行修剪,得到簡化決策樹 [7]。</p><p>  ID3算法在實際應用中存在一些問題,Quilan提出了C4.5算法,嚴格上講C4.5只

42、能是ID3的一個改進的算法。</p><p>  C4.5算法繼承了ID3算法的優(yōu)點,并且在以下幾個方面對ID3算法進行改進:</p><p> ?。?) 通過信息增益率來選擇屬性,解決了用信息增益選擇屬性時偏向選擇取值多的屬性的不足的問題;   </p><p>  (2)剪枝操作在樹構造的過程中一起進行; </p><p> ?。?) 相

43、對ID3算法,C4.5算法能夠對連續(xù)屬性進行離散化處理操作;</p><p> ?。?) 對不完整數據也能進行處理處理操作,即屬性空缺的情況。</p><p>  C4.5算法的優(yōu)點:相對ID3算法,易于理解C4.5算法產生的分類規(guī)則,準確率較高。但是其缺點是:在構造樹的過程中,對數據集需要進行多次的順序掃描和排序,因而可能導致算法的低效。同時,C4.5算法適合于能夠駐留于內存的數據集,當

44、訓練集大到無法在內存中保存時程序就無法運行。</p><p>  C4.5算法的步驟如下</p><p>  (1)求訓練集合的信息熵</p><p><b>  INFO(D)=-</b></p><p> ?。?)對于每一屬性Ai,按照屬性Ai的取值對訓練集進行劃分后的信息熵。</p><p>

45、;  INFO(D, Aj)=</p><p><b> ?。?)求信息增益</b></p><p>  Gain(D, Ai)=INFO(D)-INFO(D, Ai)</p><p> ?。?)求屬性A的信息熵</p><p>  INFO(Ai)= -</p><p> ?。?)求屬性的信息增

46、益比率</p><p>  GainRatio(D,Aj)=</p><p>  采用C4.5離散化的方法建立決策樹,圖示如2-2</p><p>  圖2-2 C4.5決策樹建立流程圖</p><p>  3 數據離散化的幾類算法</p><p>  3.1 離散化的基本算法和標準</p><

47、p>  3.1.1 離散化的基本算法</p><p>  數據離散化本質上通過斷點集合將連續(xù)的屬性空間劃分為若干區(qū),并使同一區(qū)域的實例都取相同的屬性值矢量。</p><p>  連續(xù)值屬性離散化方法的基本思想,設一個具有連續(xù)值屬性的決策信息系統(tǒng)s=(U,AT∪D),這里的U是有限非空的樣本集合,稱為對象空間或論域,AT為樣本空間的非空屬性集合,D是決策屬性集合,對于每個連續(xù)值屬性a

48、,a∈AT,其值域就是樣本空間U在屬性a上的取值范圍,由實數域上的一段左閉右開的區(qū)間[Va,Wa)來表示。在每個連續(xù)值屬性a的值域Vɑ中應找到一個恰當的劃分ɑ,在劃分Pɑ下的系統(tǒng)與初始系統(tǒng)的過程中應具有相同的決策能力,劃分屬性值域為幾個互不相交的子區(qū)間,同時對每個子區(qū)間賦值以符號的形式,就得到了一組屹上的離散化取值,這個過程其實就是在樣本空間U的連續(xù)值屬性離散化的結果。由于任何劃分只是通過一組值域屹內的分割點序列(v.<v:…&l

49、t;v。)確定的,因此,為了滿足系統(tǒng)需要的劃分,離散化的過程就是要在每個連續(xù)值域屹的劃分點序列集合中選出一個恰當的劃分點序列,從而得到最終離散化結果 [8]。</p><p>  3.1.2 離散化算法的標準</p><p>  一個好的離散化方法通常要滿足三個標準:一是為了減少后續(xù)的機器學習算法的運算量,盡量減少離散區(qū)間數(切點數);二是盡量避免或減少源數據中的信息損失;三是對連續(xù)數據

50、的離散化的方法能夠簡單有效運算量小,易于實現(xiàn)。</p><p>  3.2 離散化算法的分類和比較</p><p>  根據有無監(jiān)督性,離散化算法可以分為無監(jiān)督算法和有監(jiān)督算法這兩類。</p><p>  (1)無監(jiān)督算法是不考慮屬性和類別之間的關系。代表性的算法有等寬法和等頻法等兩種算法。</p><p>  (2)有監(jiān)督算法與無監(jiān)督算法

51、相反,它是考慮到屬性和類別之間的關系,在離散化的過程中是將類別值作為參數。而且由于相同數據在不同的分類問題中,最佳離散化方案顯然地不同,所以有監(jiān)督算法比無監(jiān)督算法實際應用中更具有科學性。</p><p>  同時離散化算法也可以分為,局部方法和全局方法。</p><p> ?。?)局部方法在離散化一個屬性的過程中忽略了其他屬性的影響,數據中的重要關系也容易受到破壞,被認為是一種次優(yōu)方法。但

52、局部離散化方法相對簡單易行,并已得到了廣泛的應用。</p><p> ?。?)而全局方法考慮到了屬性之間的相互作用,一般可以獲得比局部方法更好的離散化結果。但是它的計算代價很高,難于得到應用,因此在將來可能對如何減少全局方法的計算代價更加深入的研究。</p><p>  前面已經介紹C4.5算法,以下再介紹其他幾種離散化的算法。</p><p>  3.3 BMI

53、C離散化算法</p><p>  BMIC算法的全名是boundary point's attribute values merging and inconsistency checking,該算法是一種有監(jiān)督算法,以基本離散區(qū)間中大多數例子所屬類別為導向,合并同類區(qū)間。通過用簡單的規(guī)則對邊界點集合進行合并得到備選最優(yōu)切點的集合,改變了當前多數方法遍歷尋求備選最優(yōu)切點的過程,同時也節(jié)省了大量運算。而且采用

54、了不一致度調整離散區(qū)間使算法更有全局性[9]。</p><p>  BMIC算法的步驟:</p><p>  (1)按要離散化的屬性值,將數據矩陣以升序排列;</p><p> ?。?)以邊界點的屬性值為切點進行分割屬性值集合,把其中符合定義一的邊界點屬性值記為獨立的離散區(qū)間即臨界區(qū)間少形成離散方案STEP1;</p><p> ?。?)對臨

55、界區(qū)間進行合并,從而得到離散方案STEP2;</p><p>  (4)對少數點區(qū)間進行合并,從而得到離散方案STEP3;</p><p> ?。?)驗證不一致度,調整STEP3,多次重復操作,獲得最終離散切點集合。</p><p>  圖3-1 BMIC算法過程</p><p>  3.4 基于云模式連續(xù)型屬性離散化的算法</p&g

56、t;<p>  該算法是將云模型和粗糙集理論相結合后提出的一種新的連續(xù)型屬性且無指導離散化的方法。這種方法離散化后得到的概念的邊界是模糊的,并且能較好地保持原信息系統(tǒng)的不準確性,更符合一般人的思維習慣。(1)在連續(xù)型屬性的定義域中找到合適的斷點,從而形成不同的區(qū)間;(2)在得到的區(qū)間上產生期望Ex 、熵En并形成正態(tài)模糊數模型;(3)歸并不同的正態(tài)模糊數模型,形成隸屬云。其中</p><p>  期

57、望Ex:它反映相應的模糊概念的信息中心值;</p><p>  熵En:它指隸屬云的期望曲線的帶寬;</p><p>  超熵He:它反映隸屬云的離散程度[10]。</p><p>  3.5 人工魚群算法</p><p>  人工魚群算法是一種隨機搜索優(yōu)化算法,它是基于模擬魚群行為的。從構造單條魚的底層行為開始做起,通過對魚群中的各個個體

58、的局部尋優(yōu),從而達到全局最優(yōu)值在群體中突現(xiàn)的目的。人工魚個體的自適應活動就是算法的進行,個體每一次活動就是算法的一次迭代。在算法中,人工魚的個體狀態(tài)可以用向量X=(x1,x2,…,xn)表示,其中,(i = 1,…,n)為待尋優(yōu)參數。設Y為目標函數的值,人工魚所在當前位置的食物濃度用Y= f(X) 表示。人工魚個體之間的距離di-j=||Xi-Xj||,用VisualScop e表示人工魚的魚的感知距離 (即最大視野范圍)。人工魚移動的

59、步長用MoveStep來表示。擁擠度因子用δ表示。人工魚包括覓食、聚群等兩個行為。</p><p>  (1)研究人工魚的覓食行為。設X為人工魚當前狀態(tài),在其感知范圍內(即di-j<=VisualScope)隨機選擇一個新狀態(tài)X,當該狀態(tài)的食物濃度大于當前狀態(tài)時,向該方向前進一步。反之,就重新隨機選擇一個狀態(tài)X,進行是否滿足前進條件判斷。反復幾次之后,結果若仍不滿足前進的條件,就隨機移動一步,即Xnext=

60、</p><p>  其中,Xnext為下一步的位置,當前的隨機狀態(tài)為Xj,產生隨機數序列Random()。</p><p>  (2)人工魚的聚群行為。聚群行為指魚在游動過程中會自然地聚集成群,在其感知范圍內(即di-j<=VzsualScope)探索其他的同伴數目Nf及中心位置Xi,其中Xi=j,就Yi/Nf>δ*Yi,說明同伴中心地帶有很多的食物而且中心地帶不太擁擠,則朝

61、伙伴的中心移動,反之執(zhí)行覓食行為。</p><p><b>  該算法的步驟如下:</b></p><p>  步驟l設定魚群算法中的各個參數值,設置人工魚的初始狀態(tài),在屬性最小值和最大值的區(qū)間內浮動,從而得到初始的分割區(qū)間;</p><p>  步驟2在人工魚群系統(tǒng)中輸人第i(i=1,2,…,n)個條件屬性Ci與決策屬性D,對人工魚當前的狀態(tài)

62、進行區(qū)間離散化操作,再用粗集理論計算當前條件屬性Ci和對決策屬性D的支持度rCi,重復多次迭代找到rCi的最大穩(wěn)定值;</p><p>  步驟3若i<n,令i=i+1,轉步驟2,否則計算所有離散化結果的整體分類質量rc,若rc的值連續(xù)多次保持最大值不變則轉步驟4,否則令i=1,轉步驟2繼續(xù)進行新一輪尋優(yōu);</p><p>  步驟4記錄當前各人工魚的狀態(tài),并根據當前狀態(tài)來確定離散區(qū)

63、間,通過利用粗糙集提取最簡規(guī)則 [11]。</p><p>  4 BMIC離散化實現(xiàn)</p><p><b>  4.1 開發(fā)工具</b></p><p>  Visual Studio.NET是由Microsoft開發(fā),是該公司產品.NET平臺下最為強大的開發(fā)工具,Visual Studio.NET提供了包括設計、編碼、編譯調試、數據庫

64、聯(lián)接操作等基本功能,還為客戶提供了基于開放架構的服務器組件開發(fā)平臺、企業(yè)開發(fā)工具和應用程序重新發(fā)布工具以及性能評測報告等一系列的高級功能。無論是軟件服務商,還是企業(yè)應用程序的部署與發(fā)布,Visual Studio.NET都可以提供近乎完美的解決方案。</p><p>  4.1.1 整體功能</p><p>  無論對象代碼是在本地存儲和執(zhí)行,還是在本地執(zhí)行但在 Internet 上分布

65、,或者是在遠程執(zhí)行,能夠提供一個一致的面向對象的編程環(huán)境。</p><p>  提供一個解決版本控制和軟件部署沖突,使沖突最小化的代碼執(zhí)行環(huán)境。</p><p>  提供一個檢測包括由未知的或不完全受信任的第三方創(chuàng)建的代碼,能夠提高代碼執(zhí)行安全性的代碼執(zhí)行環(huán)境。</p><p>  提供一個能夠解釋環(huán)境和消除腳本環(huán)境等性能問題的代碼執(zhí)行環(huán)境?!?lt;/p>

66、<p>  使開發(fā)人員在面對類型不相同的應用程序(比如基于c#的應用程序和基于java的應用程序)時,他的經驗能夠保持一致。</p><p>  按照工業(yè)標準生成所有通信,以確保基于 Microsoft Visual Studio .net 的代碼可與任何其他代碼集成。</p><p>  NET Framework現(xiàn)主要由以下幾部分組成: (1)五種正式的語言編譯器(C#,V

67、isual Basic,C++,J#和Jscript腳本語言等)。(2)框架類庫(Framework Class Library,FCL)由很多相關互聯(lián)的類庫組成,支持Web應用程序、Web服務、Windows應用程序和數據訪問等的開發(fā)。(3)公共語言運行庫(Common Language Runtime,CLR)是.NET Framework的基礎,提供內存管理、遠程處理和線程管理等核心服務,并且強調實施嚴格的類型安全,提高代碼執(zhí)行的

68、安全性和可靠性。</p><p>  4.1.2 組件構成</p><p>  公共語言運行庫和.NET Framework類庫。公共語言運行庫是Microsoft Visual Studio .Net Framework的基礎。可以將運行庫看作一個在執(zhí)行時管理代碼的代理,為系統(tǒng)提供內存管理、線程管理和遠程處理等3部分核心服務,強制實施嚴格的類型安全,進而能夠提高其他形式的代碼的安全性和

69、可靠性以及準確性。通常用CLR為基礎運行的代碼稱為托管代碼,非托管代碼是不以CLR為基礎運行的代碼。</p><p>  非托管組件可以承載.NET Framework,將公共語言運行庫CLR加載到這些組件的進程中,同時啟動執(zhí)行托管代碼,進而創(chuàng)建一個軟件環(huán)境,這個環(huán)境能夠同時利用托管和非托管功能兩個功能。Microsoft Visual Studio .Net Framework不僅提供了多個運行庫宿主,而且還能

70、夠支持第三方運行庫的開發(fā)。</p><p><b>  4.1.3 版本</b></p><p>  Visual Studio .NET的版本有Visual Studio .NET2002、Visual Studio .NET2003、Microsoft Visual Studio 2005、Microsoft Visual Studio 2008、Visual

71、Studio 2010等幾個版本。</p><p>  4.2 BMIC設計</p><p>  4.2.1 運行界面</p><p>  這里主要介紹了基于Visual Studio.NET的開發(fā)環(huán)境下BMIC算法的實現(xiàn)方法。在運行界面的代碼模塊中,首先引用System. Drawing 命名空間,它提供了對 GDI+ 基本圖形功能的訪問;其次引用了Syste

72、m.ComponentModel命名空間,該命名空間提供用于實現(xiàn)組件和控件運行時和設計時行為的類。此命名空間包括用于實現(xiàn)屬性和類型轉換器、綁定到數據源以及授權組件的基類和接口;然后引用System. Data 命名空間,該命名空間提供對表示 ADO.NET 結構的類的訪問。通過 ADO.NET 可以生成一些組件,用于有效管理多個數據源的數據;還有,引用System.Collections命名空間,這個命名空間包含接口和類,這些接口和類定

73、義各種對象(如列表、隊列、位數組、哈希表和字典)的集合;最后還引用了System.Windows.Forms 命名空間,該命名空間包含用于創(chuàng)建基于Windows的應用程序的類,以充分利用 Microsoft Windows 操作系統(tǒng)中提供的豐富的用戶界面功能。通過以上的命名空間,實現(xiàn)了對界面的基本設計。</p><p>  運行界面如下圖4-1:</p><p><b>  圖4

74、-1 運行界面</b></p><p>  其中按鈕 browse是導入數據,按鈕discrete是對導入的數據進行離散化處理,按鈕build tree是建立決策樹操作。</p><p>  4.2.2 運行結果</p><p>  未進行離散化處理的數據如圖4-2:</p><p>  圖4-2 未進行離散化處理的數據<

75、/p><p>  進行離散化處理后的數據如圖4-3:</p><p>  圖4-3 離散化后的結果</p><p>  點擊按鈕build tree后,顯示的結果如圖4-4</p><p>  圖4-4 建立決策樹</p><p><b>  4.2.3 類</b></p><p

76、>  以下介紹本次畢業(yè)論文設計用到的幾個類。</p><p>  類名:Discrete</p><p>  屬性:arrayCuts,discrete,target,table</p><p>  在Discrete的代碼模塊中,首先引用了System.IO命名空間,該命名空間包含了允許讀寫文件和數據流的類型以及提供基本文件和目錄支持的類型;其次引用了Sys

77、tem.Collections命名空間,它提供了包含接口和類,這些接口和類定義各種對象(如列表、隊列、位數組、哈希表和字典)的集合;再者引用了System.Data命名空間,該命名空間為類提供了對表示 ADO.NET 結構的類的訪問。通過 ADO.NET 可以生成一些組件,用于有效管理多個數據源的數據;還有引用了System.ComponentModel命名空間,它主要的功能是提供提供用于實現(xiàn)組件和控件運行時和設計時行為的類。此命名空間

78、包括用于實現(xiàn)屬性和類型轉換器、綁定到數據源以及授權組件的基類和接口;最后引用了System.Windows.Forms命名空間,該命名空間主要含用于創(chuàng)建基于Windows的應用程序的類,以充分利用 Microsoft Windows 操作系統(tǒng)中提供的豐富的用戶界面功能。通過以上幾種命名空間,來完成對類Discrete算法的實現(xiàn)。</p><p><b>  主要代碼如下:</b></p

79、><p>  using System;</p><p>  using System.IO ;</p><p>  using System.Collections;</p><p>  using System.Data;</p><p>  using System.ComponentModel ;</p>

80、;<p>  using System.Windows.Forms;</p><p>  namespace C4._5</p><p><b>  {</b></p><p>  /// <summary></p><p>  /// Discrete 的摘要說明。</p>&l

81、t;p>  /// </summary></p><p>  public class Discrete</p><p><b>  { </b></p><p>  private ArrayCuts arrayCuts=new ArrayCuts();</p><p>  private do

82、uble[] discrete;</p><p>  private string[]target;</p><p>  public DataTable Table;</p><p>  public Discrete(Attribute attribute, Attribute tAttribute,DataTable table)</p><

83、;p><b>  {</b></p><p>  MessageBox.Show("another attribute:");</p><p>  Table=table;</p><p>  for (int k=0;k<tAttribute.values .Length ;k++)</p>&l

84、t;p>  System.Console .WriteLine (tAttribute.values[k]);</p><p>  int elementNum=table.Rows.Count;</p><p>  discrete=new double[elementNum];</p><p>  target=new string[elementNum]

85、;</p><p>  sort(attribute,tAttribute,Table);</p><p>  FindCuts(attribute,tAttribute,Table);</p><p>  arrayCuts=MinimizeCuts(arrayCuts);</p><p>  //for (int k=0;k<arr

86、ayCuts.Count;k++)</p><p>  //System.Console .WriteLine (arrayCuts.CutPoints [k].CutValue.ToString () +"Class:"+arrayCuts.CutPoints [k].CValue );</p><p>  Table=replace(attribute,t

87、Attribute,arrayCuts,Table);</p><p><b>  }</b></p><p>  private void sort(Attribute attribute, Attribute tAttribute,DataTable table)//根據屬性對表進行排序</p><p><b>  {</

88、b></p><p><b>  int k=0;</b></p><p>  foreach(DataRow row in table.Rows)</p><p><b>  {</b></p><p>  discrete[k]=Math.Round(double.Parse((strin

89、g)row[attribute.AttributeName]),2);</p><p>  target[k]=( string)row[tAttribute.AttributeName];</p><p><b>  k++;</b></p><p><b>  }</b></p><p>  d

90、ouble tempD;</p><p>  string tempT;</p><p>  for (int i=0;i<discrete.Length-1 ;i++)</p><p>  for (int j=i+1;j<discrete.Length;j++)</p><p>  if (discrete[i]>dis

91、crete[j] )</p><p><b>  {</b></p><p>  tempD=discrete[i];</p><p>  discrete[i]=discrete[j];</p><p>  discrete[j]=tempD;</p><p>  tempT=target[i]

92、;</p><p>  target[i]=target[j];</p><p>  target[j]=tempT;</p><p><b>  }</b></p><p>  /* 查看排序結果是否正確 </p><p>  FileStream fs1 = new FileStream(@&

93、quot;c:\sorta.txt", FileMode.Create , FileAccess.Write);</p><p>  StreamWriter m_streamWriter = new StreamWriter(fs1);</p><p>  for (int i=0;i<discrete.Length ;i++)</p><p>&

94、lt;b>  {</b></p><p>  m_streamWriter.WriteLine (discrete[i].ToString ()+","+target[i]);</p><p><b>  }</b></p><p>  m_streamWriter.Close (); */</p&g

95、t;<p>  //System.Console .WriteLine ( "elements of discrete:"+discrete.Length.ToString ());</p><p><b>  }</b></p><p>  public DataTable replace(Attribute attribute,

96、Attribute tAttribute,ArrayCuts arrayCuts,DataTable table)</p><p><b>  {</b></p><p>  foreach(DataRow row in table.Rows)</p><p><b>  { </b></p><p&g

97、t;  for (int i=0;i< arrayCuts.Count ;i++)</p><p><b>  {</b></p><p>  if (double.Parse((string)row[attribute.AttributeName])<arrayCuts.CutPoints [i].CutValue )</p><p&

98、gt;  {row[attribute.AttributeName]=arrayCuts.CutPoints [i].CutValue.ToString ();</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></

99、p><p>  //System.Console.WriteLine (arrayCuts.Count -1);</p><p>  //System.Console.WriteLine (row[attribute.AttributeName ]+"last:"+arrayCuts.CutPoints [arrayCuts.Count -1].ToString ());&

100、lt;/p><p>  if (double.Parse((string)row[attribute.AttributeName ])>arrayCuts.CutPoints [arrayCuts.Count -1].CutValue)</p><p>  row[attribute.AttributeName]="biggest";</p><p

101、><b>  }</b></p><p>  return table;</p><p><b>  }</b></p><p>  private ArrayCuts MinimizeCuts(ArrayCuts arrayCuts) //切點合并</p><p><b>  {

102、</b></p><p>  ArrayCuts tempCuts=new ArrayCuts();</p><p>  Cut tempCut;</p><p>  //System.Console .WriteLine (arrayCuts.Count.ToString ());</p><p>  for( int i=1;

103、i<arrayCuts.Count ;i++)</p><p><b>  {</b></p><p>  if ( arrayCuts.CutPoints[i].CValue!=arrayCuts.CutPoints[i-1].CValue )</p><p><b>  {</b></p><

104、;p>  tempCut=new Cut(arrayCuts.CutPoints[i-1].CutValue ,arrayCuts.CutPoints[i].Count+arrayCuts.CutPoints[i-1].Count,arrayCuts.CutPoints[i-1].CValue );</p><p>  tempCuts.AddCut (tempCut);</p><p

105、><b>  }</b></p><p><b>  }</b></p><p>  for (int i=1;i<tempCuts.Count;i++)</p><p><b>  {</b></p><p>  if (tempCuts.CutPoints

106、 [i].Count <=3)</p><p><b>  {</b></p><p>  tempCuts.CutPoints[i-1].Count +=tempCuts.CutPoints[i].Count;</p><p>  tempCuts.RemoveCut(i); //樣本數少的切點進行合并</p><

107、p><b>  }</b></p><p><b>  }</b></p><p>  arrayCuts=tempCuts;</p><p>  return arrayCuts;</p><p>  //System.Console .WriteLine (arrayCuts.Count.

108、ToString ());</p><p><b>  /*</b></p><p>  for( int i=0;i<arrayCuts.Count ;i++)</p><p><b>  {</b></p><p>  System.Console .WriteLine (arrayCut

109、s.CutPoints [i].CutValue .ToString ()+"Class:"+arrayCuts.CutPoints [i].CValue +"count: "+arrayCuts.CutPoints[i].Count.ToString ());</p><p><b>  }</b></p><p><

110、;b>  */</b></p><p><b>  }</b></p><p>  private void FindCuts(Attribute attribute,Attribute tAttribute,DataTable table)</p><p><b>  {</b></p>

111、<p>  int total=0;</p><p>  int[] cnum=new int[tAttribute.values.Length ];</p><p>  for(int i=1;i<discrete.Length ;i++)</p><p><b>  {</b></p><p>  

112、//System.Console.WriteLine (row[attribute.AttributeName]+"C:"+row[tAttribute.AttributeName]);</p><p>  if ( discrete[i-1]==discrete[i])</p><p><b>  { </b></p><p

113、>  if (total>=1 && i>1 )</p><p><b>  {</b></p><p>  Cut theCut=new Cut(discrete[i-2],total,target[i-2]);</p><p>  arrayCuts.AddCut (theCut);</p>

114、<p>  //System.Console .WriteLine ("the cut before intervalCUt:"+ discrete[i-2].ToString ()+ "total:" +total.ToString ());</p><p><b>  }</b></p><p>  int ito

115、tal=1; //itotal存此屬性相同樣本數</p><p>  for (int k=0;k<tAttribute.values.Length;k++)</p><p><b>  {</b></p><p>  if (target[i-1]==tAttribute.values[k])</p><p> 

116、 cnum[k]++;</p><p><b>  }</b></p><p>  while ( discrete[i-1]==discrete[i])</p><p><b>  {</b></p><p>  for (int k=0;k<tAttribute.values.Length

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論