Перекрестная проверка для пользовательской SVM ядра в scikit-learn

Я хотел бы выполнить поиск по сетке с помощью перекрестной проверки для пользовательской SVM ядра с помощью scikit-learn. Точнее следуя этому примеру Я хочу определить функцию ядра, например

def my_kernel(x, y):
"""
We create a custom kernel:
k(x, y) = x * M *y.T          
"""
return np.dot(np.dot(x, M), y.T)

где M - параметр ядра (например, гамма в гауссовском ядре).

Я хочу передать этот параметр M через GridSearchCV, что-то вроде

parameters = {'kernel':('my_kernel'), 'C':[1, 10], 'M':[M1,M2]}
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, parameters)

Итак, мой вопрос: как определить my_kernel, чтобы переменная M была предоставлена ​​GridSearchCV?


person vincent leclere    schedule 11.07.2015    source источник


Ответы (1)


Возможно, вам придется создать класс-оболочку. Что-то вроде:

class MySVC(BaseEstimator,ClassifierMixin):
    def __init__( self, 
              # all the SVC attributes
              M ):
         self.M = M
         # etc...

    def fit( self, X, y ):
         kernel = lambda x,y : np.dot(np.dot(x,M),y.T)
         self.svc_ = SVC( kernel=kernel, # the other parameters )
         return self.svc_.fit( X, y )
    def predict( self, X ):
         return self.svc_.predict( X )
    # et cetera
person Andreus    schedule 13.07.2015