推薦閱讀:1.準備測試資料id3演算法 wiki
決策樹演算法及實現
完整示例**:
js簡單實現決策樹(id3演算法)_demo.html
這裡我假設公司有個小姐姐相親見面為例
得到以下是已經見面或被淘汰了的資料(部分資料使用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.實現函式功能由於部分函式過於簡單我就不進行講解了在id3演算法 wiki中解釋了計算熵與資訊增益的公式可前往 js簡單實現決策樹(id3演算法)_demo.html檢視完整**
裡面包含注釋,與每個函式的測試方法
這裡的話我主要講解下:計算熵的函式、生成決策樹函式(資訊增益)、與**函式的實現
截圖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...