2013-03-19 3 views
8

Я использую ksvm из пакета kernlab в R для прогнозирования вероятностей, используя опцию type="probabilities" в predict.ksvm. Тем не менее, я считаю, что иногда использование predict(model,observation,type="r") дает не класс с наивысшей вероятностью, заданный predict(model,observation,type="p").Почему вероятности и ответ в ksvm в R не согласованы?

Пример:

> predict(model,observation,type="r") 
[1] A 
Levels: A B 
> predict(model,observation,type="p") 
     A B 
[1,] 0.21 0.79 

Является ли это правильное поведение, или ошибка? Если это правильное поведение, как я могу оценить наиболее вероятный класс из вероятностей?


Покушение на воспроизводимой Например:

library(kernlab) 
set.seed(1000) 
# Generate fake data 
n <- 1000 
x <- rnorm(n) 
p <- 1/(1 + exp(-10*x)) 
y <- factor(rbinom(n, 1, p)) 
dat <- data.frame(x, y) 
tmp <- split(dat, dat$y) 
# Create unequal sizes in the groups (helps illustrate the problem) 
newdat <- rbind(tmp[[1]][1:100,], tmp[[2]][1:10,]) 
# Fit the model using radial kernal (default) 
out <- ksvm(y ~ x, data = newdat, prob.model = T) 
# Create some testing points near the boundary 

testdat <- data.frame(x = seq(.09, .12, .01)) 
# Get predictions using both methods 
responsepreds <- predict(out, newdata = testdat, type = "r") 
probpreds <- predict(out, testdat, type = "p") 

results <- data.frame(x = testdat, 
         response = responsepreds, 
         P.x.0 = probpreds[,1], 
         P.x.1 = probpreds[,2]) 

Вывод результатов:

> results 
    x response  P.x.0  P.x.1 
1 0.09  0 0.7199018 0.2800982 
2 0.10  0 0.6988079 0.3011921 
3 0.11  1 0.6824685 0.3175315 
4 0.12  1 0.6717304 0.3282696 
+0

Это очень помогло бы нам, если бы вы предоставили нам образцы данных и образец модели. Это упростит объяснение этого поведения. Короче говоря, это, вероятно, правильное поведение. – nograpes

+0

Вероятно, никто не может согласиться, что это ошибка, если вы не предоставили воспроизводимый код, который генерирует это поведение. В противном случае байесовцы из нас просто скажут, что их предшественник «Вы допустили ошибку», вероятно, правильно. – joran

+0

Вопрос в первую очередь заключается в том, возможно ли это, но я понимаю, что воспроизводимый пример будет полезен.К сожалению, я попытаюсь подготовить образец модели с таким поведением, но это произошло с моделью, которая слишком велика для SO, к сожалению. Я дам вам знать. – roelandvanbeek

ответ

10

Если вы посмотрите на матрицу decicision и голоса, они кажутся более в соответствии с ответами :

> predict(out, newdata = testdat, type = "response") 
[1] 0 0 1 1 
Levels: 0 1 
> predict(out, newdata = testdat, type = "decision") 
      [,1] 
[1,] -0.07077917 
[2,] -0.01762016 
[3,] 0.02210974 
[4,] 0.04762563 
> predict(out, newdata = testdat, type = "votes") 
    [,1] [,2] [,3] [,4] 
[1,] 1 1 0 0 
[2,] 0 0 1 1 
> predict(out, newdata = testdat, type = "prob") 
      0   1 
[1,] 0.7198132 0.2801868 
[2,] 0.6987129 0.3012871 
[3,] 0.6823679 0.3176321 
[4,] 0.6716249 0.3283751 

В kernlab страницы помощи (?predict.ksvm) ссылка на бумагу Probability estimates for Multi-class Classification by Pairwise Coupling by T.F. Wu, C.J. Lin, and R.C. Weng.

В разделе 7.3 говорится, что решения и вероятности могут отличаться:

... Мы объясним, почему результаты по вероятности на основе и методы на основе принятия решений могут быть настолько различны. Для некоторых проблем параметры, выбранные δDV, сильно отличаются от параметров, описанных в других пяти правилах . В форме волны по некоторым параметрам все методы на основе вероятности дают гораздо более высокую точность проверки переходов , чем δDV. Мы наблюдаем, например, что значения решения валидации находятся в [0,73, 0,97] и [0,93, 1,02] для данных в двух классах; следовательно, все данные в наборах проверки классифицируются как в одном классе , и ошибка высока. Напротив, основанные на вероятности методы соответствуют значениям решения сигмоидной функцией, которая может улучшить разделение двух классов путем вырезания по значению решения около 0,95. Это наблюдение пролить некоторый свет на разнице между методами, основанной вероятностной основой и принятием ценностей ...

Я не достаточно знаком с этими методами, чтобы понять проблему, но, возможно, вы делаете, это выглядит например, существуют различные методы прогнозирования с вероятностями и каким-либо другим методом, а type=response соответствует разному методу, чем тот, который используется для вероятностей прогнозирования.

+0

Хорошая детективная работа! Ссылка отправляет меня в каталог с большим количеством PDF-файлов. Можете ли вы уточнить, какой из них является фактической бумагой, которую вы нашли? – joran

+0

К сожалению, ссылка была отключена при копировании, теперь я исправил ее, чтобы указать прямо на фактическую бумагу. –

+0

Отличная работа, спасибо! – roelandvanbeek