【机器学习-决策树模块-基础算法-1)ID3算法】

决策树最最最基础的三个算法:

 对于什么是决策树,决策树的基本概念网上已经多的不能再多了这里不再赘述,直接切入正题,决策树的算法以及实现。
至于遇到的必须要掌握的信息论相关知识,我会在这篇文章里根据自己遇到的知识来持续更新:
-------------------------------------------------------------------------------------------------------------------------

一.ID3

· ID3算法是由Quinlan首先提出的,该算法以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。首先,ID3算法需要解决的问题是如何选择特征作为划分数据集的标准。在ID3算法中,选择信息增益最大的属性作为当前的特征对数据集分类。就是对各个feature信息计算信息增益,然后选择信息增益最大的feature作为决策点将数据分成两部分然后再对这两部分分别生成决策树。

 ·通过迭代的方式,我们可以得到决策树模型。

      
 
 ·至于什么是ID3决策树的终止条件以及其它的问题,还是放到例子里进行理解:(最近数学建模需要,用matlab代码,   python代码需要的可以看这篇博客:机器学习实战_初识决策树算法_理解其python代码(一)
----------------------------------------------------------------------------------------------------------------------------

·实例:

   实例:通过这几个指标(age,income,等等)来判断是否买电脑。
共14条记录,目标属性是,是否买电脑,共有两个情况,yes或者no。
首先需要对数据处理,例如age属性,我们用0表示youth,1表示middle_aged,2表示senior等。

 ·实例的MATLAB代码:
%% Decision Tree
% ID3

·1、导入数据
%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);

·2、开始创建决策树

%CREATTREE 此处显示有关此函数的摘要
%   此处显示详细说明
function [ output_args ] = createTree( data )
    [m,n] = size(data);%m行n列
    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
·3、选择信息增益最大的特征
%% 选择信息增益最大的特征
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));%得到每个feature的属性
        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);%计算划分之后的熵,此时的subSet里的变量只有一个值(这样复用函数对计算的效率会有点影响)
        end
        
        %计算信息增益(熵 - 条件熵)
        infoGain = baseEntropy - newEntropy;
        
        if infoGain > bestInfoGain
            bestInfoGain = infoGain;
            bestFeature = j;
        end
    end
end
4、一些基础的计算函数

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
function [ subSet ] = splitData( data, axis, value )  
    [m,n] = size(data);%得到待划分数据的大小  
      
    subSet = data;  
    %除去第axis个feature,得到剩下的满足第axis列值为value的data 
    subSet(:,axis) = []; 
    k = 0;  
    for i = 1:m  
        if data(i,axis) ~= value  
            subSet(i-k,:) = [];  
            k = k+1;  
        end  
    end     
从这个例子来看,ID3决策树还是很简单的,就是通过计算信息增益来得到最有价值的那个feature,这样不断迭代,直到遍历完所有的features,从而得到决策树。
决策树ID3算法的不足:
    ID3算法虽然提出了新思路,但是还是有很多值得改进的地方。  
    a)ID3没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
    b)ID3采用信息增益大的特征优先建立决策树的节点。很快就被人发现,在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大。如果校正这个问题呢?
    c) ID3算法对于缺失值的情况没有做考虑
    d) 没有考虑过拟合的问题
end
-------------------------------------------------------------------------------------------------------------------------

ID3 算法的作者昆兰基于上述不足,对ID3算法做了改进,这就是C4.5算法:

http://blog.csdn.net/qq_36396104/article/details/79291740

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
决策树算法机器学习中常用的一种算法,它通过构建一棵树形结构来进行分类或回归任务。决策树算法有多种不同的变体,其中包括ID3算法、C4.5算法和基本决策树算法ID3算法是最早提出的一种决策树算法,它的核心思想是通过计算信息增益来选择最佳的特征进行节点的划分。具体步骤是:从根节点开始,计算每个特征的信息增益,选择信息增益最大的特征作为当前节点的划分特征,然后根据该特征的不同取值建立子节点,再对子节点递归地应用以上步骤,直到所有的特征信息增益很小或没有特征可选为止。 C4.5算法是对ID3算法的改进,它引入了信息增益率(比)来选择特征,解决了ID3算法对于取值较多的特征有偏好的问题。与ID3算法相似,C4.5算法也使用递归的方式构建决策树,但在选择划分特征时,使用信息增益率作为选择的依据。 基本决策树算法决策树算法的一种简化版,它没有引入信息增益或信息增益率,而是通过计算基尼指数来选择最佳的划分特征。基尼指数衡量了一个特征的不纯度,选择基尼指数最小的特征进行划分。基本决策树算法相对于ID3算法和C4.5算法更简单直观,但在某些情况下可能会有一定的性能损失。 总的来说,决策树算法通过构建一棵树形结构来进行分类或回归任务,其中ID3算法、C4.5算法和基本决策树算法是其中的三种常见变体。每种算法都有其特点和优缺点,选择适合具体问题的算法可以提高算法的性能和准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [机器学习算法(3)之决策树算法](https://blog.csdn.net/qq_20412595/article/details/82048795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧地球(AI·Earth)社区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值