精华内容
下载资源
问答
  • 决策树MATLAB代码ID3

    2016-12-27 22:00:41
    决策树MATLAB代码ID3
  • 决策树MATLAB代码

    2017-02-21 11:20:54
    决策树 ID3
  • matlab实现ID3决策树代码,例程中使用西瓜数据集,运行decisionTree.m即可
  • 决策树 MATLAB实验

    2019-06-27 21:32:48
    一、说明 ...3、斜决策树的节点不再是单一属性,而是属性的线性组合。 二、算法 确定节点算法流程: 确定节点算法描述: 1、找到轴平行划分的最优划分平面,I为不纯度指标。 2、重复R次: 随机算...

    一、说明
    1、根据Sreerama K. Murthy论文A System for Induction of Oblique Decision Trees中的算法进行的实验。
    2、实验数据来自周志华著的机器学习书中。
    3、斜决策树的节点不再是单一属性,而是属性的线性组合。
    二、算法
    确定节点算法流程:
    在这里插入图片描述
    确定节点算法描述:
    1、找到轴平行划分的最优划分平面,I为不纯度指标。
    2、重复R次:
    随机算则超平面,初始化时以轴平行的划分平面作为初始平面
    步骤1:
    随机扰动超平面H的参数,知道不纯度指标不再提高。
    步骤2:
    选择随机扰动方向,改变H参数。
    如果不纯度指标提高,重复步骤1
    3、让I1 = 改变参数后H的不纯度指标,如果I1 < I, 设置I = I1.
    4、输出对应于I的划分平面。

    三、实验
    首先寻找轴平行时的最优初始化平面,用到的不纯度衡量指标是
    在这里插入图片描述TwoingValue表示划分的优良性,因此优化目标为最大化TwoingValue,若选择不纯度作为指标,则可使优化目标位最小化TwoingValue的倒数。

    寻找轴平行的最优化分平面的MATLAB代码:

    %寻找最优轴平行划分超平面
    melondata = [0.697	0.46	1
    0.774	0.376	1
    0.634	0.264	1
    0.608	0.318	1
    0.556	0.215	1
    0.403	0.237	1
    0.481	0.149	1
    0.437	0.211	1
    0.666	0.091	0
    0.23	0.267	0
    0.245	0.057	0
    0.343	0.099	0
    0.639	0.161	0
    0.657	0.198	0
    0.36	0.37	0
    0.593	0.042	0
    0.719	0.103	0];
    
    %划分属性和标签
    x_axis = melondata(:,1);
    y_axis = melondata(:,2);
    label_axis = melondata(:,3);
    %样本数量
    count = length(label_axis);
    
    %属性排序
    x_sort = sort(x_axis);
    y_sort = sort(y_axis);
    
    %划分点
    x_divide = (x_sort(2:count) + x_sort(1:count-1)) / 2;
    y_divide = (y_sort(2:count) + y_sort(1:count-1)) / 2;
    
    %计算TwoingValue
    tv = zeros(count-1, 2);
    tvmax = 0;
    for i = 1 : 2
        for j = 1 : count-1
            a_coe = [0,0,0];
            if i == 1
                a_coe(1) = 1;
                a_coe(3) = -x_divide(j);
            else
                a_coe(2) = 1;
                a_coe(3) = -y_divide(j);
            end
            %统计计算TwoingValue值所需要的参数
            tl = 0; tr = 0; lk = zeros(2,1); rk = zeros(2,1);
            for k = 1 : count
                p_coe = [x_axis(k), y_axis(k), 1]';
                v_i = a_coe * p_coe;
                if v_i < 0
                    tl = tl + 1;
                    if label_axis(k) == 0
                        lk(1) = lk(1) + 1;
                    else
                        lk(2) = lk(2) + 1;
                    end
                else
                    tr = tr + 1;
                    if label_axis(k) == 0
                        rk(1) = rk(1) + 1;
                    else
                        rk(2) = rk(2) + 1;
                    end
                end
            end
            tv(j,i) = tl / count * tr / count * (abs(lk(1) / tl - rk(1) / tr) + abs(lk(2) / tl - rk(2) / tr))^2;
            if tv(j,i) > tvmax
                tvmax = tv(j,i);
                a_coemax = a_coe;
            end
        end
    end
    

    画图显示:

    %寻找最优轴平行划分超平面
    %画出原始样本集
    xi = x_axis(label_axis == 1, 1);
    yi = y_axis(label_axis == 1, 1);
    plot(xi, yi, 'b+');
    xi = x_axis(label_axis == 0, 1);
    yi = y_axis(label_axis == 0, 1);
    hold on;
    plot(xi, yi, 'go');
    
    x = 0:0.1:0.9;
    y = ones(1,10) * 0.204500000000000;
    hold on;
    plot(x, y, 'r--');
    

    最终结果如下:
    在这里插入图片描述
    1、蓝色加号表示正例。
    2、绿色圆圈表示反例。
    3、红色虚线表示找出的划分平面,二维空间中是一条直线。

    四、结论
    找到轴平行的划分平面后,可以进行算法后续的步骤,未完待续。。。

    展开全文
  • 模糊模式树(FPT)是一种机器学习的分类方法,类似于二元决策树(binary descision diagram,BDD)。其内部节点使用广义(模糊)逻辑和算数运算符标记,叶节点与给定输入属性集合上的(一元)模糊谓词相关联 模糊...

    模糊模式树(FPT) 是一种机器学习的分类方法,类似于二元决策树(binary descision diagram,BDD)。其内部节点使用广义(模糊)逻辑和算数运算符标记,叶节点与给定输入属性集合上的(一元)模糊谓词相关联

    模糊模式树(FPT)

    在预测性能方面与其他机器学习竞争的方法相比是有竞争力的,由于物联网节点处理资源有限,他倾向于生成在解释方面非常有吸引力的紧凑模型。
    其缺点也很明显:其计算复杂度高,运行时间可能变得令人无法接受。
    在这里插入图片描述

    二分决策树(BDD)

    BDD是用来表达布尔函数的一种数据结构。是一种基于shannon分解的有向无环图。
    设f为一组布尔变量集合的布尔函数(boolean function),且x为集合X中的变量,则shannon分解及其if-then-else(ite)形式为
    在这里插入图片描述
    式中x和 x-bar 分别代表事件发生,事件不发生;fx=1(即F1)和fx=0(即F2)
    分别代表了事件发生与事件不发生的布尔函数
    二叉树表示为以下:
    在这里插入图片描述
    ## 布尔函数(boolean function)
    布尔函数基于对布尔输入,通过某种逻辑计算,输出布尔值。
    F(b1,b2,b3,…,bn)
    带有n个两元素布尔代数{0,1}的布尔变量bi,F的值也是在{0,1}中
    一般定义域上值在{0,1}中的函数也被称为布尔值函数,所以布尔函数是特殊情况

    %%----- Main Program that should be run inorder to execute the code -----%%
    
    % load the data file
    load('earfeature15window700image.mat');
    
    
    % Change following variable in case of number of user changes
    noOfUsers = 100;
    
    % Change following two variable in case you need to change ration of test
    % and train case or when the number of data value for same user changes(right now its 7)
    trainCasePerUser = 4;
    testCasePerUser = 3;
    
    if(testCasePerUser < 2)
        disp('testCasePerUser should be greater then 1')
        
    else  
    
    totalCasePerUser = trainCasePerUser + testCasePerUser;
    
    % 3D matrix where 1st dimention is related the user, 2nd dimention related
    % to datavalues per user and 3rd dimention are the feature values for datapoints 
    test = zeros([noOfUsers testCasePerUser 35]);
    train = zeros([noOfUsers trainCasePerUser 35]);
    
    %% this loop devides the data into testcases and trainingcase randomly
    for i=1:noOfUsers
        
       % matrix p is the random permutation of interger 1 to total number of datavalues per user  
       p = randperm(totalCasePerUser,totalCasePerUser);
       
       % below two lines divide the data into tests and training data
       test(i,:,:) = T_S1(:,(i-1)*totalCasePerUser + p(1:testCasePerUser))';
       train(i,:,:) = T_S1(:,(i-1)*totalCasePerUser + p(testCasePerUser+1:totalCasePerUser))';
    end
    
    %% Following piece of code find creates the matching score matrix with 2 columns 
    % 1st column has the value of matching score and 2nd column has value 1 if 
    % its genuine and 0 if imposter
    trainScore = zeros([noOfUsers*noOfUsers 2]);
    testScore = zeros([noOfUsers*noOfUsers*(testCasePerUser-1) 2]);
    
    % loop that creates the matrix of training sample.
    for i=1:noOfUsers
        for j=1:noOfUsers
            score = zeros([trainCasePerUser 1]);
            for k = 1:trainCasePerUser
                score(k) = norm(squeeze((test(i,1,:) - train(j,k,:))),2);
            end
            
            % take the min of distance to get the matching score
            trainScore((i-1)*noOfUsers + j,1) = min(score);
            
            %  if the users are same then its genuine class else imposter
            if(i==j)
                trainScore((i-1)*noOfUsers + j,2) = 1;
            else
                trainScore((i-1)*noOfUsers + j,2) = 0;
            end        
        end
    end
    
    % loop that creates the matrix of testing sample
    for z=0:testCasePerUser-2
        for i=1:noOfUsers
            for j=1:noOfUsers
                score = zeros([trainCasePerUser 1]);
                for k = 1:trainCasePerUser
                    score(k) = norm(squeeze((test(i,z+2,:) - train(j,k,:))),2);
                end
                testScore(z*noOfUsers*noOfUsers + (i-1)*noOfUsers + j,1) = min(score);
                if(i==j)
                    testScore(z*noOfUsers*noOfUsers + (i-1)*noOfUsers + j,2) = 1;
                else
                    testScore(z*noOfUsers*noOfUsers + (i-1)*noOfUsers + j,2) = 0;
                end        
            end
        end
    end
    
    % find the geninue class datapoint and put them in Gtrain Matrix
    Gtrain = trainScore(find(trainScore(:,2) == 1), :);
    
    % find the imposter class datapoint and put them in Itrain Matrix
    Itrain = trainScore(find(trainScore(:,2) == 0), :);
    
    % Create the final training matrix with  score value in 1st column, membership 
    % value in 2nd column and class in 3rd column for creating dicision tree.
    % change the membership function 2nd  column in case you want to use
    % different membership funtion
    Mtrain = [Gtrain(:,1) GaussianMembership(Gtrain(:,1)) Gtrain(:,2); Itrain(:,1) TrapezoidalMembership(Itrain(:,1)) Itrain(:,2)];
    %Mtrain = [Gtrain(:,1) TrapezoidalMembership(Gtrain(:,1)) Gtrain(:,2); Itrain(:,1) TrapezoidalMembership(Itrain(:,1)) Itrain(:,2)];
    
    %% This part of code deals with growing the decision tree
    
    % sort the training matrix according the matching score value.
    [a b] = sort(Mtrain(:,1));
    clear a;
    data = Mtrain(b,:);
    
    % grow the tree using sorted training matrix
    tree = growTree( data );
    
    %% This part of code deals with the predicting the class of testing score and
    % calculation of FRR and FAR
    testingSize = noOfUsers*noOfUsers*(testCasePerUser-1);
    geniuneTestingSize = noOfUsers*(testCasePerUser-1);
    trainingSize = noOfUsers*noOfUsers;
    geniuneTrainingSize = noOfUsers;
    
    pre = zeros([testingSize 2]);
    
    % loop that predicts the values of all testing data
    for i=1:testingSize
        pre(i,1) = predict(tree, testScore(i,:));
        pre(i,2) = testScore(i,2);
    end
    
    % calculation of FAR and FRR
    FA = pre(find(pre(:,1) == 1 & pre(:,2) == 0),:); % False Acceptance
    FR = pre(find(pre(:,1) == 0 & pre(:,2) == 1),:); % False Rejection
    FAR = size(FA,1)/(testingSize-geniuneTestingSize); % False Acceptance Rate
    FRR = size(FR,1)/geniuneTestingSize; % False Rejection Rate
    
    %% histgram of normalized frequencies of matching score of Geniune and Imposter matching score
    figure;
    [m,yout] = hist(Itrain(:,1), 20);
    m = m/(size(Itrain,1));
    [n,xout] = hist(Gtrain(:,1), 20);
    n = n/size(Gtrain,1);
    bar(yout,m);
    hold on;
    bar(xout,n, 'r');
    legend('Imposter Scores','Geniune Scores');
    hold off;
    end

    完整代码添加QQ1575304183

    展开全文
  • 决策树matlab实现二分类或者多分类

    千次阅读 2018-11-16 17:41:50
    maketree函数递归建立 tree=struct(‘isnode’,1,‘a’,0.0,‘mark’,0.0,‘child’,{}) 所有分支递归的存在child{}中 函数gan(D)计算D的信息率 代码可以自动适应不同的分类标签和类别个数 代码 function tree=...

    代码解释

    maketree函数递归建立树
    tree=struct(‘isnode’,1,‘a’,0.0,‘mark’,0.0,‘child’,{}) 所有分支递归的存在child{}中
    函数gan(D)计算D的信息率
    代码可以自动适应不同的分类标签和类别个数

    代码

    function tree=maketree(D,a) 
    tree=struct('isnode',1,'a',0.0,'mark',0.0,'child',{});%isnode判断是否是分支还是叶子,a表示节点属性,若节点是叶子,a表示分类结果,child是孩子
    tree(1).a=1;%给tree分配一个确切的内存
    if length(unique(D(:,end)))==1%D中样本属于同一类别
        tree.isnode=0;%把tree标记为树叶
        tree.a=D(1,end);%把tree的类别标记为D的类别
        return
    end
    
    if sum(a)==0 ||length(D)==0 %属性划分完毕
        tree.isnode=0;%把tree标记为树叶
        tree.a=mode(D(:,end));%把tree的类别标记为D出现最多的类别
        return
    end
    for i=1:length(a)
        if a(i)==1
            if length(unique(D(:,i)))==1
                tree.isnode=0;%把tree标记为树叶
                tree.a=mode(D(:,end));%把tree的类别标记为D出现最多的类别
                return
            end
        end
    end
    gain=zeros(length(a),1); %保存每个属性的信息增益
    best=zeros(length(a),1); %保存每个属性的最佳划分
    
    for i=1:length(a)
        if a(i)==1
            t=D(:,i);
            t=sort(t);
        
            gain1=zeros(length(t)-1,1);
            for j=1:length(t)-1%二分划分
                ta=(t(j)+t(j+1))/2;
             
                Df=D(D(:,i)<=ta,:);
                Dz=D(D(:,i)>ta,:);
                gain1(j)=ent(D)-(ent(Df)*length(Df(:,end))/length(D(:,end))+ent(Dz)*length(Dz(:,end))/length(D(:,end)));
            end
         
            [gain(i),j]=max(gain1);
            ta=(t(j)+t(j+1))/2;
            best(i)=ta; 
        end
    end
    [g,m]=max(gain);%选择信息增益最大的属性
    D1=D(D(:,m)<=best(m),:);
    D2=D(D(:,m)>best(m),:);
    a(m)=0;
    
    tree.a=best(m); %建立分支
    tree.mark=m;
    % disp('****************************')
    % tree.a
    % tree.mark
    tree.isnode=1;
    tree.child(1)=maketree(D1,a);
    tree.child(2)=maketree(D2,a);
    
    end
    function f=ent(D)%计算信息商
    l=unique(D(:,end));
    if length(D)==0
        f=0;
        return
    end
    f=0;
    t=zeros(length(l),1);
    for i=1:length(D(:,end))
        for j=1:length(l)
            if D(i,end)==l(j)
                t(j)=t(j)+1;
                break;
            end
        end
    end
    n=length(D(:,end));
    for i=1:length(l)
        f=f+(t(i)/n)*log2(t(i)/n);
    end
    f=-f;
    end
    

    测试结果

    在训练集测试结果精度是0.91
    该测试函数是测试随机森林的函数,但不影响测试决策树。

    function randomforest()
    clc
    clear all
    T=1;%bagging采样的次数
    M = importdata('D:\毕业设计\数据集1\australian.txt');  %读取数据
    [sm,sn]=size(M);
    % for i=1:sm             %归一化
    %     mins=min(M(i,1:sn-1));
    %     maxs=max(M(i,1:sn-1));
    %     for j=1:sn-1
    %         M(i,j)=2*(M(i,j)-mins)/(maxs-mins)-1;
    %     end
    % end
    indices=crossvalind('Kfold',M(1:sm,sn),10); %十折交叉,划分训练集和测试集
    testindices=(indices==1); %测试集索引
    trainindices=~testindices;%训练集索引
    trainset=M(trainindices,:); %获取训练集
    testset=M(testindices,:);%获取测试集
    [testm,~]=size(testset);
    [trainm,trainn]=size(trainset);
    
    predict=zeros(trainm,T);
    for t=1:T %开始bagging采样
        D=[];%训练集
        for i=1:trainm%采样
            k=randperm(trainm,1);
            D=[D;trainset(k,:)];
        end
        [~,sn]=size(D);
        a=ones(sn-1,1);%属性集合a,1代表该属性未被划分
      
        tree=maketree(D,a);%递归构造简单决策树
        
        for i=1:trainm
            treet=tree;
            while 1
               
                if treet.isnode==0
                    predict(i,T)=treet.a;
                    break;
                end
                if trainset(i,treet.mark)<=treet.a
                    treet=treet.child(1);
                else
                    treet=treet.child(2);
                end
              
            end
        end
        
    end
    acc=0;
    for i=1:trainm
        if trainset(i,end)==mode(predict(i,:))
            acc=acc+1;
        end
    end
    acc=acc/trainm
    
    
    
     
    end
    
    
    展开全文
  • 决策树算法 matlab实现

    2018-05-15 16:39:30
    决策树算法matlab实现,构造分类决策树并用决策树对模式进行分类识别
  • 决策树 for Matlab

    千次阅读 2018-03-20 11:43:24
    决策树 in Matlab决策树是一种常见的分类决策结构。在获取足够的数据条件下,根据筛选特征的先验条件分布,生成一种能够帮助决策的树结构。生成决策树的过程,可以由Matlab帮助生成。假设输入的样本含有N维特征和一...

    决策树 in Matlab

    决策树是一种常见的分类决策结构。在获取足够的数据条件下,根据筛选特征的先验条件分布,生成一种能够帮助决策的树结构。生成决策树的过程,可以由Matlab帮助生成。

    假设输入的样本含有N维特征和一维的标签,那么输入数据的结构就应该为:

    data: M*N的矩阵;M为样本的个数。

    label:M*1;M为样本的个数。

    具体使用代码如下:

    load fisheriris
    ctree = fitctree(meas, species);

    决策树的选取原则是最大化信息熵。简而言之,选出分类最为显著的特征作为上层节点,一层一层地筛选下来。决策树有多少层,选择就有多少个分支。对于新的样本,只需对应做出相应的选择,就可以走到根节点,做出判断。

    图形化观察生成的决策树:

    view(ctree, 'mode', 'graph');

    有时生成的树,由于特征的取值域是连续的,导致决策树过于庞大,需要进行一些人为的剪枝操作。剪枝操作在Matlab中可以使用prune函数,取出指定层次以下节点或是指定节点以下的节点。

    ctree = prune(ctree, 'Level', 1);
    view(ctree, 'mode', 'graph');

    具体参数调节,可以通过图形化界面观察,特点是减掉所有后续节点。这一点应该和其数据结构有关。



    展开全文
  • MATLAB 决策树

    2019-08-10 16:47:10
    采用10次10折交叉验证,测试集平均准确率为95%左右 绘有决策树
  • matlab实现决策树

    2016-04-03 10:46:00
    机器学习决策树MATLAB实现,帮助深刻理解决策树
  • 决策树MATLAB函数使用

    万次阅读 多人点赞 2016-12-13 10:40:39
    决策树算法以及MATLAB函数使用 决策树的生成是一个递归的过程,在决策树算法
  • 这是关于决策树算法的matlab实验代码,其中有详细的实验内容以及实验的最后结果,可以帮助大家动手去理解决策树,当然我也写了关于此资源相关的文章 《[机器学习]决策树算法的MATLAB实现》,希望大家看一下在决定下...
  • 决策树算法 MATLAB 简单实现

    万次阅读 多人点赞 2018-10-24 19:22:51
    最近在数据挖掘与机器学习的课程上刚刚学到了决策树算法,于是,想自己用 MATLAB 简单实现一下。虽然拿其中最简单算法的进行实现,但是,从构思–编写–初步完成,也花费了不少时间,毕竟只有动手编写,才能真正体会...
  • MATLAB中,为方便用户对决策树算法的使用,MATLAB中针对分类决策树和回归决策树分别封装了两个函数:fitctree和fitrtree。由于分类决策树和回归决策树两者具有极大的相似性,因此fitctree和fitrtree两者的使用方法...
  • matlab开发-决策树和决策林。该软件实现了C /MEX中的决策树/森林分类器。
  • ID3决策树-MATLAB程序

    2018-09-22 11:53:07
    1.亲测MATLAB2014a及2016a可运行 2.拥有从训练到测试分类性能的完整流程
  • matlab决策树分类器

    2018-02-01 14:43:48
    利用matlab 决策树算法对某疾病进行诊断的代码示例,欢迎下载参考
  • 二叉决策树实现代码(Matlab
  • 决策树算法原理: 决策树算法的基本原理 决策树算法是一种特别简单的机器学习分类算法。在机器学习中,决策树是一个预测模型,其代表的是对象属性与对象之间的一种映射关系。 决策树算法的特点: 决策树算法的...
  • 转自: --------------------- 作者:_Daibingh_ 来源:CSDN ...版权声明:本文为博主原创文章,转载请附上博文链接!...最近在数据挖掘与机器学习的课程上刚刚学到了决策树算法,于是,想自己用 MATLAB 简单实现一...
  • 决策树分类是数据挖掘中分类分析的一种算法。顾名思义,决策树是基于“树”结构来进行决策的,是人类在面临决策问题时一种很自然的处理机制。例如下图一个简单的判别买不买电脑的决策树:下图是一个测试数据集,我们...
  • matlab开发-多变量决策树。多元ADTree是交替决策树(ADTree)的多元扩展。
  • MATLAB-决策树

    千次阅读 2019-04-21 19:11:15
    决策树(Decision Tree)算法主要用来处理分类问题,是最经常使用的数据挖掘算法之一。 基于信息论的决策树算法有ID3、CART和C4.5等算法,其中C4.5和CART两种算法从ID3算法中衍生而来。  CART和C4.5支持数据特征...
  • matlab决策树算法源码

    2011-07-16 08:08:46
    matlab语言的 决策树算法源码。用于数据挖掘的
  • 决策树算法简介及其MATLAB、Pyhton实现

    万次阅读 多人点赞 2018-09-29 19:49:18
    MATLAB实现决策树分类算法 基于python实现决策树 决策树原理概述 决策树通过把样本实例从根节点排列到某个叶子节点来对其进行分类。树上的每个非叶子节点代表对一个属性取值的测试, 其分支就代表测试的每个...
  • 决策树id3 matlab源码

    热门讨论 2010-04-28 21:29:20
    使用matlab实现id3决策树算法,给出使用方法及举例,并附带相关测试集合。
  • 决策树 id3算法实现多叉树树形图显示,使用matlab编程实现多叉树生成结构体,再对结构体进行处理,生成树形图。
  • Matlab-决策树代码下载

    热门讨论 2013-10-19 15:46:44
    Matlab 分类算法基础初级之决策树 亲测可用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 420
精华内容 168
关键字:

决策树matlab

matlab 订阅