JS簡單實現決策樹 ID3演算法

2021-09-20 00:13:51 字數 3347 閱讀 4033

推薦閱讀:

id3演算法 wiki

決策樹演算法及實現

完整示例**:

js簡單實現決策樹(id3演算法)_demo.html

1.準備測試資料

這裡我假設公司有個小姐姐相親見面為例

得到以下是已經見面或被淘汰了的資料(部分資料使用mock.js來生成的):

var data =[,

,,,,

,,,,

,,,,

,,,,

];

2.搭建決策樹基本函式

**:

function decisiontree(config) ;

decisiontree.prototype = ,

//統計屬性值在資料集中的次數

countuniquevalues(items, attr) {},

//獲取物件中值最大的key 假設 counter= 得到 "a"

getmaxkey(counter) {},

//尋找最頻繁的特定屬性值

mostfrequentvalue(items, attr) {},

//根據屬性切割資料集

split(items, attr, predicate, pivot) {},

//計算熵

entropy(items, attr) {},

//生成決策樹

builddecisiontree(config) {},

//初始化生成決策樹

training(config) {},

//** 測試

predict(data) {},

};var decisiontree = new decisiontree();

3.實現函式功能
由於部分函式過於簡單我就不進行講解了

可前往 js簡單實現決策樹(id3演算法)_demo.html檢視完整**

裡面包含注釋,與每個函式的測試方法

這裡的話我主要講解下:計算熵的函式、生成決策樹函式(資訊增益)、與**函式的實現

id3演算法 wiki中解釋了計算熵資訊增益的公式

截圖3.1.計算熵(entropy)函式

根據公式:

公式我們可以知道計算h(s)(也就是熵)需要得到p(x)=x/總數量然後進行計算累加就行了

**:

//......略

//統計屬性值在資料集中的次數

countuniquevalues(items, attr) ; // 獲取不同的結果值 與出現次數

for (var i of items)

return counter;

},//......略

//計算熵

entropy(items, attr)

return entropy;

},//......略

var decisiontree = new decisiontree();

console.log("函式 countuniquevalues 測試:");

console.log(" 長相", decisiontree.countuniquevalues(data, "長相")); //測試

console.log(" 年齡", decisiontree.countuniquevalues(data, "年齡")); //測試

console.log(" 收入", decisiontree.countuniquevalues(data, "收入")); //測試

console.log("函式 entropy 測試:");

console.log(" 長相", decisiontree.entropy(data, "長相")); //測試

console.log(" 年齡", decisiontree.entropy(data, "年齡")); //測試

console.log(" 收入", decisiontree.entropy(data, "收入")); //測試

3.2.資訊增益

公式根據公式我們知道要得到資訊增益的值需要得到:

其中t我們就先分match(合適的)on match(不合適),所以h(t):

所以資訊增益g=h(s)-(p(match)h(match)+p(on match)h(on match))

因為p(match)=match數量/資料集總項數量

資訊增益g=h(s)-((match數量)xh(match)+(on match數量)xh(on match))/資料集總項數量

//......略

builddecisiontree(config);//儲存當前最佳的分割節點資料資訊

//遍歷資料集

for (var item of trainingset) }}

//......遞迴計算分支

}

3.3.**功能

**功能的話就只要將要**的值傳入,迴圈去尋找符合條件的分支,直到找到最後的所屬分類為止,這裡就不詳細解釋了

**:

//......略

//** 測試

predict(data)

attr = tree.attribute;

value = data[attr];

predicate = tree.predicate;

pivot = tree.pivot;

if (predicate(value, pivot)) else

}}//......略

4.最後測試

決策樹 ID3演算法

id3演算法通過計算每個屬性的資訊增益,認為資訊增益越大屬性越優,每次劃分選取資訊增益最大的屬性為劃分標準,重複這個過程,直到構成一棵決策樹。資訊熵是描述事件給我們的驚訝程度,如果所有事件的概率均等,那熵值大,驚訝程度低。如果有一事件的概率極高而其他極低,熵值便低,驚訝程度大。其計算公式如下 資訊增...

決策樹 ID3演算法

一 決策樹基本概念 在機器學習中,決策樹是乙個 模型,它代表的是物件屬性與物件值之間的一種對映關係。本質上決策樹是通 過一系列規則對資料進行分類的過程。下圖為經典決策樹例項。如圖所示,例項是由 屬性 值 對表示的 例項是用一系列固定的屬性和他們的值構成。目標函式具有離散的輸出值 上圖給每個例項賦予乙...

決策樹ID3演算法

typeerror dict keys object does not support indexing 9.typeerror dict keys object does not support indexing 這個問題是python版本的問題 如果使用的是python2 firststr my...