精华内容
下载资源
问答
  • Classification Tree

    千次阅读 2018-03-05 20:22:13
    C5.0Decision Tree theory1、所有的数据放在根节点2、分堆注意事项:1、属性选择的结果是目标变量偏向于一个值2、砍树。(防止过拟合)1、越倾向于1越平均化;倾向于0越偏某一类。 交叉熵在0-1之间。注意事项1、决策...
    ID3->C4.5->C5.0

    Decision Tree theory

    1、所有的数据放在根节点

    2、分堆




    注意事项:

    1、属性选择的结果是目标变量偏向于一个值

    2、砍树。(防止过拟合)





    1、越倾向于1越平均化;倾向于0越偏某一类。 交叉熵在0-1之间。



    注意事项

    1、决策树和规则不一样。规则是提取的精华。决策树是有繁琐的规则在的。

    2、分类规则的算法和决策树不一样。WEKA提供。modeler不提供分类规则算法。

    ID3的缺点:

    1、字段选择的时候,喜欢分支度越多。使得一个分支趋向于0或者1。因为这样会使Information Gain增大。(比如 ID进入决策树,在测试机无法预测。

    2、所有的变量是离散的。无法处理离散的数据。

    3、没法处理空值

    4、无法砍树,无法防止过拟合。

    ID3 每个节点的分支度不同。

    C4.5的改进:

    C4.5的特点

    1、可以处理数值型数据。找Gain ration 的最大切点。可以分为二叉树的类型;类别型的话有几类分几类。


    2、可以砍树。
    修剪法:从下往上(C4.5/CART)

    盆栽法:(top-down)--CHAID

    在25% 的信息水准下:



                          


      

    在这样的水平下,在信息水准的水平下。错误率会提升。

    3、C4.5可以处理空值和数值型的字段。

    CART算法:

    Gini =[0-1/2] 之间 0(偏某类)-1/2 (平均)
    熵: 越趋向于1越平均。






    注意事项:

    1、可以重复使用各个节点。


    2、CART的砍树方法:





    CART:可以处理数值型字段;可以砍树。





    CHAID:
















    展开全文
  • 决策树 本文根据《机器学习》与《机器学习实战》自学,写出以下内容。 一、基本流程 一颗决策树包含一个根节点、若干个内部节点与若干个叶节点,叶节点对应于决策结果,其他节点对应于一个属性的测试;...

    决策树

    本文根据《机器学习》与《机器学习实战》自学,写出以下内容。(仅供学习而用,非商业用途。)

    一、基本流程

    一颗决策树包含一个根节点、若干个内部节点与若干个叶节点,叶节点对应于决策结果,其他节点对应于一个属性的测试;根节点包含样本全集,从根节点到每个叶节点的路径对应了一个判定测试序列,决策树学习的目的就是为了产生一颗泛化能力强的决策树,其基本流程如下:
    输入:训练集 D={(x1,y1),(x2,y2),…,(xm,ym)}
    属性集(特征集)A={a1,a2,…,ad}
    过程:TreeGenerate(D,A)
    1.生成节点node
    2.if D中样本全属于同一类别C then
    3. 将node标记为C类叶节点;return
    4.end if
    5.if A为空集 or D中样本在A上取值相同 then
    6. 将node标记为叶节点,其类别标记为D中样本数最多的类;return
    7.end if
    在这里插入图片描述
    决策树的生成是一个递归过程,有三种情形导致递归返回:
    1.当前节点包含的样本全属于同一类别,无需划分
    2.当前属性集为空,或所有样本在所有属性上取值相同,(把当前节点标记为叶节点)。
    3.当前节点包含的样本集合为空(同样把当前节点标记为叶节嗲按,但将其类别设定为其父节点所含样本最多的类别)

    二、划分的一般原则

    信息增益Gain(A)越大,使用属性A划分所获得的“纯度”提升越大
    2.1
    信息熵的公式:
    在这里插入图片描述
    以下代码为计算信息信息熵的公式。

    import operator
    from math import log
    def Ent(dataSet):
    	ent_num = len(dataSet)
    	label_counts = {}
    	for feat_Vec in dataSet:
    		current_label = feat_Vec[-1]
    		if current_label not in label_counts.keys():
    			label_counts[current_label] = 0
    			label_counts[current_label] +=1
    		ent_1 =0.0
    		for key in label_counts:
    			prob = float(label_counts[key])/ent_num
    			ent_1 -=prob*log(prob,2)
    

    计算完信息熵之后,按照最大信息增益的方法划分数据集。

    def split_dataset(dataSet,axis,value):#dataset待划分数据集,特征(属性),特征的返回值
    	re_dataSet = []#创建新的列表对象
    	for feat_Vec in dataSet:    #将符合特征的数据抽取出来
    		if feat_Vec[axis] ==value:
    			del_feat_vec = feat_Vec[:axis]
    			del_feat_vec.extend(feat_Vec[axis + 1:])
    			re_dataSet.append(del_feat_vec)
    		return re_dataSet
    

    循环上述代码,找出最好的特征划分方式。以下为选择最好的数据集划分方式代码:

    def best_feature_split(dataSet):
    	feature_num = len(dataSet[0])-1
    	base_ent = Ent(dataSet)
    	best_Gain = 0.0
    	best_feature =-1
    	for i in range(feature_num):
    		feat_list = [example[i] for example in dataSet]
    		unique_Vals = set(feat_list)
    		new_ent = 0.0
    		for value in unique_Vals:
    			sub_dataset = split_dataset(dataSet, i, value)
    			prob = len(sub_dataset) / float(len(dataSet)) 
    			new_ent += prob * Ent(sub_dataset)  
    			info_Gain = base_ent - new_ent  #信息增益
    			if info_Gain > best_Gain:
    				best_Gain = info_Gain
    				best_feature = i
    		return best_feature
    

    如果数据集已经处理了所有属性,但是类标签依然不是唯一的,此时我们需要决定如何定义该叶子结点,一般会采用多数表决的方法确定该叶子结点的分类。代码如下:

    def majorityCnt(classList):
        classCount = {}  # 创建唯一值的数据字典
        for vote in classList:
            if vote not in classCount.keys():  # 如果该标签不再字典中,就扩展字典,并将value值设为0
            	classCount[vote] = 0
            classCount[vote] += 1  # 否则就+1
        sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)  # 利用operator操作键值排序字典,reverse=True倒序
    
        return sortedClassCount[0][0]  # 取出第一个,即投票最多的
    

    下面就可以开始创建树的函数代码了。

    def createTree(dataSet, labels):  # 数据集和标签列表
        classList = [example[-1] for example in dataSet]  # 获取数据集的标签(数据集每条记录的最后列数据)
        # 递归停止的第一个条件
        if classList.count(classList[0]) == len(classList):  # 类别完全相同就停止继续划分数据
            return classList[0]
        # 递归停止的第二个条件
        if len(dataSet[0]) == 1:  # 遍历完所有特征时返回出现次数最多的类别(无法简单地返回唯一的类标签,使用前面的多数表决方法)
            return majorityCnt(classList)
        bestFeat = best_feature_split(dataSet)  # 找出最佳数据集划分的特征属性的索引
        bestFeatLabel = labels[bestFeat]  # 获取最佳索引对应的值
        myTree = {bestFeatLabel: {}}
        del (labels[bestFeat])  # 删除最佳索引的列
        featValues = [example[bestFeat] for example in dataSet]
        unique_Vals = set(featValues)  # 使用set集合去除重复的值,得到列表包含的所有属性值
        for value in unique_Vals:  # 遍历所有最佳划分的分类标签
            subLabels = labels[:]
            myTree[bestFeatLabel][value] = createTree(split_dataset(dataSet, bestFeat, value), subLabels)  # 递归调用
        return myTree
    
    

    到此,构建决策树的所有过程(代码)已经比较完整了。后面会进行具体的项目实战,也就是决策树的用法和可视化,敬请期待。发现代码有误的请及时指正。∩∪∩!!!

    展开全文
  • R语言 分类决策树 classification tree

    千次阅读 2019-02-01 06:56:33
    R语言决策树示例 建模造树 rm(list=ls()) data(spam) data <- spam id <- sample(1:4601,2000) train &...library(tree) ...mdl=tree(type~., data=train, spli...

    R语言决策树示例

    建模造树

    rm(list=ls())
    library(kernlab)
    data(spam)
    data <- spam
    id <- sample(1:4601,3000)
    train <- data[id,]
    test <- data[-id,]
    
    library(tree)
    library(rpart)
    mdl=tree(type~., data=train,
             split = c("deviance","gini"))
    
    # 作图
    plot(mdl)
    text(mdl, pretty=0)
    
    # 测试集的错误率
    pred <- predict(mdl, test, type = "class")  
    mean(pred!=test$type)
    # [1] 0.08869457
    deviance(mdl)    # 训练集偏差
    # [1] 1327.724
    

    在这里插入图片描述

    修剪 prune

    ptree <- prune.tree(mdl,best=4)   # best对应着最底层节点数,即叶子数
    plot(ptree)
    text(ptree, pretty=0)
    
    展开全文
  • 介绍-------------------------------------------------- ------------------------------ 该程序采用在 Matlab 中使用 TreeBagger 或分类树函数 ClassificationTree 训练的决策树,并输出包含所有分支信息的纺织品...
  • infinite-tree | php的无限树工具包 之前我已经写过一个无限级分类PHP包名称叫tp5-nestedsets在packagist上的安装量还是挺大的。但是tp5-nestedsets是基于tp5的很显然其灵活性不够高。而infinite-tree是一个不受...
  • %用于构造决策树的函数,分类树 %用于多类分类的二叉决策树 ctree = ClassificationTree.fit(P_train,T_train); %view(t)%画出决策树 view(ctree); view(ctree,'mode','graph'); %测试,利用分类树预测标签 T_sim = ...
    
    
    %% I. 清空环境变量
    clear all
    clc
    warning off
     
    %% II. 导入数据
    load data.mat
     
    %%
    % 1. 随机产生训练集/测试集
    %randperm是matlab函数,功能是随机打乱一个数字序列。其内的参数决定了随机数的范围。
    a = randperm(569);
    %data 是一个矩阵
    %data(x,y) x是行数 y是列数
    %训练集
    Train = data(a(1:500),:);
    %测试集
    Test = data(a(501:end),:);
     
    %%
    % 2. 训练数据
    P_train = Train(:,3:end);
    T_train = Train(:,2);
     
    %%
    % 3. 测试数据
    P_test = Test(:,3:end);
    T_test = Test(:,2);
    %用于构造决策树的函数,分类树
    %用于多类分类的二叉决策树
    ctree = ClassificationTree.fit(P_train,T_train);
    %view(t)%画出决策树
    view(ctree);
    view(ctree,'mode','graph');
     
    %测试,利用分类树预测标签
    T_sim = predict(ctree,P_test);
     
    %% V. 结果分析
    count_B = length(find(T_train == 1));
    count_M = length(find(T_train == 2));
    rate_B = count_B / 500;
    rate_M = count_M / 500;
    total_B = length(find(data(:,2) == 1));
    total_M = length(find(data(:,2) == 2));
    number_B = length(find(T_test == 1));
    number_M = length(find(T_test == 2));
    number_B_sim = length(find(T_sim == 1 & T_test == 1));
    number_M_sim = length(find(T_sim == 2 & T_test == 2));
    disp(['病例总数:' num2str(569)...
          '  良性:' num2str(total_B)...
          '  恶性:' num2str(total_M)]);
    disp(['训练集病例总数:' num2str(500)...
          '  良性:' num2str(count_B)...
          '  恶性:' num2str(count_M)]);
    disp(['测试集病例总数:' num2str(69)...
          '  良性:' num2str(number_B)...
          '  恶性:' num2str(number_M)]);
    disp(['良性乳腺肿瘤确诊:' num2str(number_B_sim)...
          '  误诊:' num2str(number_B - number_B_sim)...
          '  确诊率p1=' num2str(number_B_sim/number_B*100) '%']);
    disp(['恶性乳腺肿瘤确诊:' num2str(number_M_sim)...
          '  误诊:' num2str(number_M - number_M_sim)...
          '  确诊率p2=' num2str(number_M_sim/number_M*100) '%']);
    %生成对数间距向量
    %y = logspace(a,b,n)10 的幂 10^a 和 10^b(10 的 N 次幂)之间生成 n 个点。
    leafs = logspace(1,2,10);
    %n = numel(A) 返回数组 A 中的元素数目 n 等同于 prod(size(A))。
    N = numel(leafs);
    %zeros(2,3) 将返回一个 2×3 矩阵,全零
    err = zeros(N,1);
    for n = 1:N
        t = ClassificationTree.fit(P_train,T_train,'crossval','on','minleaf',leafs(n));
        err(n) = kfoldLoss(t);
    end
    %绘制figure1
    %plot(X,Y) 创建 Y 中数据对 X 中对应值的二维线图。
    plot(leafs,err);
    xlabel('叶子节点含有的最小样本数');
    ylabel('交叉验证误差');
    title('叶子节点含有的最小样本数对决策树性能的影响')
     
    
    OptimalTree = ClassificationTree.fit(P_train,T_train,'minleaf',13);
    view(OptimalTree,'mode','graph')
     
    %计算OptimalTree中有无交互项的再替代分类损失
    resubOpt = resubLoss(OptimalTree)
    %crossval 使用交叉验证估计损失
    %kfoldLoss 交叉验证分类模型的分类损失
    lossOpt = kfoldLoss(crossval(OptimalTree))
     
    
    resubDefault = resubLoss(ctree)
    lossDefault = kfoldLoss(crossval(ctree))
     
    %%剪枝
    %剪枝处理
    %剪枝是决策树算法对付“过拟合”的主要手段,分支过多,对训练数
    %据的拟合很完美,但对测试数据则不一定,且效率较低。因此可主
    %动去掉一些分支来降低过拟合的风险。 剪枝处理包括预剪枝和后剪枝,分别对应着在决策树生成过程中/决策叔生成完毕后进行剪枝处理。
    %交叉验证回归误差
    [~,~,~,bestlevel] = cvLoss(ctree,'subtrees','all','treesize','min')
    %t2=prune(t,'level','level'/'node')
    %level:0 不剪枝 1 剪掉最后一层 2 最后两层
    %node: 剪掉第node个分支后的所有
    cptree = prune(ctree,'Level',bestlevel);
    view(cptree,'mode','graph')
     
    %%
    % 计算剪枝后决策树的重采样误差和交叉验证误差
    resubPrune = resubLoss(cptree)
    lossPrune = kfoldLoss(crossval(cptree))
    
    
    展开全文
  • Like SVMs, Decision Trees are versatile Machine Learning algorithms that can perform both classification and regression tasks, and even multioutput tasks. They are very powerful algorithms, capab...
  • 决策树分类很符合人类分类时的思想,决策树分类时会提出很多不同的问题,判断样本的某个特征,然后综合所有的判断结果给出样本的类别。例如下图的流程即为一个典型的决策树分类的流程图,这个流程图用来简略的判断一...
  • 分类回归树(Classification And Regression Tree)主要用于复杂数据的回归。 优点:可以对复杂和非线性的数据建模 缺点:结果不易理解 适用数据类型:数值型和标称型在数据(标称型数据需映射成二值型) ...
  • 分类与回归树(classification and regression tree,CART)之回归 写在前面: 因为正在看提升树,所以又去看了李航老师《统计学习方法》的CART算法的回归部分,看完莫名想起了本科导师的名言:国内人写书,喜欢简单...
  • ————————————————————————————————————————————————————————————————————————————— 决策树之C4.5 上面讨论的决策树的ID3算法,...
  • 决策树分类

    2020-04-30 13:41:46
    for n = 1:N t = ClassificationTree.fit(P_train, T_train,'crossval', 'on','minleaf',leafs(n)); err(n) = kfoldLoss(t); end plot(leafs,err); xlabel('叶子节点含有的最小样本数'); ylabel('交叉验证误差'); ...
  • 决策树ID3,CART,预剪枝,后剪枝
  • Classification trees

    2018-11-04 15:54:15
    Classification trees in R Building a simple decision tree The loans dataset contains 11,312 randomly-selected people who were applied for and later received loans from Lending Club,...
  • Classification Learner工具箱可以训练很多模型包括:decision trees, discriminant analysis, support vector machines, logistic regression, nearest neighbors, naive Bayes, and ensemble cl...
  • Tree Classification

    2020-04-24 20:03:41
    //slim tree binary tree: heap: all leap have to be as left as possible, like complete tree bst: just remeber that every node in left subtree < current node < every node in right subtree avl: th....
  • TreeLSTM Sentiment Classification

    千次阅读 2019-03-08 13:32:08
    实验室周日讨论班讲的是TreeLSTM Sentiment Classification,主讲人:王铭涛 本人来做一下总结。 下面的图片来自于 王铭涛的ppt 导读 我们一步一步来。先说最基础的RNN结构: 公式为: 就一个简单的隐层...
  • TreeDemo.java增长了树。 它需要文件train.csv ,并且标题已删除。 TestTreeDemo.java使用TreeDemo.java构建的模型对新观察结果进行分类。 它需要来自Kaggle上同一站点的文件test.csv(也删除了标题)。 要运行...
  • 建立分类树: load ionosphere % contains X and ...ctree = ClassificationTree.fit(X,Y)   建立回归树: load carsmall % contains Horsepower, Weight, MPG X = [Horsepower Weight]; rtree = RegressionTree
  • Matlab fitrttree() 决策树

    千次阅读 2020-10-10 10:22:39
    % create classification tree view(ctree) % text description 顺便提一下,MATLAB中默认的划分方法是基于基尼系数的。 2.用训练好的决策树做数据分类 load ionosphere % contains X and Y variables ctree = ...
  • CART(Classification And Regression Tree

    千次阅读 2017-11-18 16:07:31
    CART算法(Classification And Regression Tree)http://blog.csdn.net/u014568921/article/details/45082197 https://wenku.baidu.com/view/286c19dae009581b6bd9eb59.html ...
  • sklearn版本低,需≥0.21\geq 0.21≥0.21( plot_tree 函数是在 scikit-learn 的 0.21 版本加入的) 查看sklearn版本方法 import sklearn print(sklearn.__version__) 补充:激活指定工作环境,更新skle
  • ctree = ClassificationTree.fit(data,label) %%画出分类决策树 view(ctree) view(ctree,'mode','graph') %预测身高是156 体重是57.6的是男生还是女生 Ynew = predict(ctree,[156 57.6000]) ...
  • Decision Tree Classification 决策树以树结构的形式构建分类或回归模型。它将数据集分解为越来越小的子集,同时逐步开发相关的决策树。最终结果是具有决策节点和叶节点的树。决策节点(例如,Outlook)具有两个或更...
  • CART:分类回归树(Classification and Regression Tree),属性如下: 1)CART分裂过程是一个二叉递归划分过程; 2)CART预测变量x的类型既可以是连续型变量量也可以是分类型变量; 3)CART数据应以其原始形式处理...
  • Gradient Tree Boosting:梯度提升树详解

    千次阅读 2018-01-26 22:02:09
    tree import DecisionTreeRegressor import matplotlib . pyplot as plt from sklearn . ensemble import GradientBoostingRegressor # Create a random dataset rng = np . random . RandomState ( ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,156
精华内容 8,462
关键字:

classificationtree