zoukankan      html  css  js  c++  java
  • 拓端tecdat|Python用决策树分类预测糖尿病和可视化实例

    原文链接: http://tecdat.cn/?p=23848

    原文出处:拓端数据部落公众号


    决策树是对例子进行分类的一种简单表示。它是一种有监督的机器学习技术,数据根据某个参数被连续分割。决策树分析可以帮助解决分类和回归问题。

    决策树算法将数据集分解成更小的子集;同时,相关的决策树也在逐步发展。决策树由节点(测试某个属性的值)、边/分支(对应于测试的结果并连接到下一个节点或叶子)和叶子节点(预测结果的终端节点)组成,使其成为一个完整的结构。

    在这篇文章中,我们将学习Python中决策树的实现,使用scikit learn包。

    对于我们的分析,我们选择了一个非常相关和独特的数据集,该数据集适用于医学科学领域,它将有助于预测病人是否患有糖尿病,基于数据集中采集的变量。这些信息来自国家糖尿病、消化道和肾脏疾病研究所,包括预测变量,如病人的BMI、怀孕情况、胰岛素水平、年龄等。让我们直接用决策树算法来解决这个问题,进行分类。

    用Python实现决策树

    对于任何数据分析问题,我们首先要清理数据集,删除数据中的所有空值和缺失值。在这种情况下,我们不是在处理错误的数据,这使我们省去了这一步。 

    1. 为我们的决策树分析导入所需的库并拉入所需的数据

    1.  
       
    2.  
      # 加载库
    3.  
      from sklearn.model_selection import train_test_split #导入 train_test_split 函数
    4.  
      from sklearn import metrics #导入scikit-learn模块以计算准确率
    5.  
       
    6.  
      # 载入数据集
    7.  
      data = pd.read_csv("diabetes.csv", header=None, names=col_names)
    8.  
       

    让我们看看这个数据集的前几行是什么样子的

    pima.head()

    2. 在加载数据后,我们了解结构和变量,确定目标变量和特征变量(分别为因变量和自变量)。

    1.  
      #在特征和目标变量中拆分数据集
    2.  
      X = pima[feature] # 特征
    3.  
      y = pima.label # 目标变量

    3. 我们把数据按70:30的比例分成训练集和测试集。

    1.  
      # 将数据集分成训练集和测试集
    2.  
      train_test_split(X, y, test_size=0.3, random_state=1) # 70%的训练和30%的测试

    作为标准做法,你可以根据需要遵循70:30至80:20。 

    4. 使用scikit learn进行决策树分析

    1.  
      # 创建决策树分类器对象
    2.  
      clf = DecisionTreeClassifier()

    5. 估计分类器预测结果的准确程度。准确度是通过比较实际测试集值和预测值来计算的。 

    1.  
      # 模型准确率,分类器正确的概率是多少?
    2.  
      print("准确率:",metrics.accuracy_score(y_test, y_pred))
    3.  
       

    我们的决策树算法有67.53%的准确性。这么高的数值通常被认为是好的模型。 

    6. 现在我们已经创建了一棵决策树,看看它在可视化的时候是什么样子的

    决策树的可视化。

    1.  
       
    2.  
      Image(graph.create_png())

    Python输出

    你会注意到,在这个决策树图中,每个内部节点都有一个分割数据的决策规则。

    衡量通过决策树分析创建的节点的不纯度

    Gini指的是Gini比,衡量决策树中节点的不纯度。人们可以认为,当一个节点的所有记录都属于同一类别时,该节点是纯的。这样的节点被称为叶子节点。

    在我们上面的结果中,由于结果的复杂性,完整的决策树很难解释。修剪一棵树对于结果的理解和优化它是至关重要的。这种优化可以通过以下三种方式之一进行。

    • 标准:默认="gini"
    • splitter:字符串,可选(默认="best")或分割策略。选择分割策略。可以选择 "best"来选择最佳分割,或者选择 "random"来选择最佳随机分割。
    • max_depth: int或None,可选(默认=None)或树的最大深度
      这个参数决定了树的最大深度。这个变量的数值越高,就会导致过度拟合,数值越低,就会导致拟合不足。

    在我们的案例中,我们将改变树的最大深度作为预修剪的控制变量。让我们试试max_depth=3。 

    1.  
       
    2.  
      # 创建决策树分类器对象
    3.  
      DecisionTree( max_depth=3)
    4.  
       
    5.  
       

    在Pre-pruning上,决策树算法的准确率提高到77.05%,明显优于之前的模型。

    决策树在Python中的实现

    1.  
       
    2.  
      Image(graph.create_png())

    结果:

    Python输出

    这个修剪过的模型的结果看起来很容易解释。有了这个,我们就能够对数据进行分类,并预测一个人是否患有糖尿病。但是,决策树并不是你可以用来提取这些信息的唯一技术,你还可以探索其他各种方法。

    如果你想学习和实现这些算法,那么你应该探索通过辅助方法学习,并得到专业人士的1对1指导。拓端数据科学职业轨道计划保证了1:1的指导,项目驱动的方法,职业辅导,提供实习工作项目保证,来帮助你将职业生涯转变为数据驱动和决策的角色。请联系我们以了解更多信息!
     


    最受欢迎的见解

    1.从决策树模型看员工为什么离职

    2.R语言基于树的方法:决策树,随机森林

    3.python中使用scikit-learn和pandas决策树

    4.机器学习:在SAS中运行随机森林数据分析报告

    5.R语言用随机森林和文本挖掘提高航空公司客户满意度

    6.机器学习助推快时尚精准销售时间序列

    7.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

    8.python机器学习:推荐系统实现(以矩阵分解来协同过滤)

    9.python中用pytorch机器学习分类预测银行客户流失

    ▍关注我们 【大数据部落】第三方数据服务提供商,提供全面的统计分析与数据挖掘咨询服务,为客户定制个性化的数据解决方案与行业报告等。 ▍咨询链接:http://y0.cn/teradat ▍联系邮箱:3025393450@qq.com
  • 相关阅读:
    Qt之数据类型转换
    [leetcode] Sudoku Solver
    调用摄像头拍照实例,摇一摇实例
    html 标签
    JavaScript 常见的六种继承方式
    js的DOM的方法和属性总结
    BOM属性方法。
    DOM 元素对象的属性方法
    完整的用户代理字符串检测
    可以跨浏览器获得窗口左边,和上边的位置
  • 原文地址:https://www.cnblogs.com/tecdat/p/15335614.html
Copyright © 2011-2022 走看看