决策树实战鸢尾花

2023-10-27

# -- encoding:utf-8 --
"""
只要是机器学习中,代码的编写流程一般和下面这个一样!!!!
Create on 19/3/2
"""
import warnings
import sys
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

from sklearn.preprocessing import StandardScaler, LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.metrics import auc, roc_curve, classification_report

warnings.filterwarnings('ignore')
mpl.rcParams['font.sans-serif'] = [u'simHei']

# 一、数据加载
path = "iris.data"
names = ['A', 'B', 'C', 'D', 'cla']
df = pd.read_csv(filepath_or_buffer=path, sep=",", header=None, names=names)
# df.info()

# 二、数据的清洗
class_name_2_label = {'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2}
df['cla'] = list(map(lambda cla: class_name_2_label[cla], df['cla'].values))
print(df['cla'].values)
df.info()

# 三、根据需求和原始模型从最原始的特征属性中获取具体的特征属性矩阵X和目标属性矩阵Y
X = df.drop('cla', axis=1)
X = np.asarray(X).astype(np.float64)
Y = df['cla']
# 对目标属性做一个类别的转换,将字符串的数据转换为从0开始的int值
label_encoder = LabelEncoder()
Y = label_encoder.fit_transform(Y)
# print(label_encoder.classes_)
# print(label_encoder.transform(['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']))
# print(label_encoder.inverse_transform([0, 1, 2, 0, 2, 1]))
# X.info()

# 四、数据分割(将数据分割为训练数据和测试数据)
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.1, random_state=28)
print("训练数据X的格式:{}, 以及数据类型:{}".format(x_train.shape, type(x_train)))
print("测试数据X的格式:{}".format(x_test.shape))
print("训练数据Y的数据类型:{}".format(type(y_train)))
print("Y的取值范围:{}".format(np.unique(Y)))

# 五、特征工程的操作
# a. 创建对象(标准化操作)
scaler = StandardScaler()
# b. 模型训练+训练数据转换
x_train = scaler.fit_transform(x_train, y_train)
# c. 基于训练好的对象对数据做一个转换
x_test = scaler.transform(x_test)

# 六、模型对象的构建
"""
def __init__(self,
             criterion="gini",
             splitter="best",
             max_depth=None,
             min_samples_split=2,
             min_samples_leaf=1,
             min_weight_fraction_leaf=0.,
             max_features=None,
             random_state=None,
             max_leaf_nodes=None,
             min_impurity_decrease=0.,
             min_impurity_split=None,
             class_weight=None,
             presort=False)
    criterion: 给定决策树构建过程中的纯度的衡量指标,可选值: gini、entropy, 默认gini
    splitter:给定选择特征属性的方式,best指最优选择,random指随机选择(局部最优)
    max_features:当splitter参数设置为random的有效,是给定随机选择的局部区域有多大。
    max_depth:剪枝参数,用于限制最终的决策树的深度,默认为None,表示不限制
    min_samples_split=2:剪枝参数,给定当数据集中的样本数目大于等于该值的时候,允许对当前数据集进行分裂;如果低于该值,那么不允许继续分裂。
    min_samples_leaf=1, 剪枝参数,要求叶子节点中的样本数目至少为该值。
    class_weight:给定目标属性中各个类别的权重系数。
"""
algo = DecisionTreeClassifier(max_depth=2)

# 七. 模型的训练
algo.fit(x_train, y_train)

# 八、模型效果的评估
print("各个特征属性的重要性权重系数(值越大,对应的特征属性就越重要):{}".format(algo.feature_importances_))
print("训练数据上的分类报告:")
print(classification_report(y_train, algo.predict(x_train)))
print("测试数据上的分类报告:")
print(classification_report(y_test, algo.predict(x_test)))
print("训练数据上的准确率:{}".format(algo.score(x_train, y_train)))
print("测试数据上的准确率:{}".format(algo.score(x_test, y_test)))
# sys.exit()
# 查看相关属性
test1 = [x_test[6]]
print("预测函数:")
print(algo.predict(test1))
print("预测概率函数:")
print(algo.predict_proba(test1))
# sys.exit()
# ROC和AUC的计算
# 对于三个类别分开计算auc和roc的值
y_predict_proba = algo.predict_proba(x_train)
# print(y_predict_proba)
# 针对于类别1
y1_true = (y_train == 0).astype(np.int)
y1_score = y_predict_proba[:, 0]
fpr1, tpr1, _ = roc_curve(y1_true, y1_score)
auc1 = auc(fpr1, tpr1)
# 针对于类别2
y2_true = (y_train == 1).astype(np.int)
y2_score = y_predict_proba[:, 1]
fpr2, tpr2, _ = roc_curve(y2_true, y2_score)
auc2 = auc(fpr2, tpr2)
# 针对于类别3
y3_true = (y_train == 2).astype(np.int)
y3_score = y_predict_proba[:, 2]
fpr3, tpr3, _ = roc_curve(y3_true, y3_score)
auc3 = auc(fpr3, tpr3)
print((auc1, auc2, auc3))

