發現使用決策樹太方便了,之前不了解,吭呲吭呲的自己整了很多,matlab分分鐘搞定,還清晰明了效果好;
需要根據大量資料進行分類或者設定閾值時,使用決策樹太方便了。
源資料:提取了一些資料的特徵值和類別,用來區分走路和不走了的狀態,
資料格式[feature1, feature2, feature3, feature4, feature6, sign], sign為結果
**:
a=importdata('.\decisiontree\xyz計步.txt'); % 匯入資料
b=importdata('.\decisiontree\xyz不計步.txt');
testa = importdata('.\decisiontree\xyz測試計步.txt');
testb = importdata('.\decisiontree\xyz測試不計步.txt');
train = [a;b];
% 訓練資料
p_train = train(:, 1:6);
t_train = train(:,7);
% 測試資料
p_testa = testa(:, 1:6);
p_testb = testb(:, 1:6);
if 0 % 檢視葉子節點含有的最小樣本數對決策樹效能的影響
leafs = logspace(1,2,10);
n = numel(leafs);
err = zeros(n,1);
for n = 1:n
t = classificationtree.fit(p_train, t_train,'crossval', 'on','minleaf',leafs(n));
err(n) = kfoldloss(t);
endplot(leafs,err);
xlabel('葉子節點含有的最小樣本數');
ylabel('交叉驗證誤差');
title('葉子節點含有的最小樣本數對決策樹效能的影響');
end% 建立決策樹分類器
if 1
ctree = classificationtree.fit(p_train, t_train);
view(ctree,'mode','graph');
t_sim = predict(ctree, p_testb);
endif 0 % 設定minleaf為10,產生優化決策樹
optimaltree = classificationtree.fit(p_train, t_train,'minleaf', 10);
view(optimaltree, 'mode','graph');
t_sima = predict(optimaltree, p_testa);
t_simb = predict(optimaltree, p_testb);
% 計算優化後的決策樹的重帶入誤差和交叉驗證誤差
resubopt = resubloss(optimaltree)
lossopt = kfoldloss(crossval(optimaltree))
% 計算優化前決策樹的重代入誤差和交叉驗證誤差
resubdefault = resubloss(ctree)
lossdefault = kfoldloss(crossval(ctree))
end
決策樹,樹枝太多,不放圖了。
交叉驗證誤差:葉子節點含有的最小樣本數對決策樹效能的影響
優化後的結果:選用最小葉子節點為10;
粗暴一點,選用最小葉子節點為100(下圖);
葉子最小節點在100,誤差在可以接受範圍內,完美;
決策樹分類
一 分類的概念 分類是一種重要的資料分析形式,分類方法用於 資料物件的離散類別,而 則用於 資料物件的連續取值 資料分類是兩個階段的過程,包括學習階段和分類階段 學習階段 訓練階段 就是建立描述預先定義的資料類或概念集的分類器 而訓練集是有資料庫元祖和與他們相互關聯的類標號組成 類標號屬性是離散值和...
分類決策樹
決策樹是基於特徵對例項進行分類的樹形結構。決策樹學習演算法包括 特徵選擇 樹的生成和樹的剪枝。2.1.id3 1 針對當前的集合,計算每個特徵的資訊增益 2 選擇資訊增益最大的特徵作為當前節點的決策決策特徵 3 根據特徵不同的類別劃分到不同的子節點 比如年齡特徵有青年,中年,老年,則劃分到3顆子樹 ...
分類決策樹
決策樹是乙個簡單易用的機器學習演算法,具有很好的實用性。在風險評估 資料分類 專家系統中都能見到決策樹的身影。決策樹其實是一系列的if then規則的集合,它有可讀性良好,分類速度快等優點。把決策樹看成是一些if then規則的集合,在每一層樹上根據屬性的值判斷走勢,至到遇到葉節點,葉節點對應的就是...