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 相关文章推荐
Python3实现从指定路径查找文件的方法
May 22 Python
Python出现segfault错误解决方法
Apr 16 Python
python+Django+apache的配置方法详解
Jun 01 Python
python中range()与xrange()用法分析
Sep 21 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
Oct 16 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
Python正则匹配判断手机号是否合法的方法
Dec 09 Python
Python实现多进程的四种方式
Feb 22 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
python pygame实现挡板弹球游戏
Nov 25 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
pycharm中使用request和Pytest进行接口测试的方法
Jul 31 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
PHP检测用户语言的方法
2015/06/15 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
Jquery实现的角色左右选择特效
2014/05/21 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
React复制到剪贴板的示例代码
2017/08/22 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
基于js中style.width与offsetWidth的区别(详解)
2017/11/12 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
Vue 动态组件与 v-once 指令的实现
2019/02/12 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[01:32]2014DOTA2西雅图邀请赛 CIS我们有信心进入正赛
2014/07/08 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
python list数据等间隔抽取并新建list存储的例子
2019/11/27 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
小学英语教学反思
2014/01/30 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
手机被没收的检讨书
2014/10/04 职场文书
先进工作者事迹材料
2014/12/23 职场文书
深度学习tensorflow基础mnist
2021/04/14 Python