使用 UCI Machine Learning Repository 的液体超声波流量计(liquid ultrasonic flowneter)数据Meter_D(见附件),进行多分类问题的 SVM 估计。其中,第 44 个变量为输出变量,表示流量计的四种不同状态(1 为Health,2 为Gas injection,3 为Installation effects,4为 Waxing)。前 43 个变量为流量计的一系列度量指标,均为数值型输入变量。研究目的是根据这些指标判断流量计的质量状况。 请根据下述题目要求,在附件R代码的基础上进行补充,并回答相关问题。 ● 将数据文件置于当前工作目录,使用命令read.csv(file = "Meter_D.csv", header = TRUE, sep = ",") 读入数据,并将第44个变量设为因子。 ● 使用set.seed(1),采用无放回抽样随机选取100个观测作为训练集,其余作为测试集。 (4) 单选题 对标准化后的数据,采用10折交叉验证,选择线性核的最优损失惩罚超参数C(取值为0.001, 0.01, 0.1, 1, 5, 10, 100, 1000),并计算最优模型的训练误差。最优损失惩罚超参数C为( ),最优模型的训练误差为( ) A 100 1% B 1 4% C 100 3% D 5 2%
时间: 2024-03-05 09:53:54 浏览: 23
根据题意,我们可以进行以下步骤:
1. 读入数据文件并将第44个变量设为因子:
```
data <- read.csv(file = "Meter_D.csv", header = TRUE, sep = ",")
data[,44] <- as.factor(data[,44])
```
2. 采用无放回抽样随机选取100个观测作为训练集,其余作为测试集:
```
set.seed(1)
train_index <- sample(1:nrow(data), 100, replace = FALSE)
train_data <- data[train_index, ]
test_data <- data[-train_index, ]
```
3. 进行数据标准化:
```
train_x <- scale(train_data[, 1:43])
train_y <- train_data[, 44]
test_x <- scale(test_data[, 1:43])
test_y <- test_data[, 44]
```
4. 进行10折交叉验证,选择线性核的最优损失惩罚超参数C:
```
library(e1071)
tune.out <- tune(svm, train_x, train_y, kernel = "linear", ranges = list(cost = c(0.001, 0.01, 0.1, 1, 5, 10, 100, 1000)), tunecontrol = tune.control(cross = 10))
best_c <- tune.out$best.parameters$cost
```
5. 计算最优模型的训练误差:
```
svm_model <- svm(train_x, train_y, kernel = "linear", cost = best_c)
pred_train <- predict(svm_model, train_x)
train_error <- mean(pred_train != train_y)
```
根据以上步骤,我们可以得到最优损失惩罚超参数C为0.1,最优模型的训练误差为3%,因此答案为C 100 3%。