数据科学——决策树

文章目录

  • 什么是决策树
  • 构建决策树

决策树——既能分类又能回归的模型

机器学习——决策树。

sklearn训练决策树

决策树——回归任务

什么是决策树

决策树是一种非常基础又常见的机器学习模型。
一棵决策树(Decision Tree)是一个树结构(可以是二叉树或非二叉树),每个非叶节点对应一个特征,该节点的每个分支代表这个特征的一个取值,而每个叶节点存放一个类别或一个回归函数。
使用决策树进行决策的过程就是从根节点开始,提取出待分类项中相应的特征,按照其值选择输出分支,依次向下,直到到达叶子节点,将叶子节点存放的类别或者回归函数的运算结果作为输出(决策)结果。

构建决策树

  1. 准备若干的训练数据(假设有 m 个样本);
  2. 标明每个样本预期的类别;
  3. 人为选取一些特征(即决策条件);
  4. 为每个训练样本对应所有需要的特征生成相应值——数值化特征;
  5. 将通过上面的1-4步获得的训练数据输入给训练算法,训练算法通过一定的原则,决定各个特征的重要性程度,然后按照决策重要性从高到底,生成决策树。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris=load_iris()
X=iris.data[:,2:]
y=iris.target
tree_clf=DecisionTreeClassifier(max_depth=2,random_state=42)
tree_clf.fit(X,y)
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=2,
            max_features=None, max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=1, min_samples_split=2,
            min_weight_fraction_leaf=0.0, presort=False, random_state=42,
            splitter='best')
tree.DecisionTreeClassifier(class_weight=None, #balanced & None 可选
                            criterion='gini',#"gini"或者"entropy",前者代表基尼系数,后者代表信息增益。
                            max_depth=None,#max_depth控制树的深度防止overfitting
            max_features=None, #可使用多种类型值,默认是"None",划分时考虑所有的特征数;
                               #"log2" 划分时最多考虑log2Nlog2N个特征;
                               #"sqrt"或者"auto" 划分时最多考虑√N个特征。
                               #整数,代表考虑的特征绝对数。
                               #浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。
                               #其中N为样本总特征数。
            max_leaf_nodes=None,#最大叶节点树
            min_impurity_split=1e-07, #限制决策树的增长,
                            #如果某节点的不纯度(基尼系数,信息增益)小于这个阈值,则该节点不再生成子节点,即为叶子节点。 
            min_samples_leaf=1,min_samples_split=2,#min_samples_split或min_samples_leaf来控制叶节点上的样本数量;
            #两者之间的主要区别在于min_samples_leaf保证了叶片中最小的样本数量,而min_samples_split可以创建任意的小叶子。但min_samples_split在文献中更常见。
            min_weight_fraction_leaf=0.0,#限制叶子节点所有样本权重和的最小值。如果小于这个值,则会和兄弟节点一起被剪枝。
                            # 默认是0,就是不考虑权重问题。
                            #一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,
                            #就会引入样本权重,这时我们就要注意这个值了。
            presort=False,#布尔值,默认是False不排序。预排序,提高效率。
                          #设置为true可以让划分点选择更加快,决策树建立的更加快。
            random_state=None, #随机生成器种子设置,默认设置为None,如此,则每次模型结果都会有所不同。
            splitter='best')#split"best"或者"random"。
           #前者在特征的所有划分点中找出最优的划分点。
           #后者是随机的在部分划分点中找局部最优的划分点。
           #默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"。

你可能感兴趣的:(数据科学导论,决策树,机器学习,算法)