[已答复] 不同结构体之间进行下标赋值

[复制链接]
justsolo 发表于 2019-8-11 10:15:44
for i=0:featvalue_num-1
    example = train_data(train_data(:,bestfeats) == i,:);
    leaf = struct('value', 'null');
    % 当 value = false or 0, 左分支
if (isempty(example));
    if (lastColumnSum >= numberExamples / 2); % for matrix examples
        leaf.value = 'true';
    else
        leaf.value = 'false';
    end
    tree.children(i+1) = leaf;
else
    % 递归
    %leaf.value = labels(bestfeats);
    %tree.children(i+1).value = labels(bestfeats);
    %tree.children(i+1) = leaf;
    tree.children(i+1) = decissiontree(example,labels,activeAttributes);
    disp('--------------------------------------------');
end
end
%返回
return


在不同结构体之间进行下标赋值。

出错 decissiontree (line 86)
    tree.children(i+1) = decissiontree(example,labels,activeAttributes);

前几次循环都运行的很好,最后一次出现了问题。不懂是什么问题。

3 条回复


breezy_gkpm4 发表于 2019-8-11 20:35:26
帮代码都附上吧,这样好难分析

justsolo 发表于 2019-8-11 20:38:08
本帖最后由 justsolo 于 2019-8-12 17:24 编辑
breezy_gkpm4 发表于 2019-8-11 20:35
帮代码都附上吧,这样好难分析

function [ tree ] = decissiontree(train_data,labels,activeAttributes)
%input                 train_data          训练数据
%labels                标签
%activeAttributes       活跃属性
%output                  tree结构体
%% 数据预处理
[m,n] = size(train_data);
disp('original data');
disp(train_data);

%% 建立决策树
%% 结构体定义

% 创建树节点
tree = struct('value','null');
% 提供的数据为空,则报异常
if (isempty(train_data))
    error('必须提供数据!');
end

% 常量
numberAttributes = length(activeAttributes);
numberExamples = length(train_data(:,1));


% 如果最后一列全部为1,则返回“true”
lastColumnSum = sum(train_data(:, numberAttributes + 1));

if (lastColumnSum == numberExamples);
    tree.value = 'true';
    tree.children = 'null';
    return
end
% 如果最后一列全部为0,则返回“false”
if (lastColumnSum == 0);
    tree.value = 'false';
    tree.children = 'null';
    return
end

% 如果活跃的属性为空,则返回label最多的属性值
if (sum(activeAttributes) == 0);
    if (lastColumnSum >= numberExamples / 2);
        tree.value = 'true';
        tree.children = 'null';
    else
        tree.value = 'false';
        tree.children = 'null';
    end
    return
end
bestfeats = choose_bestfeat(train_data);
disp(['bestfeat:',num2str(bestfeats)]);
tree.value = labels{bestfeats};
disp(['bestfeature:',num2str(bestfeats)]);
activeAttributes(bestfeats) = 0;
featvalue = unique(train_data(:,bestfeats));
featvalue_num = length(featvalue);
for i=0:featvalue_num-1
    example = train_data(train_data(:,bestfeats) == i,:);
    leaf = struct('value', 'null');
    % 当 value = false or 0, 左分支
if (isempty(example));
    if (lastColumnSum >= numberExamples / 2); % for matrix examples
        leaf.value = 'true';
        tree.children = 'null';
    else
        leaf.value = 'false';
        tree.children = 'null';
    end
    tree.children(i+1) = leaf;
else
    % 递归
    tree.children(i+1) = decissiontree(example,labels,activeAttributes);

end
end
%返回
return
end





换成元胞再转结构体的方法在之后的读取上有问题,所以还得解决这个问题。

lhh2017 发表于 2021-10-13 10:21:39
  tree.children(i+1) = leaf
请问结构体赋值最后怎么解决的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表