plt.plot(fpr1, tpr1, 'r-o')
plt.plot(fpr2, tpr2, 'g-o')
plt.plot(fpr3, tpr3, 'b-o')
plt.show()
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 2 2]
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 150 entries, 0 to 149
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   A       150 non-null    float64
 1   B       150 non-null    float64
 2   C       150 non-null    float64
 3   D       150 non-null    float64
 4   cla     150 non-null    int64  
dtypes: float64(4), int64(1)
memory usage: 6.0 KB
训练数据X的格式:(135, 4), 以及数据类型:<class 'numpy.ndarray'>
测试数据X的格式:(15, 4)
训练数据Y的数据类型:<class 'numpy.ndarray'>
Y的取值范围:[0 1 2]
各个特征属性的重要性权重系数(值越大,对应的特征属性就越重要):[0.         0.         0.56360727 0.43639273]
训练数据上的分类报告:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00        46
           1       0.91      0.98      0.95        44
           2       0.98      0.91      0.94        45

    accuracy                           0.96       135
   macro avg       0.96      0.96      0.96       135
weighted avg       0.96      0.96      0.96       135

测试数据上的分类报告:
              precision    recall  f1-score   support

           0       1.00      1.00      1.00         4
           1       0.86      1.00      0.92         6
           2       1.00      0.80      0.89         5

    accuracy                           0.93        15
   macro avg       0.95      0.93      0.94        15
weighted avg       0.94      0.93      0.93        15

训练数据上的准确率:0.9629629629629629
测试数据上的准确率:0.9333333333333333
预测函数:
[2]
预测概率函数:
[[0.         0.02380952 0.97619048]]
(1.0, 0.9724025974025974, 0.9727160493827159)

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树实战鸢尾花 的相关文章

