
一、決策樹分類算法概述
決策樹算法是從數據的屬性(或者特征)出發,以屬性作為基礎,劃分不同的類。例如對于如下數據集
(數據集)
其中,第一列和第二列為屬性(特征),最后一列為類別標簽,1表示是,0表示否。決策樹算法的思想是基于屬性對數據分類,對于以上的數據我們可以得到以下的決策樹模型
(決策樹模型)
先是根據第一個屬性將一部份數據區分開,再根據第二個屬性將剩余的區分開。
實現決策樹的算法有很多種,有ID3、C4.5和CART等算法。下面我們介紹ID3算法。
二、ID3算法的概述
ID3算法是由Quinlan首先提出的,該算法是以信息論為基礎,以信息熵和信息增益為衡量標準,從而實現對數據的歸納分類。
首先,ID3算法需要解決的問題是如何選擇特征作為劃分數據集的標準。在ID3算法中,選擇信息增益最大的屬性作為當前的特征對數據集分類。信息增益的概念將在下面介紹,通過不斷的選擇特征對數據集不斷劃分;
其次,ID3算法需要解決的問題是如何判斷劃分的結束。分為兩種情況,第一種為劃分出來的類屬于同一個類,如上圖中的最左端的“非魚類”,即為數據集中的第5行和第6行數據;最右邊的“魚類”,即為數據集中的第2行和第3行數據。第二種為已經沒有屬性可供再分了。此時就結束了。
通過迭代的方式,我們就可以得到這樣的決策樹模型。
(ID3算法基本流程)
三、劃分數據的依據
ID3算法是以信息熵和信息增益作為衡量標準的分類算法。
1、信息熵(Entropy)
熵的概念主要是指信息的混亂程度,變量的不確定性越大,熵的值也就越大,熵的公式可以表示為:
其中為類別在樣本s中出現的概率。
2、信息增益(Information gain)
信息增益指的是劃分前后熵的變化,可以用下面的公式表示:
其中,a表示樣本的屬性,是屬性所有的取值集合。v是a的其中一個屬性值,sv是s中a的值為v的樣例集合。
四、實驗仿真
1、數據預處理
我們以下面的數據為例,來實現ID3算法:
我們首先需要對數據處理,例如age屬性,我們用0表示youth,1表示middle_aged,2表示senior等等。
(將表格數據化)
2、實驗結果
(原始的數據)
(劃分1)
(劃分2)
(劃分3)
(最終的決策樹)
MATLAB代碼
主程序
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% Decision Tree
% ID3
%導入數據
%data = [1,1,1;1,1,1;1,0,0;0,1,0;0,1,0];
data = [0,2,0,0,0;
0,2,0,1,0;
1,2,0,0,1;
2,1,0,0,1;
2,0,1,0,1;
2,0,1,1,0;
1,0,1,1,1;
0,1,0,0,0;
0,0,1,0,1;
2,1,1,0,1;
0,1,1,1,1;
1,1,0,1,1;
1,2,1,0,1;
2,1,0,1,0];
% 生成決策樹
createTree(data);
生成決策樹
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [ output_args ] = createTree( data )
[m,n] = size(data);
disp('original data:');
disp(data);
classList = data(:,n);
classOne = 1;%記錄第一個類的個數
for i = 2:m
if classList(i,:) == classList(1,:)
classOne = classOne+1;
end
end
% 類別全相同
if classOne == m
disp('final data: ');
disp(data);
return;
end
% 特征全部用完
if n == 1
disp('final data: ');
disp(data);
return;
end
bestFeat = chooseBestFeature(data);
disp(['bestFeat: ', num2str(bestFeat)]);
featValues = unique(data(:,bestFeat));
numOfFeatValue = length(featValues);
for i = 1:numOfFeatValue
createTree(splitData(data, bestFeat, featValues(i,:)));
disp('-------------------------');
end
end
選擇信息增益最大的特征
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% 選擇信息增益最大的特征
function [ bestFeature ] = chooseBestFeature( data )
[m,n] = size(data);% 得到數據集的大小
% 統計特征的個數
numOfFeatures = n-1;%最后一列是類別
% 原始的熵
baseEntropy = calEntropy(data);
bestInfoGain = 0;%初始化信息增益
bestFeature = 0;% 初始化最佳的特征位
% 挑選最佳的特征位
for j = 1:numOfFeatures
featureTemp = unique(data(:,j));
numF = length(featureTemp);%屬性的個數
newEntropy = 0;%劃分之后的熵
for i = 1:numF
subSet = splitData(data, j, featureTemp(i,:));
[m_1, n_1] = size(subSet);
prob = m_1./m;
newEntropy = newEntropy + prob * calEntropy(subSet);
end
%計算增益
infoGain = baseEntropy - newEntropy;
if infoGain > bestInfoGain
bestInfoGain = infoGain;
bestFeature = j;
end
end
end
計算熵
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [ entropy ] = calEntropy( data )
[m,n] = size(data);
% 得到類別的項
label = data(:,n);
% 處理完的label
label_deal = unique(label);
numLabel = length(label_deal);
prob = zeros(numLabel,2);
% 統計標簽
for i = 1:numLabel
prob(i,1) = label_deal(i,:);
for j = 1:m
if label(j,:) == label_deal(i,:)
prob(i,2) = prob(i,2)+1;
end
end
end
% 計算熵
prob(:,2) = prob(:,2)./m;
entropy = 0;
for i = 1:numLabel
entropy = entropy - prob(i,2) * log2(prob(i,2));
end
end
劃分數據
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
function [ subSet ] = splitData( data, axis, value )
[m,n] = size(data);%得到待劃分數據的大小
subSet = data;
subSet(:,axis) = [];
k = 0;
for i = 1:m
if data(i,axis) ~= value
subSet(i-k,:) = [];
k = k+1;
end
end
end
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25