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发送arp欺骗攻击代码分析
Jan 16 Python
Python单链表的简单实现方法
Sep 23 Python
在Python中使用mongoengine操作MongoDB教程
Apr 24 Python
在Python中操作时间之strptime()方法的使用
Dec 30 Python
全面了解python中的类,对象,方法,属性
Sep 11 Python
Python实现购物车程序
Apr 16 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
python递归法解决棋盘分割问题
Jul 17 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
Pandas时间序列:时期(period)及其算术运算详解
Feb 25 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 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
PHP计算日期相差天数实例分析
2016/02/23 PHP
php表单处理操作
2017/11/16 PHP
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
jQuery中innerWidth()方法用法实例
2015/01/19 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
jQuery事件用法详解
2016/10/06 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
2019/11/05 Javascript
[02:13] 完美世界DOTA2联赛PWL DAY5集锦
2020/11/03 DOTA
python处理cookie详解
2014/02/07 Python
python实现下载指定网址所有图片的方法
2015/08/08 Python
python 的列表遍历删除实现代码
2020/04/12 Python
python之生产者消费者模型实现详解
2019/07/27 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python如何对齐字符串
2020/07/30 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
Java面试题及答案
2012/09/08 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
大班开学家长寄语
2014/04/04 职场文书
保护环境倡议书500字
2014/05/19 职场文书
球队口号
2014/06/18 职场文书
绘画专业自荐信
2014/07/04 职场文书
餐厅服务员岗位职责
2015/02/09 职场文书
婚宴致辞
2015/07/28 职场文书
医院保洁员管理制度
2015/08/05 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
JavaScript获取URL参数的方法分享
2022/04/07 Javascript
python中使用redis用法详解
2022/12/24 Redis