随机推荐

  • 【跑实验03】如何可视化GT边界框,如何选择边界框内部的边界框,如何可视化GT框和预测框,如何定义IoU阈值下的不同边界框?

    文章目录 一 如何可视化GT边界框 二 GT框和预测框的可视化 三 根据IoU阈值来选择 一 如何可视化GT边界框 from PIL import Image ImageDraw def draw bboxes image bboxes c
  • Spring实现控制反转(IOC)的三种方式(零)——理解IOC

    学过Spring的应该都知道Spring的IOC和AOP 然而我刚接触Spring不久 学习了IOC 发现掌握的不是很好 停留在概念上 今天就以例子来总结一下Spring的IOC 也希望各位大大能够指点迷津 IOC 也就是控制反转 创建对象
  • 函数重载与函数模板

    键盘输入10个数 可能为整形 浮点型 双精度型及其字符类型 分别利用函数重载和函数模板 求出其中的最大值和最小值 函数重载 include
  • 连接数据库报错 -- Access denied for user ‘‘@‘192.168.121.1‘ (using password: NO)

    问题 用idea配置好数据库配置文件application yml 在连接虚拟机数据库时 控制台报错 Access denied for user 192 168 121 1 using password NO 解决方法 1 密码配置出错
  • Win10及Win11安装及使用Wsl2 Linux子系统

    一 安装Wsl2 环境要求 必须运行 Windows 10 版本 2004 及更高版本 内部版本 19041 及更高版本 或 Windows 11 WSL2 是 WSL 1 的升级版 带来的主要优势 提高文件系统性能 支持完全的系统调用兼容
  • 你不知道的javascript之this的全面解析之绑定规则(一)

    1 1 默认绑定 首先介绍的是函数调用类型 独立函数调用 在没有其他应用下的默认规则 首先看以下代码 function foo console log this a var a 2 foo 2 我们可以看到调用foo 时 this a被解析
  • java对数据库中Date类型的处理

    java对数据库中Date类型的处理 想必在日常的敲代码生活总 用java操作数据库中的Date类型是不同于其他的 因为Date在导包的时候就分为 import java sql Date import java util Date 这两种
  • nginx 配置 ssl

    1 1 Nginx如果未开启SSL模块 配置Https时提示错误 原因也很简单 nginx缺少http ssl module模块 编译安装的时候带上 with http ssl module配置就行了 但是现在的情况是我的nginx已经安装
  • Seq2Seq 模型知识总结

    Seq2Seq 模型知识总结 目录 Seq2Seq 模型知识总结 1 模型的提出 2 RNN 结构及使用 2 1 N vs N 2 2 1 vs N 2 3 N vs 1 3 Seq2Seq 模型 3 1 Seq2Seq 结构 3 2 编码
  • 你应该掌握的七种回归技术

    摘要 本文解释了回归分析及其优势 重点总结了应该掌握的线性回归 逻辑回归 多项式回归 逐步回归 岭回归 套索回归 ElasticNet回归等七种最常用的回归技术及其关键要素 最后介绍了选择正确的回归模型的关键因素 编者按 回归分析是建模和分
  • Java大数字运算(BigInteger类和BigDecimal类)

    Java中的超大数BIgInteger和BigDecimal 在我们处理大位数运算的时候 我们经常用的int和long类型的数已经不能够满足我们的运算了 那么这个时候就需要用到一个超大数来运算 这个时候我们会用到java math BigI
  • javaweb项目中完成数据的增删改查操作((maven,mybaits,tomcat,servlet,jsp包含 MVC模式 和 三层架构 ))

    目录 需求 完成品牌数据的增删改查操作 1 环境准备 1 1 创建工程模块 引入坐标 1 2创建三层架构的包结构 1 3创建数据库表 tb brand 1 4 创建实体类Brand 1 5 准备mybatis环境 2 查询所有 2 1编写B
  • JS将数组相同的元素进行分类

    js实现将数组中相同元素进行分类 思路是先将数组去重 这里采用对象的方式进行去重 然后将相同的元素重新放入一个数组内 实例如下
  • struts1 logic:iterate bean:write标签使用

    只是截取项目中部分代码 供参考及日后查阅 用struts1标签html select 展现select下拉列表 刚开始为如下代码 html view plain copy
  • 搭建RP-pppoe服务器

    1 安装rp pppoe 测试环境 PPPoe Server Ubuntu 20 04 PPPoe Client Windows 11 首先 我们先安装PPPoe服务器 我们需要下载rp pppoe的源码 然后自行编译安装 在安装之前需要安
  • OS银行家算法-Java

    OS作业 记录防丢 package Bank public class Banker public static void main String args OS os new OS 3 3 2 MyThread p0 new MyThre
  • 合宙AIR001开发板开箱测试

    简介 2023年7月合宙上架了一款新的MCU 支持Arduino Keil 主频高 资源大 接口全 合宙Air001 它是一款TSSOP20封装国产MCU 高集成化通讯外设 开发简单使用便捷 具备超高性价比 1 采用ARM 32位的M0 内
  • 效率利器之事件委托

    前言 公司产品部推出了一款新产品 经理指派小A负责推广工作 小A通过多方打听了解到推广流程 需要使用公司证件在几个平台注册账号 并经过多轮审批 小A经历了一番操作后感到身心俱疲 最终成功将产品发布到公众平台上 与此同时 公司的竞争部门也计划
  • 开题报告中拟解决的主要问题怎么写?

    在研究生求学阶段 学位论文质量的高低是衡量研究生培养质量的重要标志 而论文质量的高低 很大程度上取决于论文开题报告的内容的细致程度 从论文的选题 到研究内容与措施的探讨及最后开题报告的撰写 三者环环相扣 缺一不可 那么我们如何才能写好开题论
  • 决策树实战鸢尾花

    encoding utf 8 只要是机器学习中 代码的编写流程一般和下面这个一样 Create on 19 3 2 import warnings import sys import numpy as np import pandas as