一、决策树算法原理

上一篇文章简单、直接、粗暴的使用了决策树算法对鸢尾花数据集进行分类,关于决策树算法的原理,以我的理解:就是用能最大概率的区分不同类别标签的特征值作为分裂节点。

常用的算法是:CART 和 ID3 算法。

CART 算法采用gini系数最小的来决定使用哪种特征来进行分裂;
ID3算法采用信息增益最大的特征来决定使用哪种特征来进行分裂;

二、决策树的最优参数

这次的数据集使用稍微复杂一点的泰坦尼克号预测生死的数据。
重复的代码不啰嗦,直接上

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata=pd.read_csv(r'data.csv',index_col=0)
data.drop(['Cabin','Name','Ticket','Embarked'],inplace=True,axis=1)
data['Age']=data['Age'].fillna(data['Age'].mean())
data=data.dropna()
data['Sex']=data['Sex'].replace(to_replace=['female','male'],value=[1,0])

初步完成了缺失值的填充和删除处理,以及将性别替换成哑变量。

接下来,将数据集分成特征值和标签值。

x=data.iloc[:,1:]
y=data.iloc[:,0]

切分训练集和测试集

from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifierxtrain,xtest,ytrain,ytest=train_test_split(x,y,test_size=0.3,random_state=25)

这里有两种方式找到最优参数,一种是自己写代码,找到最优参数。
还有一种是调用别人写好的函数。

1、自己写代码找最优参数

计算不同深度下决策树的训练集和测试集的得分

xs=np.arange(1,11)
depth_no=[]
for x in xs:clf=DecisionTreeClassifier(max_depth=x,random_state=25)clf.fit(xtrain,ytrain)cte=clf.score(xtest,ytest)ctr=clf.score(xtrain,ytrain)depth_no.append([x,cte,ctr])

使用matplotlib画出正确率的曲线图

depth_no=pd.DataFrame(data=depth_no)plt.plot(depth_no[0],depth_no[1],label='test_score')
plt.plot(depth_no[0],depth_no[2],label='train_score')
plt.legend()
plt.show()

决策树最容易出现的就是过拟合问题,随着树的深度越来越深,训练集的正确率越来越高,但是测试集的效果反而下降。

由图可以看出,树的深度在3的时候,拟合效果较好。

2、调用别人写好的函数

导包

from sklearn.model_selection import GridSearchCV

给参数

para={'max_depth':[*range(1,10)],'min_samples_leaf':[*range(1,50,5)],'min_impurity_decrease':[*np.linspace(0,0.5,20)]
}

给定决策树算法,填入训练集,自动给出最优参数。

clf=DecisionTreeClassifier(criterion='entropy')
GS=GridSearchCV(clf,para,cv=10)
GS=GS.fit(xtrain,ytrain)
GS.best_params_

这里给出的最优深度是3,和作图得到的结果是一致的。

最后就是将得到的最优参数带入到算法中


clf=DecisionTreeClassifier(max_depth=3,min_impurity_decrease=0,min_samples_leaf=1,random_state=25)
clf.fit(xtrain,ytrain)

想看决策树的样子,和之前的一样

import graphviz
from sklearn import treedot_data=tree.export_graphviz(clf,out_file=None,feature_names=x.columns,class_names=['死亡','生存'],filled=True,rounded=True)graph=graphviz.Source(dot_data)
graph

