A. python 决策树可以调什么参数
调用这个包:
sklearn.treesklearn(scikit-learn)可以去下载,解压后放入C:Python27Libsite-packages直接使用。需要用同样的方法额外下载numpy和scipy包,不然会报错。
例子:
fromsklearn.datasetsimportload_iris
fromsklearn.model_selectionimportcross_val_score
fromsklearn.
clf=DecisionTreeClassifier(random_state=0)
iris=load_iris()
cross_val_score(clf,iris.data,iris.target,cv=10)
B. python中的sklearn中决策树使用的是哪一种算法
sklearn中决策树分为DecisionTreeClassifier和DecisionTreeRegressor,所以用的算法是CART算法,也就是分类与回归树算法(classification and regression tree,CART),划分标准默认使用的也是Gini,ID3和C4.5用的是信息!
C. python中的sklearn中决策树使用的是哪一种算法
sklearn中决策树分为DecisionTreeClassifier和DecisionTreeRegressor,所以用的算法是CART算法,也就是分类与回归树算法(classification and regression tree,CART),划分标准默认使用的也是Gini,ID3和C4.5用的是信息熵,为何要设置成ID3或者C4.5呢?
D. python中的sklearn中决策树使用的是哪一种算法
sklearn中决策树分为DecisionTreeClassifier和DecisionTreeRegressor,所以用的算法是CART算法,也就是分类与回归树算法(classification and regression tree,CART),划分标准默认使用的也是Gini,ID3和C4.5用的是信息熵
E. python中的sklearn中决策树使用的是哪一种算法
sklearn.tree.DecisionTreeClassifier基本上使用的是CART,稍稍有区别的是它对CART的计算性能进行了优化。
你是不可以指定它使用其他算法的。但是你可以设置sklearn.tree.DecisionTreeClassifier中criterion参数为"entropy",也就是信息增益,这样就几乎是ID3了。但是C4.5是基于信息增益率的,所以sklearn.tree.DecisionTreeClassifier做不到C4.5算法。
F. 决策树(decisionTree)
决策树(decisionTree)是一种基本的分类和回归方法。此文仅讨论用于分类方法的决策树。
决策树的学习通常分为3步:
决策树的学习的思想主要源于
定义决策树 :
分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点又分为内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
形如:
其中,圆表示内部结点,方框表示叶结点。
if-then规则,简单来说就是 :
举例:对于一个苹果,外表是红色的是红苹果,外表是绿色的是青苹果。可以表示为:
if-then规则集合具有一个重要的性质:
这就是说每一个实例都被一条路径或规则覆盖,并且只被一条路径或规则覆盖。这里所谓的覆盖是指实例的特征与路径上的特征一致,或实例满足规则的条件。
给定数据集:
其中, 为输入实例(特征向量),含有 个特征, 为类标记, , 为样本容量。
目标 :
根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确分类。
特征选择在于选取对训练数据具有分类能力的特征,这样可以提高决策树学习的效率。
如果我们利用某一个特征进行分类的结果与随机分类的结果没什么很大的差别的话,则称这个特征没有分类能力。
那么问题来了,怎么选择特征呢?
通常特征选择的准则是
下面通过例子来说明一下。
目标 :
希望通过所给的训练集数据,学习一个贷款申请的决策树。当新的客户提出贷款申请的时候,根据申请人的特征利用决策树决定是否批准贷款申请。
可见这里共有4个特征可供选择。用特征选择的准则是 。接下来介绍 。
:
熵是表示随机变量不确定性的度量。
设 是一个取有限个值的随机变量,其概率分布为
则随机变量 的熵定义为
若 ,则定义 。通常对数取以2为底,或是以 为底,熵的单位分布为比特(bit)或是纳特(nat)。
由上式可知,熵只依赖 的分布,而已 的值无关,则 的熵还可记作 ,即
则从定义可知
当随机变量只取2个值的时候,例如 时, 的分布为
熵为
熵随概率变化的曲线为
当 或 时 ,随机变量完全没有不确定性,当 时 ,熵取值最大,随机变量不确定性最大。
设随机变量 ,其联合概率分布
条件熵 表示在已知随机变量 的条件下随机变量 的不确定性。随机变量 给定条件下随机变量 的条件熵(conditional entropy),定义为 给定条件下 的条件概率分布的熵对 的数学期望
信息增益
特征 对训练集 的信息增益
根据信息增益准则的特征选择方法:对训练集 ,计算其每个特征的信息增益,并比较大小,选择信息增益最大的特征。
前期定义各个量:
信息增益的算法
输入:训练集 和特征 ;
输出:特征 对训练集 的信息增益
回看刚才的例子,
解 :
这一次我很无聊的想用一下.csv文件类型。
所以训练数据集部分如下,我存在一个loan.csv文件里了。对.csv文件的各种处理一般由python的pandas模块完成。
第一步,导入相关模块
第二步,读入数据
若是使用jupyter,可以即刻查看一下数据,和数据标签。
可以看出,除了'ID'之外前4个标签 'age', 'work', 'own house', 'Credit conditions'为我们一直在说的特征 ,而最后一个标签'label'是我们所说的类 ,所以要处理一下这些标签,
第三步,计算训练集 的熵 :
这里会用到pandas的一个统计数据的功能, groupby(by = [列]).groups ,将数据统计成字典的形式,这么说比较抽象,看下图,将我们用pandas读入的data,分为2类, , Index 表示索引,即第0,1,4,5,6,14(python计数从0开始)个数据的 ,第2,3,7,8,9,10,11,12,13个数据的 .
那么计算训练集 的熵
第四步,计算特征 对数据集 的条件熵
第五步 ,计算信息增益
输入:训练集 和特征 和阈值 ;
输出:决策树
(1) 中所有实例都属于同一类 ,则 为单结点树,并将类 作为该结点的类标记,返回 ;
(2) 若 ,则 为单结点树,并将 中实例数最大的类 作为该结点的类标记,返回 ;
(3)否则,按照上述信息增益的算法,计算 中各个特征对 的信息增益,选择信息增益最大的特征 ;
(4)如果特征 的信息增益小于阈值 ,将置 为单结点树,并将 中实例数最大的类 作为该结点的类标记,返回 ;
(5)否则,对 的每一个可能值 ,依 将 分割为若干非空子集 ,将 中实例数最大的类 作为该结点的类标记,构建子结点,由结点及其子结点构成树 ,返回 ;
(6)对第 个子结点,以 为训练集,以 为特征集,递归的调用步骤(1)~步骤(5),得到子树 ,返回 。
对上述表的训练集数据,利用ID3算法建立决策树。
解 :
第一次迭代 :
【特征:有自己的房子】将数据集 划分为2个子集 (有自己的房子)和 (没有自己的房子),观察一下 和 :
:
由于 所有实例都属于同一类 ,所以它是一个叶结点,结点的类标记为“是”。
:
对于 则需从特征 中选择新的特征。
第二次迭代 :
将 看作新的数据集 。【特征:有工作】有2个可能值,划分为2个子集 (有工作)和 (没有工作),观察一下 和 :
:
由于 所有实例都属于同一类 ,所以它是一个叶结点,结点的类标记为“是”。
:
G. 基于python的决策树能进行多分类吗
决策树主文件 tree.py
[python] view plain
#coding:utf-8
frommathimportlog
importjson
fromplotimportcreatePlot
classDecisionTree():
def__init__(self,criterion="entropy"):
self.tree=None
self.criterion=criterion
def_is_continuous_value(self,a):
#判断一个值是否是连续型变量
iftype(a).__name__.lower().find('float')>-1or
type(a).__name__.lower().find('int')>-1:
returnTrue
else:
returnFalse
def_calc_entropy(self,dataset):
#计算数据集的香农熵
classes=dataset.ix[:,-1]
total=len(classes)
cls_count={}
forclsinclasses:
ifclsnotincls_count.keys():
cls_count[cls]=0
cls_count[cls]+=1
entropy=1.0
forkeyincls_count:
prob=float(cls_count[key])/total
entropy-=prob*log(prob,2)
returnentropy
def_calc_gini(self,dataset):
#计算数据集的Gini指数
classes=dataset.ix[:,-1]
total=len(classes)
cls_count={}
forclsinclasses:
ifclsnotincls_count.keys():
cls_count[cls]=0
cls_count[cls]+=1
gini=1.0
forkeyincls_count:
prob=float(cls_count[key])/total
gini-=prob**2
returngini
def_split_data_category(self,dataset,feature,value):
#对分类变量进行拆分
#将feature列的值为value的记录抽取出来,同时删除feature列
H. python中的sklearn中决策树使用的是哪一种算法
要弄清楚这个问题,首先要弄懂决策树三大流行算法ID3、C4.5和CART的原理,以及sklearn框架下DecisionTreeClassifier的帮助文档。
3个算法的主要区别在于度量信息方法、选择节点特征还有分支数量的不同。
ID3,采用熵(entropy)来度量信息不确定度,选择“信息增益”最大的作为节点特征,它是多叉树,即一个节点可以有多个分支。
C4.5,同样采用熵(entropy)来度量信息不确定度,选择“信息增益比”最大的作为节点特征,同样是多叉树,即一个节点可以有多个分支。
CART,采用基尼指数(Gini index)来度量信息不纯度,选择基尼指数最小的作为节点特征,它是二叉树,即一个节点只分两支。
然后你认真阅读sklearn的DecisionTreeClassifier的帮助文档,可以发现,度量信息的方法默认是Gini,但可以改成entropy,请按需选择;构建的树是二叉树;可以通过设置max_deepth、max_leaf等来实现“剪枝”,这是根据CART的损失函数减少的理论进行的。
所以总结说,如果信息度量方法按照默认的设置,那么sklearn所用的决策树分类器就是CART,如果改成了entropy,那么只是使用了别的度量方法而已。其实两者差不多。
I. python中的sklearn中决策树使用的是哪一种算法
sklearn中决策树分为DecisionTreeClassifier和DecisionTreeRegressor,所以用的算法是CART算法,也就是分类与回归树算法(classification and regression tree,CART),划分标准默认使用的也是Gini,ID3和C4.5用的是信息熵,为何要设置成ID3或者C4.5呢