决策树中使用网格搜索寻找最优参数

决策树

决策树是一个树结构(二叉树或非二叉树),其每个非叶节点表示一个特征上的测试,每个分支代表这个特征在某个值域上的输出,每个叶节点存放一个类别。使用决策树进行决策的过程就是从损节点开始,观试待分类项中相应的特征,并按照其值选择输出分支,直到到达叶子节点,然后将叶子节点存放的类别作为决策结果。

决策树模型通过对训练样本的学习,建立分类规则,然后依据分类规则,对新样本数据进行分类预测。决策树是最经常使用的数据挖掘算法,它主要的优点有;
1.易于理解和实现。不需要使用者了解很多的背景知识,其通过决策树就能够直观形象地了解规则。

2.决策树能够同时处理数值型和非数值型数据,能够在相对较短的时间内对大型数据源做出可行且效果良好的预测。

DecisionTreeClassifier函数
在sklearn模块中,使用DecisionTreeClassifier函数进行决策树建模,常用参数如下:
sklearn.tree.DecisionTreeClassifier(critreion = ‘gini’,max_depth = None,max_leaf_nodes = None)

参数说明
criterion特征分裂依据指标,默认为gini,可以选择信息熵entory
max_depth树的最大深度,默认分裂到最细粒度的树结构
max_leaf_nodes树的最大叶子节点个数,默认分裂到最细粒度的树结构

网格搜索:

它是通过遍历给定的参数组合来优化模型表现的方法。网格搜索从候选参数集合中,选出一系列参数并把他们组合起来,得到候选参数列表。然后遍历参数列表,把候选参数放在模型中,计算得到该参数组合的得分。而后再从候选参数列表中,选择得分最高的参数,作为模型的最优参数。

GridSearchCV函数
在sklearn模块中,使用GridSearchCV函数进行网格搜索,通过交叉验证进行评分。

常用参数
sklearn.model_selection.GridSearchCV(estimator,param_grid,scoring = None,cv = 3,verbose = 0,return_train_score = False,n_jobs = 1)

参数说明
estmator要评估的模型
param_grid参数字典,参数名为key,候选参数列表为value
scoring评估指标,默认调用estimator.score()函数进行评估
cvk折交叉验证的次数
verbose执行过程中调试信息的等级,等级越高,输出信息越多
return_train_score是否返回训练得分,默认为False,一般需要设置为True
n_jobs并行运行的模型数,默认为1,可以根据cpu数量设置

下面用具实例体代码来实现。
部分数据如下:
在这里插入图片描述

导入相应实例数据:

import pandas as pd 
data = pd.read_csv(
    '../form/决策树.csv',encoding = 'gbk')
    #encoding根据自己文件的编码类型设置,主要的有utf-8,ANSI,gbk等

进行文字独热编码转换:

from sklearn.preprocessing import OneHotEncoder
oneHotColumns = ['性别','父母鼓励']
#需要进行独热处理的列
oneHotEncoder =  OneHotEncoder(drop = 'first')
#新建独热编码器
oneHotEncoder.fit(data[oneHotColumns])
#训练独热编码器,得到转换规则
oneHotData = oneHotEncoder.transform(data[oneHotColumns])
#转换数据

将转换出来的数据进行合并:

from scipy.sparse import hstack
x= hstack([
    oneHotData,
    data.父母收入.values.reshape(-1,1),
    data.IQ.values.reshape(-1,1)
])
y = data['升学计划']

进行网格搜索,寻找最优参数:

from sklearn.model_selection import GridSearchCV
from sklearn.tree import DecisionTreeClassifier
paramGride = dict(
    max_depth = [1,2,3,4,5],
    max_leaf_nodes = [3,5,6,7,8],)
    #网格搜索,寻找最优参数
dtModel = DecisionTreeClassifier()
#新建决策树模型
grid = GridSearchCV(
    dtModel,paramGride,cv = 10,return_train_score = True)
grid = grid.fit(x,y)
#训练模型

输出:

print('best_score:%f'% grid.best_score_)
print('最好的参数:')

for key in grid.best_params_.keys():
    print('%s = %s'%(key,grid.best_params_[key]))

运行代码:
在这里插入图片描述
结果显示,最优参数为max_depth =4,max_leaf_nodes = 7

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值