Я экспериментирую с функцией SVM
на данных iris
. Цель состоит в том, чтобы извлечь "класс" с наибольшей предсказанной вероятностью для (1) каждой строки (2) из выходной матрицы attr(pred_prob, "probabilities")
.
data(iris)
attach(iris)
x <- subset(iris, select = -Species)
y <- Species
model <- svm(x, y, probability = TRUE)
pred_prob <- predict(model, x, decision.values = TRUE, probability = TRUE)
attr(pred_prob, "probabilities")
(Оригинальный код взят из этой предыдущей темы .)
Последняя строка кода даст нам вывод следующего формата:
setosa versicolor virginica
1 0.979989881 0.011347796 0.008662323
2 0.972567961 0.018145783 0.009286256
3 0.978668604 0.011973933 0.009357463
Для простоты сравнения этих предсказанных вероятностей с их реальными "метками" класса (т.е. setosa, versicolor, virginica) я планирую извлечь класс наибольшей предсказанной вероятности для каждой строки из вышеприведенной выходной матрицы. Например, класс наибольшей вероятности для первого наблюдения составляет setosa
с прогнозируемой вероятностью 0,9799, которая возвращается из
which(attr(pred_prob, "probabilities")[1,] == max(attr(pred_prob, "probabilities")[1,]), arr.ind = TRUE)
Сейчас я работаю над расширением вышеприведенного кода в цикле, чтобы вывести столбец данных, содержащий прогнозируемую метку класса для каждого наблюдения в данных. Ниже то, что я имею до сих пор, но мне трудно
predicted_class <- attr(pred_prob, "probabilities")
for(row in 1:nrow(predicted_class)) {
output <- print(which(predicted_class[row,] == max(predicted_class[row,]), arr.ind = TRUE))
output
}
Но это не дает мне того, что я предполагал, кажется, что он возвращает только предсказанный класс из случайной строки (пока я хочу столбец предсказанных классов для всех наблюдений).
Может ли кто-нибудь просветить меня об этом?