美文网首页
决策树01

决策树01

作者: 文子轩 | 来源:发表于2020-06-08 20:31 被阅读0次
决策数算法的核心是要解决最佳节点和最佳分支
  • 如何从数据表中找到最佳节点和最佳分支
  • 如何让决策数停止生长,防止过拟合

一、sklearn中决策树

tree.DecisionTreeClassifier 分类树
tree.DecisionTreeRegressor 回归树
tree.export_graphviz 将生成的决策树导出为DOT格式,画图专用
tree.ExtraTreeClassifier 高随机版本的分类树
tree.ExtraTreeRegressor 高随机版本的回归树

建树过程

from sklearn import tree                            #导入需要的模块
clf = tree.DecisionTreeClassifier()                 #实例化
clf = clf.fit(x_train,y_train)                     #用训练集数据训练模型
result = clf.score(x_test,y_test)                  #导入测试集,从接口中调用需要的信息

二、重要参数

2.1 criterion

criterion 这个参数是用来觉得不纯度的计算方法的,sklearn提供了两种选择

  • 输入 "entropy" 使用信息熵(entropy)
  • 输入 “gini” ,使用基尼系数(Gini Impurity)

导入需要的算法库和模块

from sklearn  import tree
from sklearn.datasets import laod_wine
from sklearn.model_selection import train_test_split

探索数据

wine = load_wine()
wine.data.shape
wine.target
##如果wine是一张表 ,应该是这样的
import pandas as pd
pd.contact([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
wine.feature_names
wine.target_names

分测试集和训练集

Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
Xtrain.shape
Xtest.shape

画出一颗树吧

feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜
色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
import graphviz
dot_data = tree.export_graphviz(clf,out_file=None
                              ,feature_names=feature_name
                             ,class_names = =["琴酒","雪莉","贝尔摩德"]
                              ,filled=Ture
                              ,rounded=Ture)
graph = graphviz.Source(dot_data)
graph

探索决策树

clf.feature_importtances_
[*zip(feature_name,clf.feature_importances))]

评价树

clf = tree.DecisionTreeClassifier(criterion='entropy',random_state=30)
clf = clf.fit(Xtrain,Ytrain)
score = clf.score(Xtest,Ytest)

2.2 random_state & splitter

random_state用来设置分枝中的随机模式的参数
splitter也是用来控制决策树中的随机选项的,有"best" 和 “random”两种参数

clf = tree.DecisionTreeClassifier(criterion='entropy'
                                  ,random_state=30
                                  ,splitter='random')
clf = clf.fit(Xtrain,Ytrain)
score = clf.score(Xtest,Ytest)
score

import graphviz
dot_data = tree.export_graphviz(clf
                                 ,feature_names = feature_name
                                 ,class_names==["琴酒","雪莉","贝尔摩德"]
                                ,filled= Ture
                                ,rounded = Ture)

剪枝参数

为了让决策树有更好的泛化性,我们要对决策树进行剪枝。剪枝策略对决策树的影响巨大,正确的剪枝策略是优化
决策树算法的核心。sklearn为我们提供了不同的剪枝策略:

  • max_depth 限制树的最大深度,超过设定深度的树枝全部剪掉
  • min_samples_leaf 一个节点在分支后每个子节点都必须包含至少min_samples_leaf个训练样本
  • min_samples_split 一个节点必须包含至少min_samples_split个训练样本
clf = tree.DecisionTreeClassifier(criterion="entropy"
                                 ,random_state=30
                                 ,splitter="random"
                                 ,max_depth=3
                                 ,min_samples_leaf=10
                                 ,min_samples_split=10
                                 )
clf = clf.fit(Xtrain, Ytrain)
dot_data = tree.export_graphviz(clf
                               ,feature_names= feature_name
                               ,class_names=["琴酒","雪莉","贝尔摩德"]
                               ,filled=True
                               ,rounded=True
                               )  
graph = graphviz.Source(dot_data)
graph
clf.score(Xtrain,Ytrain)
clf.score(Xtest,Ytest)

max_features & min_impurity_decrease

  • max_features max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。
  • min_impurity_decrease 限制信息增益的大小

确认最优剪枝参数

import matplotlib.pyplot as plt
test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(max_depth=i+1
                                     ,criterion="entropy"
                                     ,random_state=30
                                     ,splitter="random"
                                     )
    clf = clf.fit(Xtrain, Ytrain)
    score = clf.score(Xtest, Ytest)
    test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

class_weight & min_weight_fraction_leaf
目标权重参数

相关文章

  • 相亲可以用决策树?

    2019年日更第225天 决策、管理、思考 01决策树:如何用决策树来选择相亲对象 什么是决策树?决策树就是一种把...

  • 决策树 | 训练决策树

    01 起 决策树相关的理论知识,我们在这篇文章中有详细讲解。 今天我们拿起python这个工具,基于决策树原理,写...

  • unit7 ID3分类决策

    《集体智慧编程》第七单元“决策树建模”实质就是ID3决策树处理 01 数据介绍 根据来源网站、位置、是否阅读FAQ...

  • 机器学习6-决策树

    一. 决策树概述 1.1 什么是决策树 决策树输入: 测试集决策树输出: 分类规则(决策树) 1.2 决策树算法概...

  • 决策树01

    决策数算法的核心是要解决最佳节点和最佳分支 如何从数据表中找到最佳节点和最佳分支 如何让决策数停止生长,防止过拟合...

  • 学习笔记

    20190814《5商》打卡D45 01 决策树:决策树,就是一种把决策节点画成树的辅助决策工具,一种寻找最优方案...

  • 决策树

    1、决策树 决策树学习通常包括3个步骤: 特征选择。 决策树生成。 决策树剪枝。 决策树的学习目标是:根据给定的训...

  • 决策树

    决策树 决策树模型与学习 特征选择 决策树的生成 决策树的剪枝 CART 算法 决策树模型呈树形结构,在分类问题中...

  • 决策树算法总结

    目录 一、决策树算法思想 二、决策树学习本质 三、总结 一、决策树(decision tree)算法思想: 决策树...

  • 决策树 | 绘制决策树

    01 起 在这篇文章中,我们讲解了如何训练决策树,然后我们得到了一个字典嵌套格式的决策树结果,这个结果不太直观,不...

网友评论

      本文标题:决策树01

      本文链接:https://www.haomeiwen.com/subject/oktwzhtx.html