Машина опорных векторов на R и WEKA

Мои данные дали странные результаты с svm на R из пакета e1071, поэтому я попытался проверить, может ли R svm генерировать тот же результат, что и WEKA (или python), поскольку я использовал WEKA в прошлом.

Я погуглил вопрос и нашел тот, который вызывает ту же путаницу со мной, но без ответа. Это вопрос.

Так что я надеюсь, что смогу получить здесь ответ.

Чтобы упростить задачу, я также использую набор данных диафрагмы и обучаю модель (SMO в WEKA и svm из пакета R e1071), используя все данные диафрагмы, и тестирую ее на себе.

Параметры WEKA:

weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V 10 -W 1 -K "weka.classifiers.functions.supportVector.RBFKernel -G 0.01 -C 250007"

Помимо значения по умолчанию, я изменил ядро ​​на RBFKernel, чтобы сделать его совместимым с функцией R.

Результат:

  a  b  c   <-- classified as
 50  0  0 |  a = Iris-setosa
  0 46  4 |  b = Iris-versicolor
  0  7 43 |  c = Iris-virginica

R скрипт:

library(e1071)
model <- svm(iris[,-5], iris[,5], kernel="radial", epsilon=1.0E-12)
res <- predict(model, iris[,-5])
table(pred = res, true = iris[,ncol(iris)]) 

Результат:

            true
pred         setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         48         2
  virginica       0          2        48

Я не занимаюсь машинным обучением, поэтому предполагаю, что параметры по умолчанию для этих двух методов сильно различаются. Например, e1071 имеет значение по умолчанию 0,01 epsilon, а WEKA - 1,0E-12. Я попытался прочитать инструкции и хотел сделать все параметры идентичными, но многие параметры мне не кажутся сопоставимыми.

Спасибо.


person Yan    schedule 14.10.2016    source источник


Ответы (1)


См. http://weka.sourceforge.net/doc.dev/weka/classifiers/functions/SMO.html для параметров RWeka для SMO и используйте? svm, чтобы найти соответствующие параметры для реализации svm e1071.

Согласно? Svm, R e1071 svm является интерфейсом к libsvm и, похоже, использует стандартные решатели QP.

Для мультиклассовой классификации с k уровнями, k> 2, libsvm использует подход «один против одного», в котором обучаются k (k-1) / 2 двоичных классификаторов; соответствующий класс определяется схемой голосования. libsvm внутренне использует разреженное представление данных, которое также поддерживается пакетом SparseM на высоком уровне.

Напротив? SMO в RWeka

реализует последовательный алгоритм минимальной оптимизации Джона К. Платта для обучения классификатора опорных векторов с использованием полиномиальных ядер или ядер RBF. Мультиклассовые задачи решаются с помощью попарной классификации.

Итак, эти две реализации в целом различаются (поэтому результаты могут немного отличаться). Тем не менее, если мы выберем соответствующие гиперпараметры одинаковыми, матрица путаницы будет почти такой же:

library(RWeka)
model.smo <- SMO(Species ~ ., data = iris,
control = Weka_control(K = list("RBFKernel", G=2), C=1.0, L=0.001, P=1.0E-12, N=0, V=10, W=1234))
res.smo <- predict(model.smo, iris[,-5])
table(pred = res.smo, true = iris[,ncol(iris)]) 

             true
pred         setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         47         1
  virginica       0          3        49

library(e1071)
set.seed(1234)
model.svm <- svm(iris[,-5], iris[,5], kernel="radial", cost=1.0, tolerance=0.001, epsilon=1.0E-12, scale=TRUE, cross=10)
res.svm <- predict(model.svm, iris[,-5])
table(pred = res.svm, true = iris[,ncol(iris)])  

           true
pred         setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         49         1
  virginica       0          1        49

Также обратитесь к этому: [https://stats.stackexchange.com/questions/130293/svm-and-smo-main-differencesprovided[1] и это [https://www.quora.com/Whats-the-difference-between-LibSVM-and-LibLinear][1]

person Sandipan Dey    schedule 14.10.2016
comment
да, вы правы, ядро ​​K будет иметь имя ядра и гамму полосы пропускания в виде списка. - person Sandipan Dey; 14.10.2016
comment
Спасибо за ответ! Но для задачи с двумя классами я также получаю два очень разных прогноза, хотя я устанавливаю одинаковые параметры. Это потому, что реализации разные? - person Yan; 15.10.2016
comment
Стратегия, используемая для мультиклассовой классификации SVM и SMO, кажется одинаковой (один против одного). Что касается бинарной классификации, если вы изучите все возможные параметры (включая параметры по умолчанию) и установите их все одинаково, то я думаю, что результаты не должны сильно отличаться, и если они это сделают, это из-за разницы в реализации. - person Sandipan Dey; 15.10.2016
comment
Спасибо, что ответили мне. Я задал аналогичный вопрос, используя данные 2-х классов, и результаты кажутся очень разными. Не могли бы вы помочь мне взглянуть? Заранее спасибо! stackoverflow .com / questions / 40065273 / - person Yan; 16.10.2016
comment
Я только начал использовать R Weka, возможно ли получить ROC AUC? Буду признателен за любой совет по этому поводу. - person Sandy; 22.10.2019