ID3演算法的java實現

2021-07-07 06:06:15 字數 4349 閱讀 9325

id3演算法是經典的決策樹學習生成演算法。id3演算法的核心是在決策樹各個節點上運用資訊增益準則選擇特徵,遞迴的構建決策樹。具體方法是:從根節點(root node)開始,對接點計算所有可能的特徵的資訊增益,選擇資訊增益最大的特徵作為節點的特徵,有該特徵的不同取值建立子節點;再對子節點遞迴的呼叫以上方法,構建決策樹;直到所有的特徵的資訊增益均很小或者沒有特徵可以選取為止。最後得到乙個決策樹。要理解id3演算法,需要先了解一些基本的資訊理論概念,包括資訊量,熵,後驗熵,條件熵。

/** 

* c4.5決策樹資料結構

*@author zhenhua.chen

*@description: todo

*@date 2013-3-1 上午10:47:37

* */

public

class

treenode

public string getnodename()

public

void

setnodename(string nodename)

public listgetsplitattributes()

public

void

setsplitattributes(listsplitattributes)

public arraylistgetchildrennodes()

public

void

setchildrennodes(arraylistchildrennodes)

public arraylist> getdataset()

public

void

setdataset(arraylist> dataset)

public arraylistgetarrributeset()

public

void

setarrributeset(arraylistarrributeset)

}

/** 

* 構造決策樹的類

*@author zhenhua.chen

*@description: todo

*@date 2013-3-1 下午4:42:07

* */

public

class

decisiontree

} arraylistsplitattributes = computeutil.gettypes(dataset, index); // 獲取該節點下的**屬性

node.setsplitattributes(splitattributes);

node.setnodename(attributeset.get(index));

// 判斷每個屬性列是否需要繼續**

for(int i = 0; i < splitattributes.size(); i++) else

} arraylist> newdataset = new arraylist>();

for(arraylistdata : splitdataset)

} newdataset.add(tmp);

} childnode = buildtree(newdataset, newattributeset); // 遞迴建樹

} node.getchildrennodes().add(childnode);

} return node;

} /**

* 列印建好的樹

*@param root

*/public

void

printtree(treenode root)

} else

if(null != root.getchildrennodes())

} }

/**

* *@title: searchtree

*@description: 層次遍歷樹

*@return void

*@throws

*/public

void

searchtree(treenode root)

} else

if(null != node.getchildrennodes())

} }

} }

/** 

* c4.5演算法所需的各類計算方法

*@author zhenhua.chen

*@description: todo

*@date 2013-3-1 上午10:48:47

* */

public

class

computeutil

} return list;

} /**

* 獲取指定資料集中指定屬性列的各個類別及其計數

*@title: getclasscounts

*@description: todo

*@return map*@throws

*/public

static mapgettypecounts(arraylist> dataset, int columnindex) else

} return map;

} /**

* 獲取指定列上指定類別的資料集合(**後的資料子集)

*@title: getdataset

*@description: todo

*@return arraylist>

*@throws

*/public

static arraylist> getdataset(arraylist> dataset, int columnindex, string attribueclass)

} return splitdataset;

} /**

* 計算指定列(屬性)的資訊熵

*@title: computeentropy

*@description: todo

*@return double

*@throws

*/public

static

double

computeentropy(arraylist> dataset, int columnindex)

return entropy;

} /**

* 計算基於指定屬性列對目標屬性的條件資訊熵

*/public

static

double

computeconditinalentropy(arraylist> dataset, int columnindex)

double proby = (double)splitdataset.size() / (double)dataset.size();

mapmap1 = gettypecounts(splitdataset, descolumn); //根據分割後的子集計算後驗熵

iteratoriter1 = map1.keyset().iterator();

double proteriorentropy = 0;

while(iter1.hasnext())

conditionalentropy += proby * proteriorentropy; // 基於某個分割屬性計算條件熵

} return conditionalentropy;

} }

public

class

test

arraylist> dataset = new arraylist>();

while((str = reader.readline()) != null)

dataset.add(tmplist);

} decisiontree dt = new decisiontree();

treenode root = dt.buildtree(dataset, attributelist);

// dt.printtree(root);

dt.searchtree(root);

} catch (ioexception e)

} catch (filenotfoundexception e)

} }

ID3演算法Java實現

1.1 資訊熵 熵是無序性 或不確定性 的度量指標。假如事件a 的全概率劃分是 a1,a2,an 每部分發生的概率是 p1,p2,pn 那資訊熵定義為 通常以2 為底數,所以資訊熵的單位是 bit。1.2 決策樹 決策樹是以例項為基礎的歸納學習演算法。它從一組無次序 無規則的元組中推理出決策樹表示形...

java實現ID3演算法

id3是經典的分類演算法,要理解id3演算法,需要先了解一些基本的資訊理論概念,包括資訊量,熵,後驗熵,條件熵。id3演算法的核心思想是選擇互資訊量最大的屬性作為分割節點,這樣做可以保證所建立的決策樹高度最小。樹結構 c4.5決策樹資料結構 author zhenhua.chen descripti...

ID3演算法的Python實現

本篇文章的 是在 id3演算法的原理及實現 python 的基礎上進行新增和修改實現的,感謝原作者。1 新增的功能 1 拆分檔案,使得函式的呼叫更加清晰 2 增加了gui,增加了資料的讀取和 功能 3 增加了乙個遞迴終止條件 2 gui介面展示 以檔案中給出的資料集為例,填充如下 注 這裡類標籤的位...