id3决策树算法matlab
时间: 2023-07-01 12:13:47 浏览: 26
以下是使用MATLAB实现ID3决策树算法的示例代码:
```
function tree = id3(data, labels)
% ID3决策树算法实现
% data: 数据集,每行是一个样本,每列是一个特征
% labels: 特征标签,即每列特征的名称
% tree: 生成的决策树
% 判断是否所有样本都属于同一类别
if all(data(:, end) == data(1, end))
tree.op = [];
tree.kids = [];
tree.class = data(1, end);
return;
end
% 判断是否还有剩余特征可用于划分
if size(data, 2) == 1
tree.op = [];
tree.kids = [];
tree.class = mode(data(:, end));
return;
end
% 计算每个特征的信息增益
n = size(data, 1);
entD = entropy(data(:, end));
gain = zeros(1, size(data, 2) - 1);
for i = 1:size(data, 2) - 1
feat = data(:, i);
vals = unique(feat);
ent = 0;
for j = 1:length(vals)
idx = feat == vals(j);
ent = ent + sum(idx) / n * entropy(data(idx, end));
end
gain(i) = entD - ent;
end
% 选取信息增益最大的特征作为划分特征
[~, feat] = max(gain);
tree.op = labels{feat};
% 递归生成子树
tree.kids = {};
vals = unique(data(:, feat));
for i = 1:length(vals)
idx = data(:, feat) == vals(i);
if sum(idx) == 0
sub = struct('op', [], 'kids', [], 'class', mode(data(:, end)));
else
sub = id3(data(idx, :), labels);
end
tree.kids{i} = sub;
end
end
function e = entropy(data)
% 计算熵
n = length(data);
vals = unique(data);
e = 0;
for i = 1:length(vals)
p = sum(data == vals(i)) / n;
e = e - p * log2(p);
end
end
```
调用示例:
```
data = [1, 0, 0;
1, 0, 0;
1, 1, 1;
0, 1, 1;
0, 0, 1];
labels = {'A', 'B', 'Class'};
tree = id3(data, labels);
disp(tree);
```