考虑 ISLR 包的 Hitters 数据,此数据集有322个运 动员的20个变量的数据,其中的变量 Salary(工资)是 我们关心的。请利用决策树与随机森林来对该变量进行 回归。
时间: 2024-02-13 16:06:36 浏览: 94
光滑样条回归及应用研究.pdf
好的,我们来看看如何用决策树和随机森林对 Hitters 数据集中的 Salary 进行回归。
首先,我们需要加载 ISLR 包并读取数据集:
```R
library(ISLR)
data(Hitters)
```
接下来,我们需要做一些数据预处理工作,包括对缺失值进行处理和将一些分类变量进行独热编码。这里我们使用 dplyr 和 tidyr 包来完成:
```R
library(dplyr)
library(tidyr)
# 处理缺失值
Hitters <- Hitters %>%
mutate_if(is.character, as.factor) %>%
mutate_if(is.factor, function(x) as.numeric(as.character(x))) %>%
na.omit()
# 独热编码
Hitters <- Hitters %>%
select(-c("League", "Division", "NewLeague")) %>%
mutate(AtBat_450 = ifelse(AtBat > 450, 1, 0)) %>%
mutate(Hits_130 = ifelse(Hits > 130, 1, 0)) %>%
mutate(HmRun_20 = ifelse(HmRun > 20, 1, 0)) %>%
mutate(RBI_75 = ifelse(RBI > 75, 1, 0)) %>%
mutate(Walks_60 = ifelse(Walks > 60, 1, 0)) %>%
select(-c("AtBat", "Hits", "HmRun", "RBI", "Walks"))
```
现在,我们可以将数据集拆分为训练集和测试集:
```R
set.seed(123)
train <- sample(nrow(Hitters), nrow(Hitters) * 0.8)
train_data <- Hitters[train, ]
test_data <- Hitters[-train, ]
```
接下来,我们可以使用 rpart 包来构建决策树模型:
```R
library(rpart)
# 构建决策树模型
tree_model <- rpart(Salary ~ ., data = train_data, method = "anova")
# 预测测试集
test_pred <- predict(tree_model, test_data)
# 计算均方误差
mse <- mean((test_data$Salary - test_pred)^2)
```
我们可以使用 rpart.plot 包来可视化决策树模型:
```R
library(rpart.plot)
rpart.plot(tree_model)
```
接下来,我们可以使用 randomForest 包来构建随机森林模型:
```R
library(randomForest)
# 构建随机森林模型
rf_model <- randomForest(Salary ~ ., data = train_data, ntree = 500, mtry = 4)
# 预测测试集
test_pred <- predict(rf_model, test_data)
# 计算均方误差
mse <- mean((test_data$Salary - test_pred)^2)
```
随机森林模型的预测精度通常比决策树模型更高,但是模型训练时间也更长。
阅读全文