• rainman 置顶
    2019-02-15
    对于 CART 回归树的可视化,可以先在电脑上安装 graphviz;然后 pip install graphviz,这是安装python的库,需要依赖前面安装的 graphviz。可视化代码如下:

    ----
    from sklearn.tree import export_graphviz
    import graphviz

    # 参数是回归树模型名称,不输出文件。
    dot_data = export_graphviz(dtr, out_file=None)
    graph = graphviz.Source(dot_data)
    # render 方法会在同级目录下生成 Boston PDF文件,内容就是回归树。
    graph.render('Boston')
    ----

    具体内容可以去 sklearn(https://scikit-learn.org/stable/modules/generated/sklearn.tree.export_graphviz.html)
    和 graphviz(https://graphviz.readthedocs.io/en/stable/) 看看。
    展开

    编辑回复: 关于决策树可视化,大家可以看看这个。

    
     15
  • 胡
    2019-01-31
    cart分类树的决策树那副图看不懂。
     2
     16
  • 王彬成
    2019-02-17
    1、ID3,C4.5,以及 CART 分类树在做节点划分时的区别吗?
    ID3是基于信息增益来判断,信息增益最大的,选取作为根节点。
    C4.5采用信息增益率来判断,信息增益率最大的,选取作为根节点。
    CART分类树采用基尼系数最小的属性作为属性划分
    2、sklearn 中有个手写数字数据集,调用的方法是 load_digits(),你能否创建一个 CART 分类树,对手写数字数据集做分类?另外选取一部分测试集,统计下分类树的准确率?
    # 手写数据集load_digits()建立CART分类树
    # encoding= utf-8
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.datasets import load_digits

    #准备数据
    digits=load_digits()
    #获取特征集和分类标识
    features=digits.data
    labels=digits.target
    #随机抽取33%的数据作为测试集,其余为训练集
    train_features,test_features,train_labels,test_labels=train_test_split(features,labels,test_size=0.33,random_state=0)
    #创建cart分类树
    clf=DecisionTreeClassifier(criterion='gini')
    #拟合构造cart分类树
    clf=clf.fit(train_features,train_labels)
    # 用cart分类树做预测
    test_predict=clf.predict(test_features)
    #预测结果与测试集结果做比对
    score=accuracy_score(test_labels,test_predict)
    print("CART 分类树准确率 %.4lf"%score)
    -----------
    运算结果:CART 分类树准确率 0.8603
    展开
    
     9
  • jake
    2019-02-24

    首先想问一个问题 就是在讲到基尼系数那里 有一个图那里的例子 什么D: 9个打篮球 3个不打篮球那里
    那里的D的基尼系数用到了子节点归一化基尼系数之和这个方法求 请问D的基尼系数不能直接用 上面那个公式 也就是"1 - [p(ck|t)]^2"那个公式计算吗 我用这个公式计算出D的基尼系数为 1 - (9/12 * 9/12 + 3/12 * 3/12) = 6/16。 我也想问一下上面那个同学提的这个问题

    编辑回复: 单纯看节点D的基尼系数,采用公式:1 - [p(ck|t)]^2,也就是Gini(D)=1 - (9/12 * 9/12 + 3/12 * 3/12) = 0.375
    同时,文章也计算了关于节点D,在属性A划分下的基尼系数的情况:
    Gini(D, A)=|D1|/|D|*Gini(D1) + |D2|/|D|*Gini(D2)=6/12*0+6/12*0.5=0.25
    所以Gini(D)=0.375, Gini(D, A)=0.25

    
     4
  • 梁林松
    2019-01-23
    老师 那个打篮球的例子里 D1/D和D2/D为什么是6/9和2/9呢?如果是子节点占父节点的比例不是应该是各1/2吗?
    
     4
  • rm
    2019-03-01
    老师你好,决策的数是怎么生成的?
     1
     3
  • 程序员小熊猫
    2019-02-15
    ID3:以信息增益作为判断标准,计算每个特征的信息增益,选取信息增益最大的特征,但是容易选取到取值较多的特征
    C4.5:以信息增益比作为判断标准,计算每个特征的信息增益比,选取信息增益比最大的特征
    CART:分类树以基尼系数为标准,选取基尼系数小的的特征
                回归树以均方误差或绝对值误差为标准,选取均方误差或绝对值误差最小的特征

    练习题:
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn import tree
    from sklearn.metrics import accuracy_score
    import graphviz

    # 准备手写数字数据集
    digits = datasets.load_digits()
    # 获取特征和标识
    features = digits.data
    labels = digits.target
    # 选取数据集的33%为测试集,其余为训练集
    train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33)
    # 创建CART分类树
    clf = tree.DecisionTreeClassifier()
    # 拟合构造CART分类树
    clf.fit(train_features, train_labels)
    # 预测测试集结果
    test_predict = clf.predict(test_features)
    # 测试集结果评价
    print('CART分类树准确率:', accuracy_score(test_labels, test_predict))
    # 画决策树
    dot_data = tree.export_graphviz(clf, out_file=None)
    graph = graphviz.Source(dot_data)
    graph.render('CART//CART_practice_digits')

    CART分类树准确率: 0.8636363636363636
    展开

    作者回复: Good Job

    
     3
  • Lee
    2019-01-24
    # encoding=utf-8
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.datasets import load_digits

    # 准备数据集
    digits=load_digits()
    # 获取特征集和分类标识
    features = digits.data
    labels = digits.target
    # 随机抽取 33% 的数据作为测试集,其余为训练集
    train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
    # 创建 CART 分类树
    clf = DecisionTreeClassifier(criterion='gini')
    # 拟合构造 CART 分类树
    clf = clf.fit(train_features, train_labels)
    # 用 CART 分类树做预测
    test_predict = clf.predict(test_features)
    # 预测结果与测试集结果作比对
    score = accuracy_score(test_labels, test_predict)
    print("CART 分类树准确率 %.4lf" % score)

    CART 分类树准确率 0.8620
    展开

    作者回复: Good Job

    
     2
  • twelve
    2019-10-01
    1.导入数据

    from sklearn.datasets import load_digits
    digits = load_digits()
    feature = digits.data
    labels = digits.target
    测试集和训练集的构建
    from sklearn.model_selection import train_test_split
    rain_features,test_features,train_labels,test_labels = train_test_split(feature,labels,test_size=0.3)
    拟合
    from sklearn.tree import DecisionTreeClassifier
    clf = DecisionTreeClassifier(criterion='gini')
    clf = clf.fit(train_features,train_labels)
    预测
    test_predict = clf.predict(test_features)
    准确性分析
    from sklearn.metrics import accuracy_score
    score = accuracy_score(test_labels,test_predict)
    print(score)
    0.8685185185185185
    展开
    
     1
  • 许宇宝
    2019-07-18
    老师,看了两遍还是不明白分类的这个决策树是依据什么画出来的?

    作者回复: take it easy

    
     1
  • 羊小看
    2019-05-10
    1、为什么CRAT的基尼系数比C4.5的信息增益率好呢?既然sklearn库默认用的基尼系数,应该是这个好一些吧?
    2、from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.tree import DecisionTreeClassifier
    #from sklearn.datasets import load_iris
    from sklearn.datasets import load_digits

    # 准备数据集
    #iris=load_iris()
    digits=load_digits()
    # 获取特征集和分类标识
    #features = iris.data
    #labels = iris.target
    features = digits.data
    labels = digits.target
    # 随机抽取 33% 的数据作为测试集,其余为训练集
    train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
    # 创建 CART 分类树
    clf = DecisionTreeClassifier(criterion='gini')
    # 拟合构造 CART 分类树
    clf = clf.fit(train_features, train_labels)
    # 用 CART 分类树做预测
    test_predict = clf.predict(test_features)
    # 预测结果与测试集结果作比对
    score = accuracy_score(test_labels, test_predict)
    print("CART 分类树准确率 %.4lf" % score)

    CART 分类树准确率 0.8636
    展开

    作者回复: Good Job

    
     1
  • xfoolin
    2019-02-19
    ID3 是通过信息增益,选取信息增益最大的特征;C4.5 是通过信息增益率,选取,CART 是通过基尼系数,选取基尼系数最小的特征。


    from sklearn.model_selection import train_test_split#训练集和测试集
    from sklearn.metrics import mean_squared_error#二乘偏差均值
    from sklearn.metrics import mean_absolute_error#绝对值偏差均值
    from sklearn.datasets import load_digits#引入 digits 数据集
    from sklearn.metrics import accuracy_score#测试结果的准确性
    from sklearn import tree
    import graphviz
    #准备数据集
    digits = load_digits()
    #获取数据集的特征集和分类标识
    features = digits.data
    labels = digits.target
    #随机抽取 33% 的数据作为测试集,其余为训练集
    train_features,test_features,train_labels,test_labels = \
    train_test_split(features,labels,test_size = 0.33,random_state = 0)
    #创建 CART 分类树
    clf = tree.DecisionTreeClassifier(criterion = 'gini')
    #拟合构造分类树
    clf = clf.fit(train_features,train_labels)
    #用 CART 分类树做预测
    test_predict = clf.predict(test_features)
    #预测结果与测试集作对比
    score = accuracy_score(test_labels,test_predict)
    #输出准确率
    print('准确率 %.4f'%score)
    dot_data = tree.export_graphviz(clf,out_file = None)
    graph = graphviz.Source(dot_data)
    #输出分类树图示
    graph.view()
    展开

    作者回复: Good Job

    
     1
  • Chino
    2019-02-01
    首先想问一个问题 就是在讲到基尼系数那里 有一个图那里的例子 什么D: 9个打篮球 3个不打篮球那里
    那里的D的基尼系数用到了子节点归一化基尼系数之和这个方法求 请问D的基尼系数不能直接用 上面那个公式 也就是"1 - [p(ck|t)]^2"那个公式计算吗 我用这个公式计算出D的基尼系数为 1 - (9/12 * 9/12 + 3/12 * 3/12) = 6/16

    # ID3,C4.5,CART在做节点划分的区别
    # 我认为是三者的共同之处就是得出每个类别的某个属性值 然后根据这个属性值
    # 来选取哪个类型当节点 因此不同之处就是这个属性值.
    # ID3 根据 信息增益 判断 哪个节点的信息增益最大就当节点
    # C4.5 根据 信息增益率 判断 跟ID3相似
    # CART分类树 根据 基尼系数 判断 越小代表越稳定

    from sklearn.datasets import load_digits
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.metrics import accuracy_score
    from sklearn.model_selection import train_test_split


    digit = load_digits()

    # 把数据集中的数据和结果拿出来
    features = digit.data
    target = digit.target

    # 把数据集中的数据分33%当作测试数据 其他用来训练
    train_features,test_features,train_target,test_target = train_test_split(features,target,test_size=0.33)

    # 定义CART分类树
    clf = DecisionTreeClassifier()

    # 把训练数据弄到分类数中 构造树
    clf = clf.fit(train_features,train_target)

    # 把测试数据放进树中得出预测结果
    predict_target = clf.predict(test_features)

    # 对比预测出来的数据和实际结果
    score = accuracy_score(predict_target,test_target)

    print(score)

    展开

    编辑回复: 单纯看节点D的基尼系数,采用公式:1 - [p(ck|t)]^2,也就是Gini(D)=1 - (9/12 * 9/12 + 3/12 * 3/12) = 0.375
    同时,文章也计算了关于节点D,在属性A划分下的基尼系数的情况:
    Gini(D, A)=|D1|/|D|*Gini(D1) + |D2|/|D|*Gini(D2)=6/12*0+6/12*0.5=0.25
    所以Gini(D)=0.375, Gini(D, A)=0.25
    手写数字数据集,采用CART分类这个正确

    
     1
  • 雨先生的晴天
    2019-01-27
    scikit learn package 确实非常好用,很简洁。推荐大家也去官网看一看,请问一下怎样可以把decision tree 可视化呀?

    编辑回复: 评论中有人对决策树可视化做了解释,你可以看下。采用的是graphviz这个库,你需要先安装,然后使用。

    
     1
  • 鱼非子
    2020-02-08
    ID3:采用信息增益作为纯度的衡量
    C4.5:采用信息增益率作为纯度的衡量
    CART:采用基尼基数作为纯度的衡量
    
    
  • 鱼非子
    2020-02-08

    # encoding=utf-8
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.tree import DecisionTreeClassifier
    # from sklearn.datasets import load_iris
    from sklearn.datasets import load_digits
    # 准备数据集
    # iris = load_iris()
    digits = load_digits()
    # 获取特征集和分类标识
    # features = iris.data
    features = digits.data
    labels = digits.target
    # labels = iris.target
    # 随机抽取33%的数据作为测试集,其余为训练集
    train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
    # 创建CART分类树
    clf = DecisionTreeClassifier(criterion='gini')
    # 拟合构造CART分类树
    clf = clf.fit(train_features, train_labels)
    # 用CART分类树做预测
    test_predict = clf.predict(test_features)
    # 预测结果与测试集结果作比对
    score = accuracy_score(test_labels, test_predict)
    print("CART分类树准确率 %.4lf" % score)
    展开
    
    
  • GodlikeJy
    2019-12-28
    对于模型评价,这里需要学习一些统计学知识,混淆矩阵
    1. 真阳性(True Positive,TP):样本的真实类别是正例,并且模型预测的结果也是正例
    2. 真阴性(True Negative,TN):样本的真实类别是负例,并且模型将其预测成为负例
    3. 假阳性(False Positive,FP):样本的真实类别是负例,但是模型将其预测成为正例
    4. 假阴性(False Negative,FN):样本的真实类别是正例,但是模型将其预测成为负例
    正确率(Accuracy):被正确分类的样本比例或数量 (TP+TN)/total
    展开

    作者回复: 总结的不错

    
    
  • Destroy、
    2019-12-24
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.datasets import load_digits
    # 准备数据
    digits = load_digits()
    # 获取特征集和分类标识
    features = digits.data
    labels = digits.target
    # 随机抽取33%的数据作为测试集,其余为训练集
    train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
    # 创建CART分类树
    clf = DecisionTreeClassifier(criterion='gini')
    # 拟合构造CART分类树
    clf = clf.fit(train_features, train_labels)
    # 用CART分类树做预测
    test_predict = clf.predict(test_features)
    # 预测结果与测试集结果作对比
    score = accuracy_score(test_labels, test_predict)
    print('CART分类树准确率 %.4lf' % score)

    CART分类树准确率 0.8603
    展开
    
    
  • Mi compaero de ar...
    2019-11-19
    老师您好,请问采用CART算法时,如果离散型属性的值不止两种还能使用CART算法吗

    作者回复: 可以用CART算法,另外GBDT里面默认使用的是CART,这是个在数据分析,机器学习中常用的模型

    
    
  • Ronnyz
    2019-11-11
    第二问
    ```
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.datasets import load_digits

    digits = load_digits()

    # print(digits)

    features=digits.data
    labels = digits.target

    train_features,test_features,train_labels,test_labels=train_test_split(features,labels,test_size =0.33,random_state=0)

    clf = DecisionTreeClassifier(criterion='gini')
    clf=clf.fit(train_features,train_labels)

    predict_labels=clf.predict(test_features)

    print('分类准确度:',accuracy_score(test_labels,predict_labels))
    ```
    分类准确度: 0.8619528619528619
    展开

    作者回复: 代码正确

    
    
我们在线,来聊聊吧