分析机器学习之决策树Python实现

yizhihongxing

分析机器学习之决策树Python实现攻略

简介

决策树是一种基本的分类和回归方法,其模型具有可解释性,易于理解和实现。本攻略将介绍如何使用Python编写决策树分类器,包括特征选择、树的生成和剪枝等过程。

步骤

1. 准备数据和环境

选择合适的数据集和环境,本攻略使用的是sklearn自带的鸢尾花分类数据集和Python 3.6环境。安装必要的库,如numpy、pandas和sklearn等。

import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from sklearn.model_selection import train_test_split

2. 特征选择

使用信息增益或信息增益比对特征进行选择。本攻略使用信息增益选择特征,将数据集分为训练集和测试集。

iris = datasets.load_iris()  # 加载数据集
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

3. 树的生成

使用DecisionTreeClassifier生成决策树,设置划分标准、最大深度和最小叶子节点个数等超参数。

clf = DecisionTreeClassifier(criterion='entropy', max_depth=5, min_samples_leaf=2)
clf.fit(X_train, y_train)

4. 树的可视化

使用graphviz将生成的决策树可视化,方便分析模型。

export_graphviz(clf, out_file='tree.dot', feature_names=iris.feature_names,
                class_names=iris.target_names, filled=True, rounded=True, special_characters=True)

5. 模型评估

使用测试集对模型进行评估,计算准确率、精确率、召回率和F1-score等指标。

y_pred = clf.predict(X_test)
accuracy = clf.score(X_test, y_test)
precision, recall, f1, support = precision_recall_fscore_support(y_test, y_pred)

示例1

下面是一个使用决策树分类器进行鸢尾花分类的代码示例:

from sklearn.metrics import precision_recall_fscore_support

# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 特征选择,将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 构建决策树
clf = DecisionTreeClassifier(criterion='entropy', max_depth=4)
clf.fit(X_train, y_train)

# 评估模型
y_pred = clf.predict(X_test)
accuracy = clf.score(X_test, y_test)
precision, recall, f1, support = precision_recall_fscore_support(y_test, y_pred)

print('准确率:', round(accuracy, 2))
print('精确率:', precision)
print('召回率:', recall)
print('F1-score:', f1)

输出结果:

准确率: 0.98
精确率: [1.         0.88888889 1.        ]
召回率: [1.         1.         0.88      ]
F1-score: [1.         0.94117647 0.93617021]

示例2

下面是一个利用决策树分类器对西瓜数据集进行分类的代码示例:

from collections import Counter
from sklearn.metrics import accuracy_score

# 加载数据集
watermelon_data = pd.DataFrame({
    "色泽": ['青绿', '乌黑', '乌黑', '青绿', '浅白', '青绿', '乌黑', '乌黑', '乌黑', '青绿',
          '浅白', '浅白', '青绿', '浅白', '乌黑', '浅白', '浅白', '乌黑', '青绿', '浅白'],
    "根蒂": ['蜷缩', '蜷缩', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '硬挺',
          '硬挺', '蜷缩', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '稍蜷', '蜷缩', '蜷缩', '蜷缩'],
    "敲声": ['浊响', '沉闷', '浊响', '浊响', '沉闷', '浊响', '浊响', '沉闷', '浊响', '清脆',
          '清脆', '浊响', '浊响', '沉闷', '浊响', '沉闷', '沉闷', '沉闷', '浊响', '浊响'],
    "纹理": ['清晰', '清晰', '清晰', '清晰', '清晰', '稍糊', '稍糊', '稍糊', '稍糊', '清晰',
          '稍糊', '稍糊', '清晰', '稍糊', '清晰', '稍糊', '稍糊', '稍糊', '清晰', '稍糊'],
    "脐部": ['凹陷', '凹陷', '凹陷', '稍凹', '稍凹', '稍凹', '稍凹', '稍凹', '稍凹', '平坦',
          '平坦', '凹陷', '稍凹', '稍凹', '稍凹', '稍凹', '凹陷', '凹陷', '凹陷', '稍凹'],
    "触感": ['硬滑', '硬滑', '硬滑', '软粘', '软粘', '软粘', '硬滑', '硬滑', '硬滑', '软粘',
          '硬滑', '硬滑', '软粘', '硬滑', '软粘', '软粘', '软粘', '软粘', '硬滑', '硬滑'],
    "好瓜": ['是', '是', '是', '是', '是', '是', '是', '否', '否', '否',
          '否', '否', '否', '否', '否', '否', '否', '否', '否', '否']
})

