Я сделал мультиклассовую (3) классификацию, используя SVM с линейным ядром.
Для этой задачи я использовал пакет mlr
. SVM из пакета kernlab
.
library(mlr)
library(kernlab)
print(filtered_task)
Supervised task: dtm
Type: classif
Target: target_lable
Observations: 1462
Features:
numerics factors ordered functionals
291 0 0 0
Missings: FALSE
Has weights: FALSE
Has blocking: FALSE
Has coordinates: FALSE
Classes: 3
negative neutral positive
917 309 236
Positive class: NA
lrn = makeLearner("classif.ksvm", par.vals = list(kernel = "vanilladot"))
mod = mlr::train(lrn, train_task)
Теперь я хочу знать, какие функции имеют наибольший вес для каждого класса. Есть идеи как туда добраться?
Кроме того, было бы неплохо получить веса элементов для каждого класса для результата перекрестной проверки.
rdesc = makeResampleDesc("CV",
iters = 10,
stratify = T)
set.seed(3)
r = resample(lrn, filtered_task, rdesc)
Я знаю, что есть возможность вычислить важность функции, как показано ниже, что аналогично результатам перекрестной проверки из-за итераций Монте-Карло.
imp = generateFeatureImportanceData(task = train_task,
method = "permutation.importance",
learner = lrn,
nmc = 10)
Однако, для этого метода я не могу получить важность функции для каждого класса, но только важность в целом.
library(dplyr)
library(ggplot)
imp_data = melt(imp$res[, 2:ncol(imp$res)])
imp_data = imp_data %>%
arrange(-value)
imp_data[1:10,] %>%
ggplot(aes(x = reorder(variable, value), y = value)) +
geom_bar(stat = "identity", fill = "darkred") +
labs(x = "Features", y = "Permutation Importance") +
coord_flip() +
theme_minimal()