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

分析机器学习之决策树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 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件?

    【问题标题】:How to check S_ISREG for a Windows NTFS file over SFTP in Python?如何在 Python 中通过 SFTP 检查 S_ISREG 以获取 Windows NTFS 文件? 【发布时间】:2023-04-02 10:49:01 【问题描述】: 我正在连接到 SFTP 服务器 (NTFS…

    Python开发 2023年4月8日
    00
  • python中对数据进行各种排序的方法

    在Python中,我们可以使用多种方法对数据进行排序。下面将介绍Python中常用的排序方法,包括内置函数sorted()、列表方法sort()、以及sorted()和sort()方法的参数和用法。同时,我们提供两个示例说明,以帮助您更好地理解这些排序方法的使用。 内置函数sorted() sorted()函数是Python内置的排序函数,它可以列表、元组、…

    python 2023年5月13日
    00
  • python使用mediapiple+opencv识别视频人脸的实现

    下面就为大家详细讲解“python使用mediapiple+opencv识别视频人脸的实现”的完整攻略。 简介 在实际应用中,视频人脸检测是一项非常重要的任务,可以广泛应用于人脸识别、安全监控、情绪分析、人群密度统计等领域。而众所周知的是,Python作为一种简单易学的编程语言,以其广泛的生态系统和快速的开发周期,成为了视频人脸检测的热门选择。 本攻略将介绍…

    python 2023年6月6日
    00
  • 一文教会你用Python读取PDF文件

    当需要读取PDF文件时,Python通过第三方库PyPDF2可以帮助我们完成此任务。本文将为您详细介绍如何使用PyPDF2模块,一步一步来教你如何在Python中读取PDF文件。 安装PyPDF2的方法 首先,在Python中使用pip安装PyPDF2模块。请在CMD终端中输入以下命令: pip install PyPDF2 打开PDF文件 在阅读PDF文件…

    python 2023年6月5日
    00
  • Python爬虫如何破解JS加密的Cookie

    Python爬虫如何破解JS加密的Cookie 在使用Python进行网站爬取时,经常会遇到JS加密的Cookie。这时就需要使用一些技巧来破解Cookie。下面是Python爬虫如何破解JS加密的Cookie的完整攻略,包括以下几个步骤: 1. 分析Cookie加密方式 首先,我们需要了解网站的Cookie加密方式。通常,网站采用JS代码动态生成Cooki…

    python 2023年5月18日
    00
  • 如何使用Python在MySQL中删除表?

    要使用Python在MySQL中删除表,可以使用Python的内置模块sqlite3或第三方库mysql-connector-python。以下是使用mysql-connector-python在MySQL中删除表的完整攻略: 连接 要连接到MySQL,需要提供MySQL的主机、用户名、和密码。可以使用以下代码连接: mysql.connector mydb…

    python 2023年5月12日
    00
  • Python高阶函数map() 简介和使用详解

    Python高阶函数map() 简介和使用详解 在Python中,map()是一个非常重要的高阶函数,它能够对可迭代对象的所有元素进行某种操作,并返回一个新的可迭代对象。map()方法通常可以代替for循环完成某些迭代操作,同时能大大提高代码的简洁度和可读性。 map()方法的语法 map(function, iterable, …) function:…

    python 2023年6月3日
    00
  • python中HTMLParser模块知识点总结

    Python中HTMLParser模块知识点总结 在Python中,HTMLParser模块是用于解析HTML和XHTML文档的内置模块。它提供了一个HTMLParser类,可以用于解析HTML和XHTML文档,并提供了一些回调函数,可以在解析文档时处理标、属性和文本等内容。 HTMLParser模块的使用 以下是使用HTMLParser模块解析HTML文档…

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