R语言分类决策数算法----iris数据集

R 复制代码
install.packages("C50") 
library(C50)  # 加载决策树算法包

# ====================加载并查看数据集 ====================
# iris是R自带的经典鸢尾花数据集,无需额外下载
data(iris)  
# 查看数据集基本信息:150个样本,5个变量(4个特征+1个分类标签)
# 特征:花萼长度/宽度、花瓣长度/宽度;标签:3种鸢尾花品种
head(iris)  # 查看前6行数据
str(iris)   # 查看数据结构(确认特征是数值型,标签是因子型)

1、数据集划分

R 复制代码
# ==================== 数据划分:训练集(70%) + 测试集(30%) ====================
# 设置随机种子,保证结果可复现(每次运行划分结果一致)
set.seed(123)  

# 随机抽样:生成1-150中70%的行索引,用于训练集
train_index <- sample(1:nrow(iris), size = 0.7*nrow(iris))  

# 训练集:用于训练决策树模型
train_data <- iris[train_index, ]  
# 测试集:用于评估模型预测效果
test_data <- iris[-train_index, ]  

# 分离特征和标签(决策树输入格式:特征矩阵 + 标签向量)
# 训练集特征(前4列:所有数值型特征)
train_x <- train_data[, -5]  
# 训练集标签(第5列:品种Species)
train_y <- train_data[, 5]   
# 测试集特征
test_x <- test_data[, -5]    
# 测试集标签(真实标签,用于对比预测结果)
test_y <- test_data[, 5]     

2、训练模型C5.0

R 复制代码
# ==================== 4. 训练C5.0决策树模型 ====================
# 函数语法:C5.0(特征矩阵, 标签向量)
# 模型会自动学习特征与标签的对应关系,生成决策树规则
tree_model <- C5.0(train_x, train_y)  

# 查看决策树模型详情:规则、特征重要性、分类准确率
summary(tree_model)  

Call:

C5.0.default(x = train_x, y = train_y)

C5.0 Release 2.07 GPL Edition Sun Jun 7 09:40:40 2026


Class specified by attribute `outcome'

Read 105 cases (5 attributes) from undefined.data

Decision tree:

Petal.Length <= 1.9: setosa (36)
Petal.Length > 1.9:
:...Petal.Width > 1.7: virginica (34/1)
Petal.Width <= 1.7:
:...Petal.Length <= 4.9: versicolor (31/1)
Petal.Length > 4.9: virginica (4/1)

Evaluation on training data (105 cases):

Decision Tree


Size Errors

4 3( 2.9%) <<

(a) (b) (c) <-classified as


36 (a): class setosa

30 2 (b): class versicolor

1 36 (c): class virginica

Attribute usage:

100.00% Petal.Length

65.71% Petal.Width

Time: 0.0 secs

3、模型评估

R 复制代码
# ==================== 5. 模型预测:用测试集验证效果 ====================
# predict(模型, 新数据):对测试集特征进行品种预测
pred_y <- predict(tree_model, test_x)  

# 查看前10个预测结果 vs 真实结果
cat("前10个预测值:", as.character(pred_y[1:10]), "\n")
cat("前10个真实值:", as.character(test_y[1:10]), "\n")

# ==================== 6. 模型评估:计算准确率 ====================
# 准确率 = 预测正确的样本数 / 总测试样本数
accuracy <- sum(pred_y == test_y) / length(test_y)  
cat("决策树模型测试集准确率:", round(accuracy*100, 2), "%\n")

前10个预测值: setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa

前10个真实值: setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa

> # 准确率 = 预测正确的样本数 / 总测试样本数

> accuracy <- sum(pred_y == test_y) / length(test_y)

> cat("决策树模型测试集准确率:", round(accuracy*100, 2), "%\n")

决策树模型测试集准确率: 97.7

4、可视化

R 复制代码
# ==================== 7. 可视化决策树(直观查看分类规则) ====================
# 安装可视化包,首次使用安装,后续注释
# install.packages("partykit")
library(partykit)  
# 转换模型格式并绘图
plot(as.party(tree_model), main = "iris数据集决策树可视化")  

5、决策树rpart算法

R 复制代码
# 加载rpart包(决策树)和rpart.plot(可视化)
# install.packages(c("rpart", "rpart.plot"))
library(rpart)
library(rpart.plot)

data(iris)
set.seed(123)
# 数据划分同上
train_index <- sample(1:nrow(iris), 0.7*nrow(iris))
train_data <- iris[train_index, ]
test_data <- iris[-train_index, ]

# 训练rpart决策树:公式格式 Species ~ . (标签~所有特征)
tree_rpart <- rpart(Species ~ ., data = train_data, method = "class")

# 预测+评估
pred_rpart <- predict(tree_rpart, test_data, type = "class")
accuracy_rpart <- sum(pred_rpart == test_data$Species)/nrow(test_data)
cat("rpart决策树准确率:", round(accuracy_rpart*100,2), "%\n")

# 可视化决策树
rpart.plot(tree_rpart, main = "rpart决策树(iris)")
相关推荐
Databend4 小时前
2KB histogram 背后:Databend 如何低成本追踪长尾延迟
大数据·数据分析·agent
Aloudata技术团队7 小时前
正当红的 Context Layer 到底是什么?
数据分析
饼干哥哥7 天前
开源Skills|搭建亚马逊动态关键词库系统,每天抓SSS级机会词
人工智能·深度学习·数据分析
倔强的石头_9 天前
企业工商数据源站点:无验证无拦截,批量获取工商数据完整方案
数据分析
hboot15 天前
AI工程师第二课 - 数据处理
人工智能·python·数据分析
王小王-12316 天前
基于 Hive 的网易云音乐数据分析及可视化系统
hive·hadoop·数据分析·音乐数据分析·网易云音乐分析·hive音乐分析·hadoop网易云
Database_Cool_16 天前
大规模数据分析降本指南:AnalyticDB Serverless 弹性架构实战
数据仓库·阿里云·架构·数据分析·serverless
YangYang9YangYan16 天前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
砚底藏山河16 天前
沪深A股:如何获取基金持股数据
java·python·数据分析·maven
GZ同学16 天前
单双变量Ripley’s K函数 R 语言实现
开发语言·r语言