决策树

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

决策树模型通过对训练样本的学习,建立分类规则,然后依据分类规则,对新样本数据进行分类预测。决策树是最经常使用的数据挖掘算法,它主要的优点有;
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等

进行文字独热编码转换:

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

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

  1. 机器学习网格搜索寻找最优参数

    整理一下前阶段复习的关于网格搜索的知识: 程序及数据 请到github 上 下载 GridSearch练习 网格搜索是将训练集训练的一堆模型中,选取超参数的所有值(或者代表性的几个值),将这些选取的参 ...

  2. Python实现KNN(K近邻)回归模型(KNeighborsRegressor算法)并应用网格搜索算法寻找最优参数值项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 K近邻算法回归模型则将离待预测样本点最近的K个训练样本点的平均值 ...

  3. R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters)、计算特征重要度

    R语言构建catboost模型:构建catboost模型并基于网格搜索获取最优模型参数(Select hyperparameters).计算特征重要度(feature importance) 目录

  4. 神经网络技巧篇之寻找最优参数的方法【续】

    上一篇文章介绍了四种寻找最优参数的方法,这次做一个补充,对其中两种方法(Momentum和AdaGrad)做一些改进,让参数的更新收敛更快速 Nesterov 是对Momentum动量SGD的一个改进 ...

  5. 神经网络技巧篇之寻找最优参数的方法

    在神经网络的学习中,其中一个重要目的就是找到使损失函数的值尽可能小的参数,为了找到这个最优参数,我们使用梯度(导数)作为线索,沿着梯度方向来更新参数,并重复这个步骤,从而逐渐靠近最优参数,这个过程叫做 ...

  6. 寻找最优参数解:最速下降法,牛顿下降法,阻尼牛顿法,拟牛顿法

    感谢于建民的投稿,转载请注明出处:数盟社区 机器学习的一个重要组成部分是如何寻找最优参数解.本文就常见寻优方法进行总结,并给出简单python2.7实现,可能文章有点长,大家耐心些. 寻找最优参数解, ...

  7. 网格搜索GridSearchCV方法的参数parm_grid设置

    在做分类或者回归模型的过程中,避免不了要经历参数调优的过程,其中一种常用的方法就是结合交叉验证的网格搜索方法,它有一个参数param_grid,如果想做懒人式调优可以一次性把参数设置完,比如: par ...

  8. rpart 决策树中的 Cp(complexity parameter)参数

    Complexity parameter是决策树每一次分裂时候最小的提升量 在决策树中 cost complexity 为 每一个节点的错误率 + 一个惩罚项(基于划分次数) Cp是保证每一次新的划分 ...

  9. Sklearn专题实战——数据处理+模型构建+网格搜索+保存(提取)模型

    文章目录 1.前言 2.数据处理 3.模型构建 3.1.支持向量机 3.2.决策树 3.3.逻辑回归 4.网格搜索寻找最优结果 5.保存模型+提取模型 1.前言 针对Sklearn在前面已经通过代码实 ...

最新文章

  1. 主攻ASP.NET.4.5 MVC4.0之重生:Entity Framework生成实体类步骤(十三)
  2. 《网站分析师实战指南》一1.4 进入实战之路
  3. Swift类扩展使用方法
  4. 早停 tf.keras.callbacks.EarlyStopping() 详解【TensorFlow2入门手册】
  5. 检测到python编程环境中存在多个版本_linux下多个python版本怎么管理?
  6. jquery:使用 SoundManager 2 创建简单的网页音频播放器
  7. Upload-Labs(16)
  8. Cocos Creator教程 ——(一)Hello World
  9. Cause: java.sql.SQLException: Unknown initial character set index ‘255‘ received from server. Initia
  10. zabbix中mysql连不上的排错_zabbix使用排错 - oschina130111的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. 智能优化算法之模拟退火(Simulated Annealing,SA)-附源码
  12. 微信小程序盲盒系统源码 带教程
  13. 【学习笔记】尚硅谷大数据项目之Flink实时数仓---数据可视化接口实现
  14. MapGuide open source开发系列教程四: 体系结构(转贴)
  15. Vue Router 重定向和别名
  16. Markdown语法中使用表情符号
  17. HTML+CSS网页设计期末课程大作业:个人网站设计——个人介绍(7页) web前端开发技术 web课程设计 网页规划与设计
  18. missing separator 解决方法
  19. 如何让你自己做的网站他人可以访问——外网访问
  20. js封装QQ音乐api

热门文章

  1. mysql运维工程师_运维工程师需要了解的MySQL运维经验
  2. mysql 订单表与商品表_数据库——订单表中有不同类型的商品,表的设计
  3. CentOS 7 VM虚拟机安装docker步骤
  4. 用Python制作好玩的小游戏
  5. TSNAdb:肿瘤新抗原数据库
  6. Postgresql学习笔记之——SQL 执行计划
  7. 招商银行一网通H5接口调试和测试报告撰写注意事项
  8. 如何将notepad++设置为默认打开方式
  9. 《智慧彼岸之定心经》
  10. html5页面 学生作品,最完整长页面H5制作教程来啦!