python机器学习实现决策树


Posted in Python onNovember 11, 2019

本文实例为大家分享了python机器学习实现决策树的具体代码,供大家参考,具体内容如下

# -*- coding: utf-8 -*-
"""
Created on Sat Nov 9 10:42:38 2019

@author: asus
"""
"""
决策树
目的:
1. 使用决策树模型
2. 了解决策树模型的参数
3. 初步了解调参数
要求:
基于乳腺癌数据集完成以下任务:
1.调整参数criterion,使用不同算法信息熵(entropy)和基尼不纯度算法(gini)
2.调整max_depth参数值,查看不同的精度
3.根据参数criterion和max_depth得出你初步的结论。
"""

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import mglearn 
from sklearn.model_selection import train_test_split
#导入乳腺癌数据集
from sklearn.datasets import load_breast_cancer
from sklearn.tree import DecisionTreeClassifier


#决策树并非深度越大越好,考虑过拟合的问题
#mglearn.plots.plot_animal_tree()
#mglearn.plots.plot_tree_progressive()

#获取数据集
cancer = load_breast_cancer()
#对数据集进行切片
X_train,X_test,y_train,y_test = train_test_split(cancer.data,cancer.target,
       stratify = cancer.target,random_state = 42)
#查看训练集和测试集数据      
print('train dataset :{0} ;test dataset :{1}'.format(X_train.shape,X_test.shape))
#建立模型(基尼不纯度算法(gini)),使用不同最大深度和随机状态和不同的算法看模型评分
tree = DecisionTreeClassifier(random_state = 0,criterion = 'gini',max_depth = 5)
#训练模型
tree.fit(X_train,y_train)
#评估模型
print("Accuracy(准确性) on training set: {:.3f}".format(tree.score(X_train, y_train)))
print("Accuracy(准确性) on test set: {:.3f}".format(tree.score(X_test, y_test)))
print(tree)


# 参数选择 max_depth,算法选择基尼不纯度算法(gini) or 信息熵(entropy)
def Tree_score(depth = 3,criterion = 'entropy'):
 """
 参数为max_depth(默认为3)和criterion(默认为信息熵entropy),
 函数返回模型的训练精度和测试精度
 """
 tree = DecisionTreeClassifier(criterion = criterion,max_depth = depth)
 tree.fit(X_train,y_train)
 train_score = tree.score(X_train, y_train)
 test_score = tree.score(X_test, y_test)
 return (train_score,test_score)

#gini算法,深度对模型精度的影响
depths = range(2,25)#考虑到数据集有30个属性
scores = [Tree_score(d,'gini') for d in depths]
train_scores = [s[0] for s in scores]
test_scores = [s[1] for s in scores]

plt.figure(figsize = (6,6),dpi = 144)
plt.grid()
plt.xlabel("max_depth of decision Tree")
plt.ylabel("score")
plt.title("'gini'")
plt.plot(depths,train_scores,'.g-',label = 'training score')
plt.plot(depths,test_scores,'.r--',label = 'testing score')
plt.legend()


#信息熵(entropy),深度对模型精度的影响
scores = [Tree_score(d) for d in depths]
train_scores = [s[0] for s in scores]
test_scores = [s[1] for s in scores]

plt.figure(figsize = (6,6),dpi = 144)
plt.grid()
plt.xlabel("max_depth of decision Tree")
plt.ylabel("score")
plt.title("'entropy'")
plt.plot(depths,train_scores,'.g-',label = 'training score')
plt.plot(depths,test_scores,'.r--',label = 'testing score')
plt.legend()

运行结果:

python机器学习实现决策树

python机器学习实现决策树

python机器学习实现决策树

很明显看的出来,决策树深度越大,训练集拟合效果越好,但是往往面对测试集的预测效果会下降,这就是过拟合。

参考书籍: 《Python机器学习基础教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中获取网页状态码的两个方法
Nov 03 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Scrapy-redis爬虫分布式爬取的分析和实现
Feb 07 Python
python实现媒体播放器功能
Feb 11 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
在PyCharm导航区中打开多个Project的关闭方法
Jan 17 Python
python3 tcp的粘包现象和解决办法解析
Dec 09 Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 Python
Python操作MongoDb数据库流程详解
Mar 05 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
对Keras自带Loss Function的深入研究
May 25 Python
python实现会员信息管理系统(List)
Mar 18 Python
Python SQLAlchemy入门教程(基本用法)
Nov 11 #Python
django中间键重定向实例方法
Nov 10 #Python
Java文件与类动手动脑实例详解
Nov 10 #Python
python语言线程标准库threading.local解读总结
Nov 10 #Python
Python 脚本拉取 Docker 镜像问题
Nov 10 #Python
Python如何优雅获取本机IP方法
Nov 10 #Python
python argparser的具体使用
Nov 10 #Python
You might like
实用函数7
2007/11/08 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
Javascript无阻塞加载具体方式
2013/06/28 Javascript
JS中判断JSON数据是否存在某字段的方法
2014/03/07 Javascript
关于延迟加载JavaScript
2015/05/05 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
prototype.js常用函数详解
2016/06/18 Javascript
Bootstrap实现弹性搜索框
2016/07/11 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
Python实现动态图解析、合成与倒放
2018/01/18 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
JAVA中运算符的分类及举例
2015/09/12 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
面试后的英文感谢信
2014/02/01 职场文书
报关报检委托书
2014/04/08 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
党课心得体会范文
2014/09/09 职场文书