决策树算法——拟合优化相关推荐

  1. 决策树算法原理(ID3,C4.5)

    决策树算法原理(CART分类树) CART回归树 决策树的剪枝 决策树可以作为分类算法,也可以作为回归算法,同时特别适合集成学习比如随机森林. 1. 决策树ID3算法的信息论基础   1970年昆兰找 ...

  2. 独家 | 手把手教你推导决策树算法

    作者:Arun Mohan 翻译:杨毅远 校对:王琦 本文长度为2000字,建议阅读5分钟 本文为大家介绍了机器学习中常用的决策树算法以及相关术语,并基于天气数据集进行决策树算法(ID3.CART算法 ...

  3. 决策树算法介绍及应用

    机器学习概念 机器学习 (Machine Learning) 是近 20 多年兴起的一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科. 机器学习理论主要是设计和分析一些 ...

  4. 最常用的决策树算法(一):ID3、C4.5、CART

    决策树是一个非常常见并且优秀的机器学习算法,它易于理解.可解释性强,其可作为分类算法,也可用于回归模型.本文将分三篇介绍决策树,第一篇介绍基本树(包括 ID3.C4.5.CART),第二篇介绍 Ran ...

  5. ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

    (2017-05-18 银河统计) 决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构成决策树来判断其可行性的决策分析方法,是直观运用概率分析的一种图解法.由于这种决策分支画 ...

  6. Python:以鸢尾花数据为例,介绍决策树算法

    文章参考来源: https://www.cnblogs.com/yanqiang/p/11600569.html https://www.cnblogs.com/baby-lily/p/1064622 ...

  7. python决策树原理_关于决策树算法最通俗的一次Python学习教程,你肯定得看

    一. 概述 前面的一篇 有一点得先说一下,决策树在优化过程中,有3个经典的算法,分别是ID3,C4.5,和CART.后面的算法都是基于前面算法的一些不足进行改进的,我们这次的Python学习教程就先跟 ...

  8. 决策树算法原理(上)

    决策树算法在机器学习中算是很经典的一个算法系列了.它既可以作为分类算法,也可以作为回归算法,同时也特别适合集成学习比如随机森林.本文就对决策树算法原理做一个总结,上篇对ID3, C4.5的算法思想做了 ...

  9. Python+sklearn决策树算法使用入门

    封面图片:<Python程序设计实验指导书>,董付国编著,清华大学出版社 =========== 在学习决策树算法之前,首先介绍几个相关的基本概念. 决策树算法原理与sklearn实现 简 ...

最新文章

  1. Thonny开发环境中显示数据曲线
  2. SQL 2008升级SQL 2008 R2完全教程或者10.00.1600升级10.50.1600
  3. oracle 批量修改表结构,关于Oracle批量修改表结构相关内容的整理
  4. 为了找到你,CTO 和你唠唠研发都做啥?
  5. superviseddescent (SDM C++11实现)环境配置
  6. matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图
  7. Android官方开发文档Training系列课程中文版:通知用户之更新或移除通知
  8. 在电脑上显示未知发布者怎么办_笔记本电脑显示器花屏怎么办?电脑屏幕花屏的解决方法...
  9. 5_数据分析—数据可视化
  10. c++ 哈希_Redis源码解析十一--Hash键实现Redis 哈希键命令实现(t_hash)
  11. 【react】 flux 的数据修改流程,类似与vuex那样,但是又有区别
  12. Oracle Spatial操作教程
  13. 预警:Mac木马出新招,利用俄罗斯太空计划作诱饵
  14. ARKit入门到精通-0.0-史小川-专题视频课程
  15. 阿里云邮箱企业版产品知识库
  16. 淘宝首页和详情页的规范
  17. Android项目实践(二)——日记本APP(V2)
  18. Java开发必备技巧
  19. PTA 7-191 百钱百鸡
  20. 牛客每日练习----一个背包问题,判断奥运年,沃老师学生的成绩

热门文章

  1. QT安装及新建控制台程序(一)
  2. 小米面试题:一副从1到n的牌
  3. 微信小游戏开发实战教程12-广告的开通和接入
  4. ios xib 初始化高度_iOS xib自定义,高度减少64
  5. ubuntu中查看安装的python版本
  6. 微信小程序——使用mock.js模拟数据
  7. 阿里健康一面面经(电话面)
  8. 实验三:py实现级数展开
  9. GM8906C替代DS90UR906,GM8913替代DS90UB913Q,GM8914替代DS90UB914Q,GM8905C替代DS90UR905QSQ
  10. MATLAB矩阵求逆剖析