# 将样本特征和类别分开
X = watermelon_data.iloc[:,:-1]
y = watermelon_data.iloc[:, -1]

# 特征转换
X = pd.get_dummies(X, columns=X.columns)

# 特征选择,将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 构建决策树
clf = DecisionTreeClassifier(criterion='entropy', max_depth=2, min_samples_leaf=1)
clf.fit(X_train, y_train)

# 评估模型
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)

print('准确率:', round(accuracy, 2))

输出结果:

准确率: 1.0

结论

使用Python实现决策树分类器可以对各种类型的数据进行分类,同时也可以方便地进行模型的可视化和评估。在实际应用中,需要选择合适的特征和超参数,同时针对特定的数据集进行调试和优化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分析机器学习之决策树Python实现 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 如何在Python中将字符串转换为数组详解

    如何在Python中将字符串转换为数组?在Python中,字符串可以通过多种方式转换为数组,以下是其中的几种方法: 方法一: 使用split()方法分隔字符串 在Python中,字符串可以使用split()方法分隔成数组。该方法将返回一个字符串列表,其中每个元素都是原始字符串中的一个分隔符分隔的子字符串。 string = "Hello,World…

    python 2023年6月6日
    00
  • python实习总结(yeild,async,azwait和协程)

    Python实习总结 本文将介绍在Python实习中所了解到的yield、async、await和协程的知识点以及如何使用它们。 yield和生成器 yield是一种特殊的关键字,它可以让函数暂停执行,并将函数的当前状态保持下来。yield常用于生成器中,生成器可以用来迭代一组数据,而不用事先生成整组数据,这样可以节省内存空间。以下是yield的示例代码: …

    python 2023年5月13日
    00
  • 在Python中使用NumPy将一个赫米特数列与另一个数列相乘

    下面是在Python中使用NumPy将一个赫米特数列与另一个数列相乘的完整攻略。 准备环境 首先,你需要安装好NumPy库,可以使用以下命令进行安装: pip install numpy 安装完成后,你可以在Python脚本中引入NumPy: import numpy as np 什么是赫米特数列? 赫米特数列是一种具有特殊数学性质的序列,可以用于描述物理学…

    python-answer 2023年3月25日
    00
  • python游戏的魅力之冒险岛实战项目

    Python游戏的魅力之冒险岛实战项目攻略 1. 概述 冒险岛是一款非常受欢迎的在线多人角色扮演游戏,而我们可以使用Python来构建自己的冒险岛实战项目。在这个项目中,我们将使用Python的pygame库来构建一个精灵动作的游戏,玩家需要控制主角进行冒险和战斗。 2. 基本框架 我们可以使用pygame库来构建游戏的基本框架,具体如下: import p…

    python 2023年6月3日
    00
  • python3+PyQt5实现文档打印功能

    Python3 + PyQt5实现文档打印功能攻略 1. 实现思路 要实现文档打印功能,我们可以采用以下步骤: 利用PyQt5中的QTextEdit控件创建一个可编辑文本框,用于输入要打印的文本; 在文本框下方添加一个打印按钮,点击后触发打印事件; 控制打印事件,将文本框中的文本传递给QPrinter类进行格式化,然后再通过QPrintDialog类进行打印…

    python 2023年6月3日
    00
  • Python人工智能构建简单聊天机器人示例详解

    Python人工智能构建简单聊天机器人示例详解 本文将介绍如何使用Python人工智能构建一个简单的聊天机器人。下面将详细讲解以下几个方面: 开发工具以及环境配置 NLU(自然语言理解)和NLG(自然语言生成) 构建聊天机器人 使用机器人进行聊天测试 1. 开发工具以及环境配置 本例中,我们将使用Python 3.7和Django 2.1框架来实现我们的聊天…

    python 2023年5月14日
    00
  • 如何通过安装HomeBrew来安装Python3

    下面是安装HomeBrew并使用它来安装Python3的完整攻略。 安装HomeBrew 要安装HomeBrew,需要在终端中执行以下命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 安装过…

    python 2023年6月2日
    00
  • Python字符串及文本模式方法详解

    下面是详细的攻略: Python字符串及文本模式方法详解 Python中的字符串是一种常见的数据类型,用于存储文本数据。在本文中,我们将介绍Python中的字符串及文本模式方法,包括字符串的基本操作、字符串的格式化、字符串的编码和解码、以及文本模式的使用方法。 字符串的基本操作 Python中的字符串是不可变的,这意味着一旦创建了一个字符串,就不能修改它的内…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部