機器學習 決策樹演算法(簡單嘗試)

2022-08-31 04:00:09 字數 1627 閱讀 7951

這裡只寫一下用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個樣本能...