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 获取本机ip地址的两个方法
Feb 25 Python
Python中使用logging模块打印log日志详解
Apr 05 Python
python安装以及IDE的配置教程
Apr 29 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python实现优先级队列结构的方法详解
Jun 02 Python
Python实现多线程的两种方式分析
Aug 29 Python
python将txt等文件中的数据读为numpy数组的方法
Dec 22 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
PyCharm安装Markdown插件的两种方法
Jun 24 Python
Tensorflow限制CPU个数实例
Feb 06 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 Python
Pyhton爬虫知识之正则表达式详解
Apr 01 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
深入解析PHP的引用计数机制
2013/06/14 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
ext实现完整的登录代码
2008/08/08 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
js delete 用法(删除对象属性及变量)
2014/08/24 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
微信公众号-获取用户信息(网页授权获取)实现步骤
2016/10/21 Javascript
详解如何在NodeJS项目中优雅的使用ES6
2017/04/22 NodeJs
JavaScript中的高级函数
2018/01/04 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
[01:03:09]完美世界DOTA2联赛PWL S2 Forest vs SZ 第二场 11.25
2020/11/26 DOTA
python利用不到一百行代码实现一个小siri
2017/03/02 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python实现聚类算法原理
2018/02/12 Python
python获取当前目录路径和上级路径的实例
2018/04/26 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python修改字典键(key)的方法
2019/08/05 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
Html5游戏开发之乒乓Ping Pong游戏示例(二)
2013/01/21 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
UNIX文件名称有什么规定
2013/03/25 面试题
临床医学系毕业生推荐信
2013/11/09 职场文书
学前教育学生自荐信范文
2013/12/31 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
婚前财产公证书
2014/04/10 职场文书
个人存款证明书
2014/10/18 职场文书
广告业务员岗位职责
2015/02/13 职场文书
社区节水倡议书
2015/04/29 职场文书