使用决策树与随机森林预测糖尿病

数据源: https://www.kaggle.com/uciml/pima-indians-diabetes-database#diabetes.csv

目的:生成决策树可视化;输出决策树和随机森林的性能报告;画出ROC图;分析不同特征的重要性

(作笔记使用,如有错误,欢迎指正!)

导入数据:

import pandas as pd
data = pd.read_csv('./datasets.csv')
data.head()

标题解释:

·Pregnancies:怀孕(次数)
    ·Glucose:葡萄糖
    ·BloodPressure:血压
    ·SkinThickness:皮肤厚度
    ·Insulin:胰岛素
    ·BMI:体重指数
    ·DiabetesPedigreeFunction:糖尿病谱系功能
    ·Age:年龄
    ·Outcome:结果

代码:

输出决策树和随机森林的性能报告

import pandas as pd
import numpy as np
from pandas import DataFrame
from sklearn.metrics import roc_auc_score
from sklearn.metrics import classification_report
from sklearn.ensemble import RandomForestClassifier
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split# 读取数据
data = pd.read_csv('./datasets.csv')# 将预测标签Outcome数据放到第一列
front = data['Outcome']
data.drop(labels='Outcome',axis = 1, inplace = True)
data.insert(0,'Outcome',front)y = data.iloc[:,0]
x = data.iloc[:,1:]x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=30/768)# 决策树
# max_depth=3定义树的深度, 可以用来防止过拟合
# min_weight_fraction_leaf 定义叶子节点最少要包含多少个样本(百分比表达), 防止过拟合
dtree = tree.DecisionTreeClassifier(criterion='entropy',max_depth=3,min_weight_fraction_leaf=0.01)
dtree = dtree.fit(x_train,y_train)print('\n\n---决策树---')
dt_roc_auc = roc_auc_score(y_test,dtree.predict(x_test))
print('决策树 AUC = %2.2f'%dt_roc_auc)
print(classification_report(y_test,dtree.predict(x_test)))# 随机森林
# max_depth=None  定义树的深度,可以用来防止过拟合
# min_samples_split=10  定义至少多少个样本的情况下才继续分叉,可以用来防止过拟合
rf = RandomForestClassifier(criterion='entropy',n_estimators=1000,max_depth=None,min_samples_split=10,min_weight_fraction_leaf=0.02)
rf.fit(x_train,y_train)
print('\n\n---随机森林---')
rf_roc_auc = roc_auc_score(y_test,rf.predict(x_test))
print('随机森林 AUC = %2.2f'%rf_roc_auc)
print(classification_report(y_test,rf.predict(x_test)))y_ = np.array(y_test)
print('随机森林预测结果:',rf.predict(x_test))
print('真实结果:         ',y_)# 决策树可视化
# 生成.dot文件
with open('treeone.dot', 'w') as f:dot_data = tree.export_graphviz(dtree, out_file=None)f.write(dot_data)

决策树和随机森林的性能报告:

生成决策树可视化:

# 决策树可视化
# 生成.dot文件
with open('treeone.dot', 'w') as f:dot_data = tree.export_graphviz(dtree, out_file=None)f.write(dot_data)

会在当前目录上生成一个.dot文件,然后打开cmd,定位到.dot文件所在的路径,运行命令:dot -Tpdf treeone.dot -o treeone.pdf

则会在当前目录上生成pdf文件

(注:这里要安装Graphviz,并配置好环境变量,安装教程可参考这里;可视化决策树可参考这里)

生成后的pdf大概是这样:

ROC图

