




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、實驗三:分類算法實驗智能 1402 201408070221 李帥玲目錄實驗三:分類算法實驗 1一實驗目的 2二實驗的硬件、軟件平臺 2三實驗內(nèi)容及步驟 2四、思考題: 2五實驗報告 3(一)算法的基本原理 3(二)實驗框架與結(jié)果 41. 汽車評估數(shù)據(jù)集 42. 程序框架 63. 實驗結(jié)果 6(三)實驗分析和思考題 7(四)實驗源代碼 8實驗目的1. 了解樸素貝葉斯算法和決策樹算法的基本原理;2. 能夠使用樸素貝葉斯算法 或者 決策樹算法對數(shù)據(jù)進行分類3. 學會對于分類器的性能評估方法二實驗的硬件、軟件平臺硬件:計算機軟件:操作系統(tǒng): WINDOWS8.1應用軟件: Java三實驗內(nèi)容及步驟(
2、一)實驗內(nèi)容:利用貝葉斯算法或者決策樹算法進行數(shù)據(jù)分類操作 數(shù)據(jù)集:汽車評估數(shù)據(jù)集 ( 見附錄)(二)實驗步驟:1仔細閱讀并了解實驗數(shù)據(jù)集;2使用任何一種熟悉的計算機語言 ( 比如 C,Java 或者 matlab) 實現(xiàn)樸素貝葉斯算法或者決策樹 算法;3利用樸素貝葉斯算法或者決策樹算法在訓練數(shù)據(jù)上學習分類器, 訓練數(shù)據(jù)的大小分別設置為:前 100個數(shù)據(jù),前 200個數(shù)據(jù),前 500個數(shù)據(jù),前 700個數(shù)據(jù),前 1000個數(shù)據(jù),前 1350個數(shù)據(jù); 4利用測試數(shù)據(jù)對學習的分類器進行性能評估;5統(tǒng)計分析實驗結(jié)果并上交實驗報告;四、思考題:1. 兩種算法在訓練數(shù)據(jù)集和測試數(shù)據(jù)集上的性能一致嗎?哪個
3、比較好?2. 提出一種提高分類器性能的方法并通過實驗驗證。五實驗報告J算法的基本原理貝葉斯定理:表示事件X已經(jīng)發(fā)生的前提下,事件Y發(fā)生的概率,叫做事件X發(fā)生下事件Y的條件概率,其基本求解公式為:樸素貝葉斯分類器:=argmax P(ava2)an| v) P(vj樸素貝葉斯的思想基礎是這樣的: 對于給出的待分類項,求解在此項出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認為此待分類項屬于哪個類別。樸素貝葉斯分類的正式定義如下:1、設加1 G陰.嚴扯"応礎訃為一個待分類項,而每個 a為x的一個特征屬性。2、 有類別集合【二八沐:3、 計算F(如迓(呦"r F(如玖4、 如果F如
4、叨=啊處叭“F(血陰,則® $隸。那么現(xiàn)在的關鍵就是如何計算第 3步中的各個條件概率。我們可以這么做:1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。2、統(tǒng)計得到在各類別下各個特征屬性的條件概率估計。即戸仏I如)仙血佃iMh卩仙阪. P(2血z珂砧畫);圳)3、如果各個特征屬性是條件獨立的,則根據(jù)貝葉斯定理有如下推導:因為分母對于所有類別為常數(shù),因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有: 整個樸素貝葉斯分類分為三個階段:第一階段:準備工作階段,這個階段的任務是為樸素貝葉斯分類做必要的準備,主要工作是根據(jù)具體情況確定特征屬性,并對每個特征屬性進行適
5、當劃分,然后由人工對一部分待分類項進行分類,形成訓練樣本集合。這一階段的輸 入是所有待分類數(shù)據(jù),輸出是特征屬性和訓練樣本。這一階段是整個樸素貝葉斯分類中唯一需要人工完成的階段, 其質(zhì)量對整個過程將有重要影響,分類器的質(zhì)量很大程度上由特征屬性、特征屬性劃分及訓練樣本質(zhì)量決定。第二階段:分類器訓練階段,這個階段的任務就是生成分類器,主要工作是計算每個類別在訓練樣本中的出現(xiàn)頻率及每個特征屬性劃分對每個類別的條件概率估計,并將結(jié)果記錄。其輸入是特征屬性和訓練樣本,輸出是分類器。這一階段是機械性階段,根據(jù)前面討論的公式可以由程序自動計算完成。第三階段:應用階段。這個階段的任務是使用分類器對待分類項進行分
6、類,其輸入是分類器和待分類項,輸出是待分類項與類別的映射關系。這一階段也是機械性階段,由程序完成。決策樹:決策樹是一個類似于流程圖的樹結(jié)構(gòu),其中每個內(nèi)部結(jié)點表示在一個屬性上的測試,每個分支代表一個測試輸入,而每個樹葉結(jié)點代表類或類分布。數(shù)的最頂層結(jié)點是根結(jié)點。一棵典型的決策樹如圖所示。它表示概念buys_computer,它預測顧客是否可能購買計算機。內(nèi)部結(jié)點用矩形表示,而樹葉結(jié)點用橢圓表示。為了對未知的 樣本分類,樣本的屬性值在決策樹上測試。決策樹從根到葉結(jié)點的一條路徑就對應著一條合取規(guī)則,因此決策樹容 易轉(zhuǎn)化成分類規(guī)則。(二)實驗框架與結(jié)果1. 汽車評估數(shù)據(jù)集汽車評估數(shù)據(jù)集包含1728個數(shù)
7、據(jù),其中訓練數(shù)據(jù)1350,測試數(shù)據(jù) 個。每個數(shù)據(jù)包含6個屬性,所有的數(shù)據(jù)分為4類:Class Values:un acc, acc, good, vgoodAttributes:buying: vhigh, high, med, low.maint: vhigh, high, med, low.doors: 2, 3, 4, 5more.pers ons: 2, 4, more.lug_boot: small, med, big.safety: low, med, high.部分訓練集截圖:learn.twt 車-vhlghj Thl2r 2 small, low, imacc vhi 氐h*
8、 Thigh, 'A, 2sual 1 f mpd” unacc vtiigh, vhi呂h 2. 2】small, hi£h, unacc vhigh, Thigh, 2, 2】ned, 1 ov, unacc vhigh, vhl呂h, 2, 2 nsd” iubiL, unacc vhigh, vhigh. 2r 2, hi unacc vhieh 2, 2, bi g, low, unaccvhigH, yhigli, 2, 2, big, neil, unacc vhish* vhi2, 2, bigj hi名h,unace vhigh, vhieh, 2, 4,
9、srnll, low, unacc vlllsll, Th! 11, 2, 4; SBLdll, IJLtill, llILdCC Thigh, vhigli, 2, 4: small! hlgji, unaec vhigh, vhi 2, 43 ned, 1 oir una de vhishR vhiph 2, 4, ned, me山 unacc vhj.ghp 常hi醫(yī)h, 2, 4: med, high, unaCC vhiahF vhi2h 4j big1 ow1 unacc vhi ghP vhieti, 2, 4, bi g, ned, irnaec viiigii, vliigh
10、, 2, 4: bls, high, uuacc vhigh, vhigh, 2, morc3 snail, low, uagcc vhi&h, vhi'2, moro, silaIIujciacc vhish. vhiBh, 2, more, small, high* unacc viiigli, vlii gli, 2, Mui'ti, mud, luv, uuacc vhi&hp vhigh, 2, moro, MUid, nod, unacc vhi ghF vhi gti, 2, mnrp, hi eh, unacc vhigh. 2, mure, b
11、it, luvT uniicc;vhigh, irhigh, 2f more, big, ned, unacc部分測試集截圖:test, txt -記尋文蹴町褊輯巳宿式Q直看(V)務助巴low, vhigh, 4, 2, small, low, unacc low> vhigh, 4, 2, small, jwd, unacc low, vhigh, 4, 2, smll? high, unacc low, vhigh, 4, 2r mad, low, unacc 1 aw, vhi gh, 4, 2, ulbd, nodT unacc low, vhigh, |4f 2, med, h
12、ighj unacc low, vhigh, 4, 2, big, low, unacc 1 oWj vhi gh, 4, 2, bimed. una.ce 1 awr vhi ghj 4T 2, hi gh, unacc low, vhigh, 4, 4, small, lew, iinacc low, vhi gh, 4, 4, small, med, unacc 1 cbw, vhighj 44, smallj highj acc 1 civf, vhi gh, 4* 4, m.ed, Lovtr unacc low, vhigh, 4, 4)med, med, acc law, vhi
13、 gh, 4, 4, uiEd, high3 acc low, vhighj 4, 4. bi壓,low, una.ee low, vhi gh 1, 4)bi&, med. ace low, vhigh, 4, 4, bi g, high, acc low, vhigh, 4, more, small, low, unacc 1 ow, vhi gh, 4, iuqte, smal 1, ined, unacc 1 ow, vhighj 4, rooTe, small, high, acc2. 程序框架i獲取訓練樣本2. 對每個類別進行統(tǒng)計(Class Values: unacc,
14、acc, good, vgood3. 對每個屬性進行統(tǒng)計(buying: vhigh, high, med, low.ma int: vhigh, high, med, low.doors: 2, 3, 4, 5more.pers ons: 2, 4, more.lug_boot: small, med, big.safety: low, med, high.)4. 計算并存儲每個屬性在類別中的條件概率,例如P(buing:vhigh | class value:unacc)= ( buing中vhigh的數(shù)量)除以(classValue 中 unacc 的數(shù)量)5. 獲取測試集樣本,將測試數(shù)
15、據(jù)放入訓練集6. 根據(jù)每一條測試數(shù)據(jù)的前六項,每一項在訓練集的每個類別中都分別有一個概率值,將每一類別中六個概率值相乘,可得四個評估概率。例如,對于測試數(shù)據(jù)(low,vhigh,4,2,small,low,u nacc)評價結(jié)果 V1=p(low|unacc)*p(vhigh |unacc)*p(4 |unacc)*p(2 |unacc)*p(small |unacc)*p(low,|unacc)V2=p(low|acc)*p(vhigh |acc)*p(4 |acc)*p(2 |acc)*p(small |acc)*p(low,|acc)V3=p(low|good)*p(vhigh |goo
16、d)*p(4 |good)*p(2 |good)*p(small |good)*p(low,|good)V4=p(low|vgood)*p(vhigh |vgood)*p(4 |vgood)*p(2 |vgood)*p(small |vgood)*p(low,|vgood)比較VI、V2、V3、V4中概率最大的評價,可得評價結(jié)果7. 對評估概率進行比價,可得最大概率,最大概率指向的類別即為測試結(jié)果8. 測試結(jié)果與測試數(shù)據(jù)最后一項進行比對,若相同表示測試正確,返回true,反之,若不相同,則返回false。9. 統(tǒng)計true的數(shù)量,除以測試樣本數(shù)量,可得分類器的準確率。3. 實驗結(jié)果部分截圖:f
17、alsefalsetruefalsefalsetruef alsfalsetruefalsefalsetruefa la efalse分類器的淮確率為:ga.7S306C得知:此種訓練集下得到的樣本測試準確率為68.78%左右。樸素貝葉斯的測試性能與訓練集有關,訓練集好則準確率高。(三) 實驗分析和思考題1. 兩種算法在訓練數(shù)據(jù)集和測試數(shù)據(jù)集上的性能一致嗎?哪個比較好?決策樹有比較好的準確率和相對較好的標準誤差,但是在這背后,很有可能是以較大錯誤率作為代價,這點可以從訓練混淆矩陣中得到印證;而樸素貝葉斯分類算法的準確率相對較低,而標準誤差也較高。樸素貝葉斯算法時間復雜度:0( n3)決策樹算法
18、時間復雜度:0(n*|S|*log|S|)其中l(wèi)og以2為底,n為屬性的個數(shù),|S|為訓練樣本的個數(shù)而且樸素貝葉斯可能存在 0概率問題存在準確度問題,樸素貝葉斯分類器是基于樣本屬性條件獨立的假設的前提下的,但是實際情況可能并不成立,這樣也就缺失準確性了 解決樸素貝葉斯準確性問題提出的一種方法叫做:貝葉斯網(wǎng)絡(Bayesian Belief Networks )2. 提出一種提高分類器性能的方法并通過實驗驗證。Adaboost :基于錯誤提升分類器的性能Adaboost是一種迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器,即弱分類器,然后把這些弱分類器集合起來,構(gòu)造一個更強的最終分類器,
19、比起弱分類器,這個“強”分類器的錯誤率會低很多。Adaboost算法本身是改變數(shù)據(jù)分布實現(xiàn)的,它根據(jù)每次訓練集之中的每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改權值的新數(shù)據(jù)送給下層分類器進行訓練,然后將每次訓練D, 開始時權重 D初始化為相等的值;得到的分類器融合起來,作為最后的決策分類器。以下給出Adaboost算法的運行過程:1. 訓練數(shù)據(jù)中的每個樣本,并賦予其一個權重,這些權重構(gòu)成向量2. 先在訓練樣本上訓練得到第一個弱分類器并計算分類器的錯誤率 ;3. 在同一數(shù)據(jù)集上再次訓練弱分類器,在分類器的二次訓練中,會重新調(diào)整每個樣本的權重,其中第一次分類正確
20、的樣本的權重將會降低,而分類錯誤的樣本權重將會提高;這一組4. 為了從所有弱分類器中得到最終的分類結(jié)果,Adaboost為每個分類器都分配了一個權重值alpha,值是基于每個弱分類器的錯誤率進行計算的。其中,錯誤率由以下公式定義:耒止準分婁的樣衣彳、斂所有樣本個數(shù)忤)(四)實驗源代碼package rgzn;import java.io.BufferedReader;import java.io.File;import java.io.FileNotF oun dExceptio n;import java.io.FileReader;import java.i o.ln putStreamR
21、eader;import java.math.BigDecimal;import java .n et.URL;import java.util.ArrayList;import java.util.Sca nner;import java.util.Vector;*樸素貝葉斯* author Dyl*/汽車屬性class Car public String buying;/ vhigh,high,med,lowpublic String main t;/ vhigh,high,med,lowpublic String doors;/ 2,3,4,5morepublic String pers
22、 ons; 2,4,morepublic String lug_boot;/ small ,med,bigpublic String safety;/ low,med,highpublic String ClassValues;/ un acc,acc, good,vgoodpublic Stri ng predictResult = new Stri ng5;記錄預測結(jié)果 public class NavieBayes Vector<Car> vector;int testTotal = 0;/ 訓練樣本數(shù)量int predictTotal = 0;/ 測試樣本的數(shù)據(jù)int pr
23、edictSucess = 0;/ 預測成功的數(shù)量String ClassValueName = "unacc", "acc", "good", "vgood" ;/ 存儲數(shù)量int ClassValueTotal = new int4;/ unacc-0 acc-1 good-2 vgood-3int buying_Vlaue = new int44; / 前面是自己的屬性,后面是 value 的屬性 int maint_Value = new int44;int doors_Value = new int44;
24、int persons_Value = new int34;int lugboot_Value = new int34;int safety_Value = new int34;/ 存儲概率float ClassValueTotal_gl = new float4;/ unacc-0 acc-1 good-2 vgood-3float buying_Vlaue_gl = new float44; / 前面是自己的屬性,后面是 value 的屬性 float maint_Value_gl = new float44;float doors_Value_gl = new float44;float
25、 persons_Value_gl = new float34;float lugboot_Value_gl = new float34;float safety_Value_gl = new float34;public NavieBayes() vector = new Vector<Car>();/ 存儲數(shù)據(jù)/* 主函數(shù)*/public static void main(String args) throws Exception NavieBayes pSbys = new NavieBayes(); pSbys.getData();/ 獲取訓練樣本pSbys.dataTes
26、t();傳入測試樣本數(shù)據(jù),檢測其分類器的性能 pSbys.showGL();/ 展示結(jié)果*/統(tǒng)計數(shù)量,為計算概率做準備private void dataTongJi(Car car) for(int i=0;i<4;i+)if(car.ClassValues.equals(ClassValueNamei)ClassValueTotali+;/buying:vhigh,high,med,low if(car.buying.equals("vhigh") buying_Vlaue0i+; else if(car.buying.equals("high"
27、)buying_Vlaue1i+; else if(car.buying.equals("med") buying_Vlaue2i+;else buying_Vlaue3i+; /maint_Value:vhigh,high,med,low if(car.maint.equals("vhigh") maint_Value0i+; else if(car.maint.equals("high") maint_Value1i+; else if(car.maint.equals("med") maint_Value2i
28、+; else maint_Value3i+; /doors_Value:2,3,4,5more if(car.doors.equals("2") doors_Value0i+; else if(car.doors.equals("3") doors_Value1i+; else if(car.doors.equals("4") doors_Value2i+; else doors_Value3i+; /persons_Value:2,4,more if(car.persons.equals("2") person
29、s_Value0i+; else if(car.persons.equals("4") persons_Value1i+; else persons_Value2i+;/lugboot_Value:small ,med,big if(car.lug_boot.equals("small") lugboot_Value0i+; else if(car.lug_boot.equals("med") lugboot_Value1i+; else lugboot_Value2i+; /safety_Value:low,med,high if(
30、car.safety.equals("low") safety_Value0i+; else if(car.safety.equals("med") safety_Value1i+; else safety_Value2i+;/* * * 概率統(tǒng)計*/private void gailvTongJi() for (int i = 0; i < ClassValueTotal.length; i+) ClassValueTotal_gli = (float) ClassValueTotali / testTotal;for (int i = 0; i
31、 < buying_Vlaue_gl.length; i+) for (int j = 0; j < buying_Vlaue_gl0.length; j+) buying_Vlaue_glij = (float) buying_Vlaueij / ClassValueTotalj;maint_Value_glij = (float) maint_Valueij / ClassValueTotalj;doors_Value_glij = (float) doors_Valueij / ClassValueTotalj;for (int i = 0; i < persons_V
32、alue_gl.length; i+) for (int k = 0; k < persons_Value_gl0.length; k+) persons_Value_glik = (float) persons_Valueik / ClassValueTotalk;lugboot_Value_glik = (float) lugboot_Valueik/ ClassValueTotalk; safety_Value_glik = (float) safety_Valueik / ClassValueTotalk;/ 結(jié)果顯示/for (int j = 0; j < c.predi
33、ctResult.length; j+) /System.out.print(c.predictResultj + "tt");/private void showGL() for (int i = 0; i < predictTotal; i+) Car c = vector.get(i);System.out.print(c.predictResultc.predictResult.length-1 + "tt"); System.out.println();/ 分類器的準確率float t = (float) predictSucess /
34、predictTotal;t = (t * 1000) / 10;System.out.println("n 分類器的準確率為: " + t + "%");* 給定測試樣本,測試其分類器性能如何* 讀取數(shù)據(jù)* throws FileNotFoundException*/private void dataTest() throws FileNotFoundException InputStreamReader in = new InputStreamReader(getClass() .getResourceAsStream("test.txt&
35、quot;);Scanner scanner = new Scanner(in); while (scanner.hasNext() predictTotal+;String temp = scanner.nextLine().split(","); Car car = new Car(); car.buying = temp0;car.maint = temp1; car.doors = temp2; car.persons = temp3; car.lug_boot = temp4; car.safety = temp5; car.ClassValues = temp6
36、; vector.add(car);xingnengTest(car);/ 性能測試 * 對分類器進行性能測試,判斷其成功率為多少* param car*/private void xingnengTest(Car car) / unacc,acc,good,vgood, P(yi)-ClassValueTotal_gl 、 P(x|yi)=/ low,vhigh,4,2,small,low,unacc 第一條float itemGl;/ 每一條的概率int b, m, d, p, l, s;b = m = d = p = l = s = -1;float MaxGl = 0;/ 臨時概率if
37、 (car.buying.equals("vhigh") b = 0; else if (car.buying.equals("high") b = 1; else if (car.buying.equals("med") b = 2; else b = 3;if (car.maint.equals("vhigh") m = 0; else if (car.maint.equals("high") m = 1; else if (car.maint.equals("med")
38、 m = 2; else m = 3;if (car.doors.equals("2") d = 0; else if (car.doors.equals("3") d = 1; else if (car.doors.equals("4") d = 2; else d = 3;if (car.persons.equals("2") p = 0; else if (car.persons.equals("4") p = 1; else p = 2;if (car.lug_boot.equals(&
39、quot;small") l = 0; else if (car.lug_boot.equals("med") l = 1; else l = 2;if (car.safety.equals("low") s = 0; else if (car.safety.equals("med") s = 1; else s = 2;int t = 0;/ 記錄最大概率的下標int i;/ 如:/ unacc/ low(0.038),vhigh(0.329),4(0.2323),2(0.4545),small(0.3737),low(0.4545),unacc()for (i = 0; i < ClassValueTotal_gl.length; i+) / 計算在 unacc,acc,good,vgood 下的概率 itemGl = 0;B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度職業(yè)教育培訓機構(gòu)導師聘用合同
- 2025年度綠色能源合資項目合同范本
- 二零二五年度時尚服飾店門面房買賣協(xié)議
- 二零二五年度演出活動主辦方觀眾免責協(xié)議模板
- 二零二五年度綜合醫(yī)院與??漆t(yī)院雙向轉(zhuǎn)診合作協(xié)議書
- 2025年度航空航天知識產(chǎn)權保護及保密合同
- 二零二五年度退股股權變更與風險控制協(xié)議
- 2025年度裝修公司拖欠工資無勞動合同糾紛解決協(xié)議
- 二零二五年度金融科技內(nèi)部股東股權轉(zhuǎn)讓合同范本
- 二零二五年度石英石采礦權轉(zhuǎn)讓合同
- 2025山西國際能源集團有限公司所屬企業(yè)社會招聘258人筆試參考題庫附帶答案詳解
- 醫(yī)學遺傳學教案-山東大學醫(yī)學遺傳學
- 四川德陽歷年中考語文文言文閱讀試題12篇(含答案與翻譯)(截至2024年)
- 合唱之美知到智慧樹章節(jié)測試課后答案2024年秋山東航空學院
- 中國卒中學會急性缺血性卒中再灌注治療指南+2024解讀
- 海南省澄邁縣2024-2025學年七年級上學期期末考試地理試題(含答案)
- 人工智能應用概論(第2版) 教案全套 莫少林
- 食品安全演練預案及流程
- 2025年蘇州衛(wèi)生職業(yè)技術學院高職單招職業(yè)技能測試近5年常考版參考題庫含答案解析
- 2025屆威海市高三語文上學期期末考試卷附答案解析
評論
0/150
提交評論