决策树
决策树是一种树结构(二叉树或非二叉树),每个非叶子节点代表对一个特征的测试,每个分支代表这个特征在一定取值范围内的输出,每个叶子节点存储一个类别.使用决策树进行决策的过程是从损失节点开始,观察待分类项目中对应的特征,根据其值选择输出分支,直到到达叶子节点,然后使用类别作为决策结果存储在叶节点中。
决策树模型通过对训练样本的学习建立分类规则,然后根据分类规则对新的样本数据进行分类和预测。决策树是最常用的数据挖掘算法,其主要优点是;
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()函数进行评估 |
cv | k折交叉验证的次数 |
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等
执行字面量 one-hot 编码转换:
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
文章出处登录后可见!