Предпочитаю один класс в libsvm (python) - PullRequest
1 голос
/ 21 января 2011

Я только начал немного играть с libsvm в python и получил некоторую простую классификацию для работы.

Проблема в том, что я создаю систему распознавания лиц, и я хочу очень низкое falseпроцент отказов .С другой стороны, SVM, похоже, оптимизирует для равного ложного отказа и ложного принятия.Какие у меня есть варианты?

И, как уже говорилось ранее, я очень плохо знаком с libsvm, так что будьте добры.;)

Ответы [ 2 ]

2 голосов
/ 24 января 2011

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

Кроме того, привязки Python, поставляемые с libSVM, не очень производительны и не предоставляют всех возможностей libSVM.

Тем не менее, если вы хотите посмотреть на другие привязки, привязки svm scikit-learn богаче и предоставляют некоторые параметры, которые могут пригодиться, такие как взвешенные классы или взвешенные выборки . Возможно, вы сможете уделить больше внимания классу, для которого вы не хотите ошибочной классификации.

Кроме того, привязка scikit представляет апостериорную вероятность классификации , но в случае с SVM я полагаю, что она опирается на хак (поскольку SVM не являются вероятностными) libSVM, который повторно классифицирует классификацию в иметь доверительный интервал в прогнозе.

1 голос
/ 01 марта 2011

Я использовал оболочку Python для libSVM и обнаружил, что могу вычислить меру достоверности, используя маржу ... см. Ниже функцию "Предсказание_значения". Он возвращает реальное значение с большими положительными значениями, указывающими на высокую достоверность того, что он является членом класса, большие отрицательные значения указывают на высокую степень уверенности в том, что он НЕ является членом класса; Значения, близкие к нулю, указывают на то, что он не уверен в классификации. Поэтому вместо того, чтобы вызывать «Предсказание», вызовите «Предсказание_значения_raw» и примените низкий порог (например, -2), чтобы убедиться, что вы не отклоняете истинные лица

# Begin pseudo-code
import svm as svmlib

prob = svmlib.svm_problem(labels, data)
param = svmlib.svm_parameter(svm_type=svmlib.C_SVC, kernel_type = svmlib.RBF)
model = svmlib.svm_model(prob, param)

# get confidence
self.model.predict_values_raw(sample_to_classify)
...