




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
決策樹(shù)程序?qū)嶒?yàn)決策樹(shù)程序?qū)嶒?yàn)決策樹(shù)程序?qū)嶒?yàn)決策樹(shù)程序?qū)嶒?yàn)編制僅供參考審核批準(zhǔn)生效日期地址:電話:傳真:郵編:決策樹(shù)程序?qū)嶒?yàn)
眾所周知,數(shù)據(jù)庫(kù)技術(shù)從20世紀(jì)80年代開(kāi)始,已經(jīng)得到廣泛的普及和應(yīng)用。隨著數(shù)據(jù)庫(kù)容量的膨脹,特別是數(shù)據(jù)倉(cāng)庫(kù)以及web等新型數(shù)據(jù)源的日益普及,人們面臨的主要問(wèn)題不再是缺乏足夠的信息可以使用,而是面對(duì)浩瀚的數(shù)據(jù)海洋如何有效地利用這些數(shù)據(jù)。從數(shù)據(jù)中生成分類(lèi)器的一個(gè)特別有效的方法是生成一個(gè)決策樹(shù)(DecisionTree)。決策樹(shù)表示方法是應(yīng)用最廣泛的邏輯方法之一,它從一組無(wú)次序、無(wú)規(guī)則的事例中推理出決策樹(shù)表示形式的分類(lèi)規(guī)則。決策樹(shù)分類(lèi)方法采用自頂向下的遞歸方式,在決策樹(shù)的內(nèi)部結(jié)點(diǎn)進(jìn)行屬性值的比較并根據(jù)不同的屬性值判斷從該結(jié)點(diǎn)向下的分支,在決策樹(shù)的葉結(jié)點(diǎn)得到結(jié)論。所以從決策樹(shù)的根到葉結(jié)點(diǎn)的一條路徑就對(duì)應(yīng)著一條合取規(guī)則,整棵決策樹(shù)就對(duì)應(yīng)著一組析取表達(dá)式規(guī)則。決策樹(shù)是應(yīng)用非常廣泛的分類(lèi)方法,目前有多種決策樹(shù)方法,如ID3、CN2、SLIQ、SPRINT等。一、問(wèn)題描述相關(guān)信息決策樹(shù)是一個(gè)類(lèi)似于流程圖的樹(shù)結(jié)構(gòu),其中每個(gè)內(nèi)部結(jié)點(diǎn)表示在一個(gè)屬性上的測(cè)試,每個(gè)分支代表一個(gè)測(cè)試輸入,而每個(gè)樹(shù)葉結(jié)點(diǎn)代表類(lèi)或類(lèi)分布。數(shù)的最頂層結(jié)點(diǎn)是根結(jié)點(diǎn)。一棵典型的決策樹(shù)如圖1所示。它表示概念buys_computer,它預(yù)測(cè)顧客是否可能購(gòu)買(mǎi)計(jì)算機(jī)。內(nèi)部結(jié)點(diǎn)用矩形表示,而樹(shù)葉結(jié)點(diǎn)用橢圓表示。為了對(duì)未知的樣本分類(lèi),樣本的屬性值在決策樹(shù)上測(cè)試。決策樹(shù)從根到葉結(jié)點(diǎn)的一條路徑就對(duì)應(yīng)著一條合取規(guī)則,因此決策樹(shù)容易轉(zhuǎn)化成分類(lèi)規(guī)則。圖1ID3算法:■ 決策樹(shù)中每一個(gè)非葉結(jié)點(diǎn)對(duì)應(yīng)著一個(gè)非類(lèi)別屬性,樹(shù)枝代表這個(gè)屬性的值。一個(gè)葉結(jié)點(diǎn)代表從樹(shù)根到葉結(jié)點(diǎn)之間的路徑對(duì)應(yīng)的記錄所屬的類(lèi)別屬性值?!?每一個(gè)非葉結(jié)點(diǎn)都將與屬性中具有最大信息量的非類(lèi)別屬性相關(guān)聯(lián)?!?采用信息增益來(lái)選擇能夠最好地將樣本分類(lèi)的屬性。信息增益基于信息論中熵的概念。ID3總是選擇具有最高信息增益(或最大熵壓縮)的屬性作為當(dāng)前結(jié)點(diǎn)的測(cè)試屬性。該屬性使得對(duì)結(jié)果劃分中的樣本分類(lèi)所需的信息量最小,并反映劃分的最小隨機(jī)性或“不純性”。問(wèn)題重述1、目標(biāo)概念為“壽險(xiǎn)促銷(xiāo)”2、計(jì)算每個(gè)屬性的信息增益3、確定根節(jié)點(diǎn)的測(cè)試屬性模型求解構(gòu)造決策樹(shù)的方法是采用自上而下的遞歸構(gòu)造,其思路是:■ 以代表訓(xùn)練樣本的單個(gè)結(jié)點(diǎn)開(kāi)始建樹(shù)(步驟1)。■ 如果樣本都在同一類(lèi),則該結(jié)點(diǎn)成為樹(shù)葉,并用該類(lèi)標(biāo)記(步驟2和3)?!?否則,算法使用稱(chēng)為信息增益的機(jī)遇熵的度量為啟發(fā)信息,選擇能最好地將樣本分類(lèi)的屬性(步驟6)。該屬性成為該結(jié)點(diǎn)的“測(cè)試”或“判定”屬性(步驟7)。值得注意的是,在這類(lèi)算法中,所有的屬性都是分類(lèi)的,即取離散值的。連續(xù)值的屬性必須離散化?!?對(duì)測(cè)試屬性的每個(gè)已知的值,創(chuàng)建一個(gè)分支,并據(jù)此劃分樣本(步驟8~10)?!?算法使用同樣的過(guò)程,遞歸地形成每個(gè)劃分上的樣本決策樹(shù)。一旦一個(gè)屬性出現(xiàn)在一個(gè)結(jié)點(diǎn)上,就不必考慮該結(jié)點(diǎn)的任何后代(步驟13)?!?遞歸劃分步驟,當(dāng)下列條件之一成立時(shí)停止:(a)給定結(jié)點(diǎn)的所有樣本屬于同一類(lèi)(步驟2和3)。(b)沒(méi)有剩余屬性可以用來(lái)進(jìn)一步劃分樣本(步驟4)。在此情況下,采用多數(shù)表決(步驟5)。這涉及將給定的結(jié)點(diǎn)轉(zhuǎn)換成樹(shù)葉,并用samples中的多數(shù)所在類(lèi)別標(biāo)記它。換一種方式,可以存放結(jié)點(diǎn)樣本的類(lèi)分布。(c)分支test_attribute=ai沒(méi)有樣本。在這種情況下,以samples中的多數(shù)類(lèi)創(chuàng)建一個(gè)樹(shù)葉(步驟12)。算法 Decision_Tree(samples,attribute_list)輸入 由離散值屬性描述的訓(xùn)練樣本集samples;候選屬性集合attribute_list。輸出 一棵決策樹(shù)。(1)創(chuàng)建節(jié)點(diǎn)N;(2)Ifsamples都在同一類(lèi)C中then(3)返回N作為葉節(jié)點(diǎn),以類(lèi)C標(biāo)記;(4)Ifattribute_list為空then(5)返回N作為葉節(jié)點(diǎn),以samples中最普遍的類(lèi)標(biāo)記;quals("")){ StringTokenizertokenizer=newStringTokenizer(str); while()){ ()); } } returncandAttr; } /** *讀取訓(xùn)練元組 *@return訓(xùn)練元組集合 *@throwsIOException */ publicArrayList<ArrayList<String>>readData()throwsIOException{ ArrayList<ArrayList<String>>datas=newArrayList<ArrayList<String>>(); BufferedReaderreader=newBufferedReader(newInputStreamReader); Stringstr=""; while(!(str=()).equals("")){ StringTokenizertokenizer=newStringTokenizer(str); ArrayList<String>s=newArrayList<String>(); while()){ ()); } (s); } returndatas; } /** *遞歸打印樹(shù)結(jié)構(gòu) *@paramroot當(dāng)前待輸出信息的結(jié)點(diǎn) */ publicvoidprintTree(TreeNoderoot){ "name:"+()); ArrayList<String>rules=(); "noderules:{"); for(inti=0;i<();i++){ +""); } "}"); ""); ArrayList<TreeNode>children=(); intsize=(); if(size==0){ "-->leafnode!<--"); }else{ "sizeofchildren:"+()); for(inti=0;i<();i++){ "child"+(i+1)+"ofnode"+()+":"); printTree(i)); } } } /** *主函數(shù),程序入口 *@paramargs */ publicstaticvoidmain(String[]args){ TestDecisionTreetdt=newTestDecisionTree(); ArrayList<String>candAttr=null; ArrayList<ArrayList<String>>datas=null; try{ "請(qǐng)輸入候選屬性"); candAttr=(); "請(qǐng)輸入訓(xùn)練數(shù)據(jù)"); datas=(); }catch(IOExceptione){ (); } DecisionTreetree=newDecisionTree(); TreeNoderoot=(datas,candAttr); (root); }}packageDecisionTree;import*選擇最佳分裂屬性*/publicclassGain{ privateArrayList<ArrayList<String>>D=null;et(attrIndex); if(!(r)){ (r); } } returnvalues; } /** *獲取指定數(shù)據(jù)集中指定屬性列索引的域值及其計(jì)數(shù) *@paramd指定的數(shù)據(jù)集 *@paramattrIndex指定的屬性列索引 *@return類(lèi)別及其計(jì)數(shù)的map */ publicMap<String,Integer>valueCounts(ArrayList<ArrayList<String>>datas,intattrIndex){ Map<String,Integer>valueCount=newHashMap<String,Integer>(); Stringc=""; ArrayList<String>tuple=null; for(inti=0;i<();i++){ tuple=(i); c=(attrIndex); if(c)){ (c,(c)+1); }else{ (c,1); } } returnvalueCount; } /** *求對(duì)datas中元組分類(lèi)所需的期望信息,即datas的熵 *@paramdatas訓(xùn)練元組 *@returndatas的熵值 */ publicdoubleinfoD(ArrayList<ArrayList<String>>datas){ doubleinfo=; inttotal=(); Map<String,Integer>classes=valueCounts(datas,()); Iteratoriter=().iterator(); Integer[]counts=newInteger[()]; for(inti=0;();i++) { entry=(); Integerval=(Integer)(); counts[i]=val; } for(inti=0;i<;i++){ doublebase=(counts[i],total,3); info+=(-1)*base*(base); } returninfo; } /** *獲取指定屬性列上指定值域的所有元組 *@paramattrIndex指定屬性列索引 *@paramvalue指定屬性列的值域 *@return指定屬性列上指定值域的所有元組 */ publicArrayList<ArrayList<String>>datasOfValue(intattrIndex,Stringvalue){ ArrayList<ArrayList<String>>Di=newArrayList<ArrayList<String>>(); ArrayList<String>t=null; for(inti=0;i<();i++){ t=(i); if(attrIndex).equals(value)){ (t); } } returnDi; } /** *基于按指定屬性劃分對(duì)D的元組分類(lèi)所需要的期望信息 *@paramattrIndex指定屬性的索引 *@return按指定屬性劃分的期望信息值 */ publicdoubleinfoAttr(intattrIndex){ doubleinfo=; ArrayList<String>values=getValues(D,attrIndex); for(inti=0;i<();i++){ ArrayList<ArrayList<String>>dv=datasOfValue(attrIndex,(i)); info+=(),(),3),infoD(dv)); } returninfo; } /** *獲取最佳分裂屬性的索引 *@return最佳分裂屬性的索引 */ publicintbestGainAttrIndex(){ intindex=-1; doublegain=; doubletempGain=; for(inti=0;i<();i++){ tempGain=infoD(D)-infoAttr(i); if(tempGain>gain){ gain=tempGain; index=i; } } returnindex; }}packageDecisionTree;import.*;/***決策樹(shù)構(gòu)造類(lèi)*/publicclassDecisionTree{ privateIntegerattrSelMode;terator(); for(inti=0;();i++) { entry=(); Stringkey=(String)(); Integerval=(Integer)(); if(val>max){ max=val; maxC=key; } } returnmaxC; } /** *構(gòu)造決策樹(shù) *@paramdatas訓(xùn)練元組集合 *@paramattrList候選屬性集合 *@return決策樹(shù)根結(jié)點(diǎn) */ publicTreeNodebuildTree(ArrayList<ArrayList<String>>datas,ArrayList<String>attrList){emove(bestAttrIndex); } if()==0){ TreeNodeleafNode=newTreeNode(); (maxC); (di); (attrList); ().add(leafNode); }else{ TreeNodenewNode=buildTree(di,attrList); ().add(newNode); } } returnnode; }}packageDecisionTree;importpublicclassDecimalCalculate{/***由于Java的簡(jiǎn)單類(lèi)型不能夠精確的對(duì)浮點(diǎn)數(shù)進(jìn)行運(yùn)算,這個(gè)工具類(lèi)提供精*確的浮點(diǎn)數(shù)運(yùn)算,包括加減乘除和四舍五入。*/oubleValue(); } /** *提供精確的減法運(yùn)算。 *@paramv1被減數(shù) *@paramv2減數(shù) *@return兩個(gè)參數(shù)的差 */ publicstaticdoublesub(doublev1,doublev2){ BigDecimalb1=newBigDecimal(v1)); BigDecimalb2=newBigDecimal(v2)); return(b2).doubleValue(); } /** *提供精確的乘法運(yùn)算。 *@paramv1被乘數(shù) *@paramv2乘數(shù) *@return兩個(gè)參數(shù)的積 */ publicstaticdoublemul(doublev1,doublev2){ BigDecimalb1=newBigDecimal(v1)); BigDecimalb2=newBigDecimal(v2)); return(b2).doubleValue(); } /** *提供(相對(duì))精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時(shí),精確到 *小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入。 *@paramv1被除數(shù) *@paramv2除數(shù) *@return兩個(gè)參數(shù)的商 */ publicstaticdoublediv(doublev1,doublev2){ returndiv(v1,v2,DEF_DIV_SCALE); } /** *提供(相對(duì))精確的除法運(yùn)算。當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指 *定精度,以后的數(shù)字四舍五入。 *@paramv1被除數(shù) *@paramv2除數(shù) *@paramscale表示表示需要精確到小數(shù)點(diǎn)以后幾位。 *@return兩個(gè)參數(shù)的商 */ publicstaticdoublediv(doublev1,doublev2,intscale){ if(scale<0){ thrownewIllegalArgumentException( "Thescalemustbeapositiveintegerorzero"); } BigDecimalb1=newBigDecimal(v1)); BigDecimalb2=newBigDecimal(v2)); return(b2,scale,.doubleValue(); } /** *提供精確的小數(shù)位四舍五入處理。 *@paramv需要四舍五入的數(shù)字 *@paramscale小數(shù)點(diǎn)后保留幾位 *@return四舍五入后的結(jié)果 */ publicstaticdoubleround(doublev,intscale){ if(scale<0){ thrownewIllegalArgumentException( "Thescalemustbeapositiveintegerorzero"); } BigDecimalb=newBigDecimal(v)); BigDecimalone=newBigDecimal("1"); return(one,scale,.doubleValue(); } /** *提供精確的類(lèi)型轉(zhuǎn)換(Float) *@paramv需要被轉(zhuǎn)換的數(shù)字 *@return返回轉(zhuǎn)換結(jié)果 */ publicstaticfloatconvertsToFloat(doublev){ BigDecimalb=newBigDecimal(v); return(); } /** *提供精確的類(lèi)型轉(zhuǎn)換(Int)不進(jìn)行四舍五入 *@paramv需要被轉(zhuǎn)換的數(shù)字 *@return返回轉(zhuǎn)換結(jié)果 */ publicstaticintconvertsToInt(doublev){ BigDecimalb=newBigDecimal(v); return(); } /** *提供精確的類(lèi)型轉(zhuǎn)換(Long) *@paramv需要被轉(zhuǎn)換的數(shù)字 *@return返回轉(zhuǎn)換結(jié)果 */ publicstaticlongconvertsToLong(doublev){ BigDecimalb=newBigDecimal(v); return(); } /** *返回兩個(gè)數(shù)中大的一個(gè)值 *@paramv1需要被對(duì)比的第一個(gè)數(shù) *@paramv2需要被對(duì)比的第二個(gè)數(shù) *@return返回兩個(gè)數(shù)中大的一個(gè)值 */ pub
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工人聘用合同(30篇)
- 廣東2025年01月廣州市荔灣區(qū)嶺南街道市容環(huán)境衛(wèi)生管理站招考2名財(cái)務(wù)人員筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 互聯(lián)網(wǎng)房地產(chǎn)案例主題典型數(shù)字技術(shù)簡(jiǎn)介課件
- 跨區(qū)域疫情下的社會(huì)心理干預(yù)措施
- 工程結(jié)算實(shí)操篇92課件
- 工程結(jié)算20課件
- 北京2025年01月北京市昌平區(qū)統(tǒng)計(jì)局面向社會(huì)公開(kāi)招考1名統(tǒng)計(jì)輔助調(diào)查員(勞務(wù)派遣)筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 恩施土家族苗族自治州建始縣2025屆數(shù)學(xué)三下期末質(zhì)量跟蹤監(jiān)視試題含解析
- 伊春市上甘嶺區(qū)2025年四年級(jí)數(shù)學(xué)第二學(xué)期期末達(dá)標(biāo)檢測(cè)試題含解析
- 廣靈縣2024-2025學(xué)年數(shù)學(xué)五年級(jí)第二學(xué)期期末復(fù)習(xí)檢測(cè)模擬試題含答案
- 預(yù)防校園欺凌主題班會(huì)課件(共36張課件)
- 金屬非金屬地下礦山安全生產(chǎn)技術(shù)課件
- 高中課程表模板1
- 兒童抑郁量表CDI
- 財(cái)務(wù)會(huì)計(jì)ppt課件(完整版)
- 水是生命之源幻燈
- 采場(chǎng)頂板(幫壁)分級(jí)管理制度
- 瀝青路面車(chē)轍病害及抗車(chē)轍劑解決方案
- 金屬風(fēng)管支架重量計(jì)算表
- 從業(yè)務(wù)骨干到管理者(課堂PPT)
- 新三板知識(shí)測(cè)評(píng)考題答案
評(píng)論
0/150
提交評(píng)論