這裡只寫一下用c++簡單實現的id3演算法決策樹
id3演算法是基於資訊熵和資訊獲取量
每次建立新節點時,選取乙個資訊獲取量最大(以資訊熵為衡量)的屬性進行分割
決策樹還有很多其他演算法,不過都只是衡量標準不同
實質都是按照貪心自上而下地建樹
如果深度過深,還要採取剪枝的手段
#include #include#include
#include
#include
using
namespace
std;
typedef unsigned
intui;
typedef vector
< vector>dv;
const
int maxm = 100, maxn = 1000
;const
double eps = 1e-7
;struct
node
node[maxn];
//結點,flag表示已採用的屬性,st為此次劃分的標準
double cal_entropy(double p) //
計算資訊熵
double split(dv v, int k) //
算出如果以第k個屬性分割得到的資訊獲取量
else
}int n = n1+n2;
double ans = (double)n1/n*cal_entropy((double)v1/n1) + (double)n2/n*cal_entropy((double)v2/n2);
return cal_entropy((double)(v1+v2)/n) -ans;
}void build(int x, dv vnode) //
按照貪心演算法建樹
node[x].st =k;
printf(
"%d %d %d %d\n
", x, node[x].yes, node[x].no, node[x].st); //
先序遍歷輸出樹的結構
if(k == -1) return
; dv v1, v2;
for(ui i = 0; i < vnode.size(); i++)
if(vnode[i][k]) v1.push_back(vnode[i]);
else
v2.push_back(vnode[i]);
for(ui i = 0; i < v1[0].size(); i++)
node[x*2].flag[k] = node[x*2+1].flag[k] = 1
; build(x*2, v1); build(x*2+1
, v2);
}int
n, m, x;
dv v;
int dfs(int x, vector vv) //
用於測試集
vector
vv;intmain()
build(
1, v);
for(int i = 0; i < m; i++) cin>>x, vv.push_back(x);
cout
<1, vv)<}
機器學習演算法 決策樹
決策樹類似一中策略或者條件選擇,其中各個節點代表選擇條件,各個葉子結點代表可能達到的結果,決策樹 decision tree 是乙個樹結構 可以是二叉樹或非二叉樹 其每個非葉節點表示乙個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放乙個類別。使用決策樹進行決策的過程就...
機器學習演算法 決策樹
決策樹的使用主要是用於分類。年齡收入 信用是否學生 是否買電腦年輕高 高是是中年 低中否否 老年中低否 是對於一些適合分類的資料中,考慮各種因素對結果的影響大小進行決策,一般是先選取區分度較高的因素。比如說,年齡大小這個因素在很大程度上影響我們的結果 是否買電腦。那麼,年齡因素將作為第乙個決策因素出...
機器學習演算法 決策樹
1 決策樹直觀理解 假設,已知10人房產 婚姻 年收入以及能否償還債務的樣本,那麼第11個人來,知其房產 婚姻 以及年收入情況,問他是否能償還債務?2 前置知識 理解決策樹,我們必須知道一下概念 資訊熵 描述系統的不確定度,熵越高,代表系統越混亂,包含的資訊量也就越多,其公式 例 計算前10個樣本能...