DecisionTreeClassifier的使用

参数介绍

clf = tree.DecisionTreeClassifier(criterion="entropy"   #不纯度的计算方法。"entropy"表示使用信息熵;"gini"表示使用基尼系数
                                  ,splitter="best"	#控制决策树中的随机选项。“best”表示在分枝时会优先选择重要的特征进行分枝;“random”表示分枝时会更加随机,常用来防止过拟合
                                  ,max_depth=10	#限制树的最大深度
                                  ,min_samples_split=5	#节点必须包含训练样本的个数
                                  ,min_samples_leaf=1	#叶子最少包含样本的个数
                                  ,min_weight_fraction_leaf=0.0
                                  ,max_features=None	#限制分枝的特征个数
                                  ,random_state=None	#输入任意数字会让模型稳定下来。加上random_state这个参数后,score就不会总是变化
                                  ,max_leaf_nodes=None
                                  ,min_impurity_decrease=0.0	#限制信息增益的大小,信息增益小于设定值分枝不会发生
                                  ,min_impurity_split=None	#结点必须含有最小信息增益再划分
                                  ,class_weight=None	#设置样本的权重,当正反样本差别较大时,又需要对少的样本进行精确估计时使用,搭配min_weight_fraction_leaf来剪枝
                                  ,presort=False
                                  )

重要属性介绍

clf.feature_importances_	#查看各特征对模型的重要性
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素',\
                '颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']	#设置特征的名字
print(*zip(feature_name,clf.feature_importances_))	#将特征与特征名对应显示出来

重要方法(接口)介绍

clf = clf.fit(Xtrain,Ytrain)	#将实例化的模型应用在训练集上
score = clf.score(Xtest,Ytest)	#得到该模型的分数
clf.apply(Xtest)	#返回每个测试样本所在的叶子节点的索引
clf.predict(Xtest)	#返回每个测试样本所在的分类/回归结果

调参

利用学习曲线调参

根据分数高低选择决策树的深度
#打分,用于分数判断选择多长深度的决策数,并用折线图直观显示出来。
def show(Xtrain, Ytrain,Xtest, Ytest):
    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()

根据预测结果与实际结果比较判断过拟合还是欠拟合
def isOverFitting(Xtrain,Ytrain,x,y): #x为没有划分训练集和测试集的特征值,y为没有划分训练集和测试集的标签
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.model_selection import cross_val_score
    import matplotlib.pyplot as plt
    tr = [] #用来存储训练集的分数
    te = [] #用来存储该模型交叉验证的分数
    for i in range(10):
		clf = DecisionTreeClassifier(random_state=25,max_depth=i+1,criterion="entropy")
        clf = clf.fit(Xtrain,Ytrain)
        score_tr = clf.score(Xtrain,Ytrain)
        score_te = cross_val_score(clf,x,y,cv=10).mean()    #将10此交叉验证结果的平均得分作为该深度数的得分
	    tr.append(score_tr)
	    te.append(score_te)
    print(max(te))  #输出最高得分
    plt.plot(range(1,11),tr,color = "red",label="train")
    plt.plot(range(1,11),te,color = "blue",label = "test")
    plt.legend()    #显示标签
    plt.show()  #显示图    

利用网格调参

def adujstParameter(Xtrain,Ytrain):
    import numpy as np
    from sklearn.tree import tree
    from sklearn.model_selection import GridSearchCV
    parameters = {'splitter':('best','random') #表示此参数可以选的值
                ,'criterion':("gini","entropy")
                ,"max_depth":[*range(1,10)]   #表示此参数可以选的整数为1-10之间
                ,'min_samples_leaf':[*range(1,50,5)]  #表示此参数可选的范围为1-50,每隔5个选一个
                ,'min_impurity_decrease':[*np.linspace(0,0.5,20)] #不纯度的选择范围为0-0.5之间20个数
                }#对需要调整参数的列举和取值范围设定
    clf = tree.DecisionTreeClassifier(random_state=25) #实例化模型
    GS = GridSearchCV(clf, parameters, cv=10) #将模型和参数代入
    GS.fit(Xtrain,Ytrain)  
    GS.best_params_    #得到最高得分的参数值
    GS.best_score_ #得到最高得分

举例

def decisionTree(Xtrain, Ytrain,Xtest, Ytest):
    clf = tree.DecisionTreeClassifier(
                                      # , random_state=30
                                       splitter='random'#有best和random两个可选项,random更加随机
                                      ,max_depth=10 #数的深度最多为10
									)
    clf = clf.fit(Xtrain,Ytrain) #第二部步模型导进去
    score = clf.score(Xtest,Ytest) #第三步,给模型打分
    return score
  • 9
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
决策树分类器(DecisionTreeClassifier)是一种基于树形结构的分类算法,它将数据集划分成多个小的子集,每个子集对应着树的一个节点。在每个节点上,我们都需要根据某个属性对数据进行划分,并且需要确定最佳的划分方式,这样才能使得每个子集内部的数据尽可能地相似,而不同子集之间的数据尽可能地不同。 DecisionTreeClassifier具有多种参数,下面是一些常用的参数及其含义: - criterion:表示决策树分裂时的评估指标,可以选择"entropy"(熵)或"gini"(基尼系数)。默认是"gini"。 - splitter:表示在决策树的每个节点上,如何选择最佳的属性进行分裂。可以选择"best"(最佳属性)或"random"(随机属性)。默认是"best"。 - max_depth:表示决策树的最大深度,即从根节点到叶节点的最长路径。默认是None,表示不限制深度。 - min_samples_split:表示每个非叶节点上至少需要有多少个样本才能进行分裂。默认是2。 - min_samples_leaf:表示每个叶节点上至少需要有多少个样本。默认是1。 - min_weight_fraction_leaf:表示每个叶节点上至少需要有多少样本权重。默认是0。 - max_features:表示在选择最佳属性进行分裂时,最多考虑多少个属性。可以是一个整数,也可以是一个浮点数(表示百分比)。默认是None,表示考虑所有属性。 - random_state:表示随机种子。如果不为None,则每次运行时都会得到相同的结果。 以上是一些常用的参数,当然还有其他的一些参数,具体可以参考官方文档。在使用DecisionTreeClassifier时,我们需要根据实际情况来选择合适的参数,从而得到最佳的分类结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值