Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何写一个“";classregtree";文件上的对象?_Matlab - Fatal编程技术网

Matlab 如何写一个“";classregtree";文件上的对象?

Matlab 如何写一个“";classregtree";文件上的对象?,matlab,Matlab,是否有任何方法可以使用MATLAB将classregtree对象保存到文件中,以便我可以从java应用程序读取该文件 理想情况下,我希望从matlab保存到XML文件。我能管理的最好方法是导出拆分定义,并从以下内容重新实现树: classificationtree.view 如果对象名为classificationtree,则将显示决策树的文本版本 如果elseif else转到伪代码,就不需要花太多时间就可以转换为您选择的语言:如果您必须大量更改训练数据,宏或某种字符串处理可能会很有用。这可

是否有任何方法可以使用MATLAB将classregtree对象保存到文件中,以便我可以从java应用程序读取该文件


理想情况下,我希望从matlab保存到XML文件。

我能管理的最好方法是导出拆分定义,并从以下内容重新实现树:

classificationtree.view
如果对象名为
classificationtree
,则将显示决策树的文本版本

如果elseif else转到伪代码,就不需要花太多时间就可以转换为您选择的语言:如果您必须大量更改训练数据,宏或某种字符串处理可能会很有用。这可能是他们可以选择的最有用的形式


如果您将有意义的名称应用于输入变量(通过设置
PredictorNames
属性),这将有助于-使这些名称与java程序中的变量名称相同,并且您可以少做一组转录。

可以使用
disp(t)以文本形式显示
classregtree
对象
。该函数背后的逻辑位于
MATLAB/R201Xx/toolbox/stats/stats/@classregtree/disp.m
。 为了以编程方式将此输出保存到文件中,需要对函数进行一些修改。 以下代码添加了将文本表单保存到文本文件的功能,然后可以用Java解析该文本文件:

function save_classregtree(t, filename)

fileId = fopen(filename, 'w');

% Get some information about the whole tree
maxnode = numel(t.node);
nd = 1 + floor(log10(maxnode)); % number of digits for node number
varnames = names(t);
if isempty(varnames)
    numCell = textscan(sprintf('%d\n',1:t.npred),'%s\n');
    varnames = strcat('x',numCell{1});
end
isregression = isequal(t.method,'regression');
if isregression
    fprintf(fileId, getString(message('stats:classregtree:disp:DecisionTreeForRegression')));
else
    fprintf(fileId, getString(message('stats:classregtree:disp:DecisionTreeForClassification')));
end

% Display information about each node
for j=1:maxnode
    if any(t.children(j))
        % branch node
        vnum = t.var(j);
        vname = varnames{abs(vnum)};
        cut = t.cut{j};
        kids = t.children(j);
        if     strcmp(type(t),'regression')
            Yfit = t.class(j);
            Yfit = num2str(Yfit,'%g');
        elseif strcmp(type(t),'classification')
            Yfit = t.classname(t.class(j));
        end
        if vnum>0        % continuous predictor "<" condition
            condleft = sprintf('%s<%g',vname,cut);
            condright = sprintf('%s>=%g',vname,cut);
            fprintf(fileId, '%*d  %s\n',nd,j,getString(message('stats:classregtree:disp:TreeBranch',...
                condleft,kids(1),condright,kids(2),char(Yfit))));
        else             % categorical predictor, membership condition
            cats = cut{1};
            if isscalar(cats)
                condleft = sprintf('%s=%g',vname,cats);
            else
                set = deblank(num2str(cats,'%g '));
                condleft = sprintf('%s %s {%s}',vname,getString(message('stats:classregtree:disp:ElementInSet')),set);
            end
            cats = cut{2};
            if isscalar(cats)
                condright = sprintf('%s=%g',vname,cats);
            else
                set = deblank(num2str(cats,'%g '));
                condright = sprintf('%s %s {%s}',vname,getString(message('stats:classregtree:disp:ElementInSet')),set);
            end
            fprintf(fileId, '%*d  %s\n',nd,j,getString(message('stats:classregtree:disp:TreeBranch',...
                condleft,kids(1),condright,kids(2),Yfit)));
        end
    else
        % terminal node, display fit (regression) or class assignment
        if isregression
            fprintf(fileId, sprintf('%s  %s %s\n','%*d',getString(message('stats:classregtree:disp:FittedResponse')),'%g'),nd,j,t.class(j));
        else
            fprintf(fileId, sprintf('%s  %s %s\n','%*d',getString(message('stats:classregtree:disp:PredictedClass')),'%s'),nd,j,char(t.classname(t.class(j))));
        end
    end

fclose(fileId);

end
函数保存\u classregtree(t,文件名)
fileId=fopen(文件名“w”);
%获取有关整棵树的信息
maxnode=numel(t.node);
nd=1+楼层(log10(maxnode));%节点编号的位数
varnames=names(t);
如果为空(varnames)
numCell=textscan(sprintf('%d\n',1:t.npred),'%s\n');
varnames=strcat('x',numCell{1});
结束
isregression=isequal(t.方法,“回归”);
如果是偏差
fprintf(fileId,getString(message('stats:classregtree:disp:decisiontreeforgression'));
其他的
fprintf(fileId,getString(消息('stats:classregtree:disp:DecisionTreeForClassification'));
结束
%显示有关每个节点的信息
对于j=1:maxnode
如有的话(t.儿童(j))
%分支节点
vnum=t.var(j);
vname=varnames{abs(vnum)};
cut=t.cut{j};
kids=t.children(j);
如果strcmp(类型(t),‘回归’)
Yfit=t级(j);
Yfit=num2str(Yfit,'%g');
其他strcmp(t型,“分类”)
Yfit=t.classname(t.class(j));
结束

如果vnum>0%连续预测值“这太棒了!我确信一定有更好的方法(比我过去所做的更好),我很高兴看到情况如此……+1
function [] = build_xml(t, filename)
children = t.children(1);
xml = '<classregtree>';
xml = [xml, rec(t,children(1))];
xml = [xml, rec(t,children(2))];
xml = [xml, '</classregtree>'];

fileId = fopen(filename, 'w+t', 'n');
fwrite(fileId, xml, 'char');
fclose(fileId);
end

function [xml] = rec(t, child)
xml = ['<child id="', num2str(child), '">'];
children = t.children(child);

if any(children)    
    if children(1)
        xml = [xml, rec(t,children(1))];
    end
    if children(2)
        xml = [xml, rec(t,children(2))];
    end
end

xml = [xml, '</child>'];


end