2013-07-06 3 views
2

Я планирую использовать scikit svm для прогнозирования класса. У меня есть двухклассный набор данных, состоящий из примерно 100 экспериментов. Каждый эксперимент инкапсулирует мои данные-точки (векторы) + классификацию. Подготовка СВМ в соответствии с http://scikit-learn.org/stable/modules/svm.html должна быть прямой. Мне нужно будет поместить все векторы в массив и сгенерировать еще один массив с соответствующими метками класса, настроить SVM. Тем не менее, для того чтобы запустить оценку ошибки «один-одинешний», мне нужно оставить конкретное подмножество векторов - один эксперимент. Как достичь этого с помощью доступной функции оценки?Train scikit SVM, подберите оценку оценки

Приветствия, EL

ответ

5

Вы можете вручную тренироваться на все, кроме одного наблюдения, используя Numpy индексацию уронить его. Затем вы можете использовать any of sklearn's helpers для оценки классификации. Например:

import numpy as np 
from sklearn import svm 

clf = svm.SVC(...) 
idx = np.arange(len(observations)) 
preds = np.zeros(len(observations)) 
for i in idx: 
    is_train = idx != i 
    clf.fit(observations[is_train, :], labels[is_train]) 
    preds[i] = clf.predict(observations[i, :]) 

В качестве альтернативы, scikit-узнать есть a helper to do leave-one-out и another helper to get cross-validation scores:

from sklearn import svm, cross_validation 
clf = svm.SVC(...) 
loo = cross_validation.LeaveOneOut(len(observations)) 
was_right = cross_validation.cross_val_score(clf, observations, labels, cv=loo) 
total_acc = np.mean(was_right) 

См the user's guide больше. cross_val_score фактически возвращает оценку для каждой складки (что немного странно ИМО), но поскольку у нас есть одна справка за наблюдение, это будет всего лишь 0, если это было неправильно, и 1, если бы это было правильно.

Конечно, оставлять-один-выход очень медленный и имеет ужасные статистические свойства для загрузки, поэтому вместо этого вы, вероятно, должны использовать KFold.

+0

+1, но что странно, если вы возвращаете счет за раз? –

+1

@larsmans Ничто не обязательно настолько странно, что я обычно получаю полный вектор прогнозов с использованием CV, а затем вычисляю матрицу точности/замешательства/независимо от того, что это полное предсказание. Это немного другой способ сделать это. – Dougal