当前位置: 首页 > news >正文

用 Iris数据做决策树分析

文章目录

    • Iris数据的准备
      • 1.直接从sklearn.datasets 加载或转化成文件已备本地使用
      • 2.可以在https://archive.ics.uci.edu/dataset/53/iris下载
    • 过程
    • 示例
      • 代码如下
      • 生成的决策树如下:
      • 生成的分析报告如下:
  • 决策树模型分析报告
    • 1. 模型性能
    • 2. 特征重要性
    • 3. 决策规则

Iris数据的准备

1.直接从sklearn.datasets 加载或转化成文件已备本地使用

代码如下:

from sklearn.datasets import load_iris
import pandas as pd# 加载数据集
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)# 将数字标签替换为植物名
df['species'] = [iris.target_names[i] for i in iris.target]  # 新增一列植物名
df['target'] = iris.target
# # 保存为Excel文件(不包含行索引)
df.to_excel("iris_dataset.xlsx", index=False)

execl表格如下所示

sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)speciestarget
5.13.51.40.2setosa0
4.931.40.2setosa0
4.73.21.30.2setosa0

2.可以在https://archive.ics.uci.edu/dataset/53/iris下载

过程

  • 读取数据
  • 确定特征
  • 训练决策树模型(按重要性分裂)
  • 模型评估
  • 可视化决策树
  • 生成决策树分析报告

示例

代码如下

import pandas as pd
import numpy as np# 读取数据
df_train = pd.read_excel('iris_dataset.xlsx')# print(df_train.keys())
# print(df_train.head())# 特征工程
def create_features(df):#初始化featuresfeatures = pd.DataFrame()#简化df中原来的列名(feature)features['SepalLength'] = df['sepal length (cm)']features['SepalWidth'] = df['sepal width (cm)']features['PetalLength'] = df['petal length (cm)']features['PetalWidth'] = df['petal width (cm)']return features
# 创建特征
features_train = create_features(df_train)
# print("features_train")
# define the X and y
X_train = df_train.drop(['species', 'target'], axis=1)
y_train = df_train.loc[:, 'target']
# print(X.head())
# print(y.head())
# print(X_train.shape, y_train.shape)
#
# 训练决策树模型(按重要性分裂)
from sklearn.tree import DecisionTreeClassifier,export_textdt = DecisionTreeClassifier(criterion='entropy',min_samples_leaf=5,splitter='best'  # 确保优先选重要性高的特征# ,max_features=1  # 每次分裂只考虑1个特征(需配合特征选择使用)
)
dt.fit(X_train, y_train)
feature_importance = pd.DataFrame({'feature': features_train.columns,'importance': dt.feature_importances_})
# print("特征重要性:\n", feature_importance)# 模型评估
from sklearn.metrics import accuracy_scorey_predict = dt.predict(X_train)
train_score = accuracy_score(y_train, y_predict)
print(train_score)# 可视化决策树
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsefig = plt.figure(figsize=(10, 10))
#print(features_train.columns)
plot_tree(dt, feature_names=features_train.columns,class_names=['setosa', 'versicolor','virginica'],filled=True, rounded=True, fontsize=12)
#plt.show()
plt.savefig('decision_tree.png', dpi=300, bbox_inches='tight', pad_inches=0.5)# 生成决策树规则文本
tree_rules = export_text(dt, feature_names=list(features_train.columns))# 生成分析报告
with open('决策树分析.md', 'w', encoding='utf-8') as f:f.write('# 决策树模型分析报告\n\n')# 模型性能f.write('## 1. 模型性能\n')f.write(f'- 训练集准确率: {train_score:.4f}\n')# 特征重要性f.write('## 2. 特征重要性\n')feature_importance = pd.DataFrame({'feature': features_train.columns,'importance': dt.feature_importances_}).sort_values('importance', ascending=False)for _, row in feature_importance.iterrows():f.write(f'- {row["feature"]}: {row["importance"]:.4f}\n')# 决策规则f.write('\n## 3. 决策规则\n')f.write('```\n')f.write(tree_rules)f.write('\n```\n\n')

生成的决策树如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

生成的分析报告如下:

决策树模型分析报告

1. 模型性能

  • 训练集准确率: 0.9733

2. 特征重要性

  • PetalLength: 0.6777
  • PetalWidth: 0.3071
  • SepalLength: 0.0151
  • SepalWidth: 0.0000

3. 决策规则

|--- PetalLength <= 2.45
|   |--- class: 0
|--- PetalLength >  2.45
|   |--- PetalWidth <= 1.75
|   |   |--- PetalLength <= 4.95
|   |   |   |--- SepalLength <= 5.15
|   |   |   |   |--- class: 1
|   |   |   |--- SepalLength >  5.15
|   |   |   |   |--- class: 1
|   |   |--- PetalLength >  4.95
|   |   |   |--- class: 2
|   |--- PetalWidth >  1.75
|   |   |--- PetalLength <= 4.95
|   |   |   |--- class: 2
|   |   |--- PetalLength >  4.95
|   |   |   |--- class: 2

相关文章:

  • 充电宝项目:规则引擎Drools学习
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——EEPROM、SPI FLASH测试 #AT24C64 #W25Q128
  • 黑马商城项目(二) Docker
  • Docker 中多个容器之间的通信
  • (Linux操作系统)自定义shell的实现
  • react使用createFromIconfontCN,自定义iconfont 图标
  • 艺术字体AI生成阿里云WordArt锦书、通义万相、SiliconFlow、Pillow+OpenCV本地生成艺术字体
  • web前端开发:CSS的常用选择器
  • 第七节:React HooksReact 18+新特性-并发模式(Concurrent Mode)解决了什么问题?
  • C++ IO流
  • CANoe自动化测试用例log保存(专栏:车载网络诊断测试攻略从零开始搭建一个UDS诊断自动化测试CANoe工程)
  • 58.最后一个单词的长度
  • 使用excel 制作数据库的数据浏览器
  • 使用cursor进行原型图设计
  • 解决本地浏览器访问服务器端语音识别项目显示“麦克风未授权”的问题
  • 【代理错误 django】Request error: HTTPSConnectionPool(host=‘‘, port=443): 、
  • openwebui搭建mcp
  • Windows安装Ollama并指定安装路径(默认C盘)
  • WebStorm中Gitee账号的密码登录与令牌登录设置
  • 每日一道leetcode
  • 网站下拉框怎么做/emlog友情链接代码
  • 网站开发案例详解下载/中国新闻社
  • 怎样创建官方网站/sem竞价广告
  • 制作音乐网站实验报告/google play官网
  • 个人做盈利慈善网站/北京搜索优化排名公司
  • 政府网站建设方面存在的问题/常用的网络推广方法有