基于决策树的企鹅分类(python)

这篇具有很好参考价值的文章主要介绍了基于决策树的企鹅分类(python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验目的

采用决策树算法对企鹅进行分类

源代码和数据集下载

你可以在这里找到源代码和数据集。Github地址

数据集介绍

  • 样本总数:344
  • 7个特征变量(所在岛屿,嘴巴长度,嘴巴深度,脚蹼长度,身体体积,性别以及年龄)
  • 一个目标分类变量(三种企鹅类别:Adélie, Chinstrap, Gentoo)
  • 部分样本含有缺失值 NA

数据处理

导入包

有时候python找不到graphviz包的位置,我们要手动告诉它。???????这里是路径,你应该填自己的graphviz bin地址

import graphviz as graphviz
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
from sklearn import tree
import os

# 有时候python找不到graphviz包的位置,我们要手动告诉它
os.environ["PATH"] += os.pathsep + '??????'

导入数据、补全缺失值和类型变量转换

# 导入数据集
data = pd.read_csv(open(r'.\data\penguin.csv'))
# 利用-1补全缺失值 【这里用其他的方法 比如平均值补全,中位数补全会更好】
data = data.fillna(-1)
# 将类型变量转换为值变量
data['Species'] = data['Species'].apply(trans)
data['Island'] = data['Island'].apply(trans)
data['Sex'] = data['Sex'].apply(trans)

用到的转换函数如下:

# 将分类变量转化成数字变量,方便后续计算
def trans(x):
    if x == data['Species'].unique()[0]:
        return 0  # Adelie
    if x == data['Species'].unique()[1]:
        return 1  # Gentoo
    if x == data['Species'].unique()[2]:
        return 2  # Chinstrap
    if x == data['Island'].unique()[0]:
        return 0  # Torgersen
    if x == data['Island'].unique()[1]:
        return 1  # Biscoe
    if x == data['Island'].unique()[2]:
        return 2  # Dream
    if x == data['Sex'].unique()[0]:
        return 0  # male
    if x == data['Sex'].unique()[1]:
        return 1  # female
    if x == data['Sex'].unique()[2]:
        return -1  # -1

决策树的生成和测试

将处理后的数据分为特征数据和目标数据

feature_data = data[['Island', 'Culmen Length (mm)', 'Culmen Depth (mm)', 'Flipper Length (mm)', 'Body Mass (g)', 'Sex', 'Age']]
goal_data = data[['Species']]

将特征数据进行训练集和测试集的划分(20%的测试集,80%的训练集,random_state是伪随机数种子)

x_train, x_test, y_train, y_test = train_test_split(feature_data, goal_data, test_size=0.2, random_state=2022)

在生成最终决策树之前,为了更好的效果,我们可以设置的一些超参数如下:

  • 采用的判断方法 criterion:gini系数 还是 entropy, 可以像这样设置:criterion = ‘entropy’
  • 决策树的最大层数 max_depth:在本实验中,因为本身数据很少,在层数过高比如说到了7层后,它的重要性已经很低了,有可能训练出来的结果反而不好,适当的剪枝可以获得更好的效果。

我们这里以 max_depth 为例子,把它的超参数学习曲线画出来如下:

基于决策树的企鹅分类(python)

输出结果:该决策树的最佳层数是: 4

绘制代码如下:

test = []
for i in range(10):
    clf = tree.DecisionTreeClassifier(criterion='entropy',
                                      max_depth=i + 1,
                                      random_state=2020,
                                      # 最大深度
                                      splitter='best'
                                      )  # 生成决策树分类器   entropy

    clf = clf.fit(x_train, y_train)
    score = clf.score(x_test, y_test)
    test.append(score)

plt.plot(range(1, 11), test, color='red')
plt.ylabel('score')
plt.xlabel('max_depth')
plt.show()
max = test.index(max(test)) + 1
print("该决策树的最佳层数是:", max)

将训练集用来生成决策树并进行预测

# 生成决策树
penguin_tree = DecisionTreeClassifier(criterion='entropy',
                                      splitter='best',
                                      random_state=2022,
                                      max_depth=max)
penguin_tree.fit(x_train, y_train)

# 返回预测的准确度
print('训练集预测成功率:', penguin_tree.score(x_train, y_train))
print('测试集预测成功率:', penguin_tree.score(x_test, y_test))

结果输出

该决策树的最佳层数是: 4
训练集预测成功率: 0.9890909090909091
测试集预测成功率: 0.9855072463768116

结果可视化

特征重要性条形图(补充)

def plot_feature_importances(feature_importances, title, feature_names, normalize=True):
    #     将重要性值标准化
    if normalize:
        feature_importances = 100.0 * (feature_importances / max(feature_importances))

    #     将得分从高到低排序
    index_sorted = np.flipud(np.argsort(feature_importances))
    #     让X坐标轴上的标签居中显示
    pos = np.arange(index_sorted.shape[0]) + 0.5

    plt.figure(figsize=(16, 9))
    plt.bar(pos, feature_importances[index_sorted], align='center')
    plt.xticks(pos, feature_names[index_sorted])
    plt.ylabel('Importance')
    for a, b in zip(pos, feature_importances[index_sorted]):
        plt.text(a, b, round(b, 3), ha='center', va='bottom', fontsize=20)
    plt.title(title)
    plt.show()

基于决策树的企鹅分类(python)

决策树

利用 graphviz这个库来绘画决策树:

# 画决策树
feature_names = ['Island', 'Culmen Length (mm)', 'Culmen Depth (mm)',
                 'Flipper Length (mm)', 'Body Mass (g)', 'Sex', 'Age']
target_names = ['Adelie', 'Gentoo', 'Chinstrap']

plot_feature_importances(penguin_tree.feature_importances_, 'Charcteristic importance',
                         penguin_tree.feature_names_in_,
                         normalize=False)

dot_data = tree.export_graphviz(penguin_tree,
                                feature_names=feature_names,
                                class_names=target_names,
                                out_file=None,
                                filled=True)

graph = graphviz.Source(dot_data)
graph.render("penguin_tree")

我们训练集生成的决策树如下:

基于决策树的企鹅分类(python)

每个结点上的解释:

  • 第一行 Flipper Length <= 206.5 是 判断条件
  • 第二行 entropy 是该特征值计算出来的熵
  • 第三行 samples 是目前层数的样本树
  • 第四行 value 是每一个类的样本数(本实验有三类)
  • 第五行是目前层数判断的类别

混淆矩阵

绘制混淆矩阵的代码如下:

confusion_matrix = metrics.confusion_matrix(penguin_tree.predict(x_test), y_test)
plt.figure()
sns.heatmap(confusion_matrix, annot=True, cmap='Blues')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

本次实验的混淆矩阵图如下:

基于决策树的企鹅分类(python)

遇到的坑

graphviz.backend.ExecutableNotFound: failed to execute ['dot'....

解决方法:绘画决策树时,Graphviz包在pip下载后还需要下载它的软件,这是它的官方网站Download | Graphviz,下载之后如果python无法找到它的路径还需要手动指明。文章来源地址https://www.toymoban.com/news/detail-490120.html

到了这里,关于基于决策树的企鹅分类(python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习实战:Python基于DT决策树模型进行分类预测(六)

    1.1 决策树的介绍 决策树(Decision Tree,DT)是一种类似流程图的树形结构,其中内部节点表示特征或属性,分支表示决策规则,每个叶节点表示结果。在决策树中,最上方的节点称为根节点。它学习基于属性值进行分区。它以递归方式进行分区,称为递归分区。这种类似流程

    2023年04月27日
    浏览(57)
  • 机器学习实验——使用决策树和随机森林对数据分类

    使用决策树算法和随机森林算法对income_classification.csv的收入水平进行分类。训练集和测试集的比例是7:3,选取适当的特征列,使得针对测试样本的分类准确率在80%以上,比较2种分类方法的准确率。 数据说明: 特征列: 分类标签列:income 1、读入数据并显示数据的维度和前

    2024年02月04日
    浏览(45)
  • 【人工智能】实验五 采用卷积神经网络分类MNIST数据集与基础知识

    熟悉和掌握 卷积神经网络的定义,了解网络中卷积层、池化层等各层的特点,并利用卷积神经网络对MNIST数据集进行分类。 编写卷积神经网络分类软件,编程语言不限,如Python等,以MNIST数据集为数据,实现对MNIST数据集分类操作,其中MNIST数据集共10类,分别为手写0—9。

    2024年02月04日
    浏览(58)
  • 掌握随机森林:基于决策树的集成模型

    目录 引言 随机森林的理论基础 工作原理:Bagging和特征随机选择 优势和劣势

    2024年02月12日
    浏览(49)
  • 基于决策树的区块链应用:实现去中心化智能决策与管理

    作者:禅与计算机程序设计艺术 区块链技术的蓬勃发展带动着许多行业应用变革,例如金融、保险、制造等领域都在探索区块链的价值。而区块链中最常用的应用之一就是基于分布式数据库技术的去中心化智能决策系统(Decentralized Intelligent Decision-Making System)。 传统的智能

    2024年02月11日
    浏览(44)
  • 【Python机器学习】实验04 多分类实践(基于逻辑回归)

    Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Se

    2024年02月11日
    浏览(45)
  • 【Python机器学习】实验04(1) 多分类(基于逻辑回归)实践

    Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。数据集包含150个数据样本,分为3类,每类50个数据,每个数据包含4个属性。可通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Se

    2024年02月14日
    浏览(45)
  • 【Python机器学习】决策树——树的特征重要性

    利用一些有用的属性来总结树的工作原理,其中最常用的事特征重要性,它为每个特征树的决策的重要性进行排序。对于每个特征来说,它都是介于0到1之间的数字,其中0代表“根本没有用到”,1代表“完美预测目标值”。特征重要性的求和为1。 将特征重要性进行可视化:

    2024年02月03日
    浏览(49)
  • 基于混沌集成决策树的电能质量复合扰动识别(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 PQDs 信号模型和波形生成 2.2 对电能质量

    2024年02月06日
    浏览(43)
  • 2023年数学建模随机森林:基于多个决策树的集成学习方法

    目录 目录 1. 什么是随机森林? 2. 随机森林的优缺点 3. 随机森林的构建过程

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包