Я пытаюсь оценить линейную модель классификации SVM, где ложные срабатывания имеют в 3 раза больший вес, чем ложноотрицательные. Вот воспроизводимый пример данных, которые я использую:
library(tidyverse)
library(C50)
library(e1071)
library(caret)
# set up data set
data <- iris %>%
filter(Species %in% c("setosa", "versicolor")) %>%
mutate(Species = case_when(Species == "setosa" ~ 0,
Species == "versicolor" ~ 1),
Species = factor(Species,
levels = c(0, 1),
labels = c("Setosa", "Versicolor"))
)
# train / test split
indx <- createDataPartition(y = data$Species, p = 0.8, list = FALSE)
train <- data[indx, ]
test <- data[-indx, ]
Ранее я делал нечто подобное с пакетом C5.0, где все выглядело так:
# set up cost matrix
cost_matrix <- matrix(c(0, 3, 1, 0),
nrow = 2,
dimnames = list("Predicted" = c("Setosa", "Versicolor"),
"Actual" = c("Setosa", "Versicolor")))
# estimate C5.0 tree model
tree_fit <- C5.0(Species ~ .,
data = train,
costs = cost_matrix)
# predict Species
tree_pred <- predict(tree_fit, test)
Я сейчас пытаясь сделать это с помощью SVM, независимо от того, сделано ли это в e1071 или в интерфейсе каретки.
# estimate SVM Model
svm_fit <- svm(Species ~ .,
data = train,
kernel = 'linear')
# predict Species
svm_pred <- predict(svm_fit, test)
Как я могу включить матрицу затрат, как описано? Я уже консультировался с этой веткой здесь Asymmetri c назначение стоимости для SVM , но надлежащего ответа нет, и ссылка больше никуда не ведет.
Спасибо за вашу помощь