from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt
%matplotlib inlinerf_fpr, rf_tpr, rf_thresholds = roc_curve(y_test,rf.predict_proba(x_test)[:,1])
dt_fpr, dt_tpr, dt_thresholds = roc_curve(y_test,dtree.predict_proba(x_test)[:,1])
plt.figure()# 随机森林 ROC
plt.plot(rf_fpr,rf_tpr, label = 'Random Forest(area=%0.2f)'%rf_roc_auc)# 决策树 ROC
plt.plot(dt_fpr,dt_tpr, label = 'Decision Tree(area=%0.2f)'%dt_roc_auc)plt.xlim([0.0,1.0])
plt.ylim([0.0,1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Graph')
plt.legend(loc="lower right")
plt.show()

所得结果:

分析不同特征的重要性

# 画出随机森林特征的重要性
importances = rf.feature_importances_
feat_names = data.drop(['Outcome'],axis = 1).columnsindices = np.argsort(importances)[::-1]plt.figure(figsize=(12,6))
plt.title('Feature improtances by RandomForest')
plt.bar(range(len(indices)),importances[indices],color='lightblue', align='center')
plt.step(range(len(indices)),np.cumsum(importances[indices]),where='mid',label='Cumulative')
plt.xticks(range(len(indices)),feat_names[indices],rotation='vertical',fontsize=14)
plt.xlim([-1,len(indices)])
plt.show()

# 画出决策树的特征的重要性
importances = dtree.feature_importances_
feat_names = data.drop(['Outcome'],axis=1).columns
indices = np.argsort(importances)[::-1]
plt.figure(figsize=(12,6))
plt.title("Feature importances by Decision Tree")
plt.bar(range(len(indices)), importances[indices], color='lightblue',  align="center")
plt.step(range(len(indices)), np.cumsum(importances[indices]), where='mid', label='Cumulative')
plt.xticks(range(len(indices)), feat_names[indices], rotation='vertical',fontsize=14)
plt.xlim([-1, len(indices)])
plt.show()

欢迎指正与指点!

使用决策树和随机森林分析预测糖尿病相关推荐

  1. 数据分享|R语言用主成分PCA、 逻辑回归、决策树、随机森林分析心脏病数据并高维可视化...

    全文链接:http://tecdat.cn/?p=22262 在讨论分类时,我们经常分析二维数据(一个自变量,一个因变量)(点击文末"阅读原文"获取完整代码数据). 但在实际生活中 ...

  2. 练习(一)——决策树与随机森林分析Titanic数据集船员生还情况

    数据描述 Titanic数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活 Pclass:船舱类别,3类别最高 Name.Sex.Age分别为姓名.性别.年龄,其中年龄有缺失 S ...

  3. R语言CART决策树、随机森林、chaid树预测母婴电商平台用户寿命、流失可视化

    全文链接:http://tecdat.cn/?p=31644 借着二胎政策的开放与家庭消费升级的东风,母婴市场迎来了生机盎然的春天,尤其是母婴电商行业,近年来发展迅猛(点击文末"阅读原文&q ...

  4. 使用决策树和随机森林预测NBA获胜球队

    NBA比赛通常是难分胜负,有些时候会在最后一刻才会决出胜负,因此,预测哪支球队最后获胜会非常困难.通常你看好的球队恰恰在这场比赛中就会输给比它弱的球队. 许多预测比赛胜负的研究往往会有准确率上限,根据 ...

  5. Python信贷风控模型:Adaboost,XGBoost,SGD, SVC,随机森林, KNN预测信贷违约支付

    全文链接:http://tecdat.cn/?p=26184 在此数据集中,我们必须预测信贷的违约支付,并找出哪些变量是违约支付的最强预测因子?以及不同人口统计学变量的类别,拖欠还款的概率如何变化?( ...

  6. sklearn分类器算法:决策树与随机森林及案例分析

    分类算法之决策树 决策树是一种基本的分类方法,当然也可以用于回归.我们一般只讨论用于分类的决策树.决策树模型呈树形结构.在分类问题中,表示基于特征对实例进行分类的过程,它可以认为是if-then规则的 ...

  7. python在Scikit-learn中用决策树和随机森林预测NBA获胜者 1

    最近我们被要求撰写关于预测NBA的研究报告,包括一些图形和统计输出.我们将以Scikit-learn的决策树和随机森林预测NBA获胜者.美国国家篮球协会(NBA)是北美主要的男子职业篮球联赛,被广泛认 ...

  8. 数据分享|Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户...

    原文链接:http://tecdat.cn/?p=23518 项目背景:银行的主要盈利业务靠的是贷款,这些客户中的大多数是存款大小不等的责任客户(存款人).银行拥有不断增长的客户(点击文末" ...

  9. 基于回归分析的广告投入销售额预测——K邻近,决策树,随机森林,线性回归,岭回归

    基于回归分析的广告投入销售额预测--K邻近,决策树,随机森林,线性回归,岭回归 文章目录 基于回归分析的广告投入销售额预测--K邻近,决策树,随机森林,线性回归,岭回归 1. 项目背景 2. 项目简介 ...

最新文章

  1. python爬虫可视化界面_python爬虫---垃圾分类可视化界面
  2. Windows切换网段脚本
  3. csv转json文件
  4. netflix_Netflix的计算因果推论
  5. php 根号2计算过程,根号2以及π的计算--关于无理数的畅想
  6. 设为首页 和 收藏本站js代码 兼容IE,chrome,ff
  7. linux 变量引用 和 变量的自动类型转换 c++,c++类型转换 - memristor的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. Objective-c:NSString的常用方法
  9. CentOS 关闭暂不需要的系统服务
  10. Apache-Commons-FileIOUtils工具类常用方法使用
  11. 局域网助手 LanHelper 简体中文版
  12. 阿里云服务(四)—云数据库RDS
  13. java推送微信消息换行_微信公众平台开发教程之文本消息如何换行(第十二课)
  14. 《喜欢你我也是》最精致程序员上线!
  15. 微服务研究 - Swoole框架-Swoft初探
  16. 20个月股票投资复盘:在被割韭菜中成长
  17. 美格智能5G模组助力电力巡检之无人机产品智能化高效运作
  18. [转载]20行Python代码爬取王者荣耀全英雄皮肤
  19. tensorflow与python交互系列,tf.py_function()、tf.py_func、tf.numpy_function()(一)
  20. CSAPP实验记录(2)--------- Bomb

热门文章

  1. MacOs 删除无用虚拟声卡
  2. 小米3移动版卡在Android,小米3高通版能用移动卡吗
  3. TCP/IP协议浅入浅出1
  4. LCD/HDMI OUT调试经验(2)------驱动流程与基本操作
  5. 网络电视软件sopcast安装 for ubuntu
  6. 使用万能表单解析程序将表单数据封装成ListMap
  7. 商品属性对应表,商品相册表,用户表,用户收货地址表,地区表,购物车表,送货方式表,订单表,订单明细表的数据库设计
  8. 现场总线技术笔记——1、数字信号是怎么完成通信的?(匹配阻抗、CRC校验)
  9. 直播源码搭建教程之直播流媒体
  10. 【科普】啥是物联网操作系统呢