scikit-learn 中自定义内核 SVM 的交叉验证
Cross validation for custom kernel SVM in scikit-learn
我想使用 scikit-learn 通过交叉验证对自定义内核 SVM 进行网格搜索。更准确地说 this example
我想定义一个像
这样的内核函数
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是核的一个参数(就像高斯核中的gamma)。
我想通过 GridSearchCV 为这个参数 M 提供类似
的内容
parameters = {'kernel':('my_kernel'), 'C':[1, 10], 'M':[M1,M2]}
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, parameters)
所以我的问题是:如何定义 my_kernel 以便 GridSearchCV 给出 M 变量?
您可能需要制作一个包装器 class。类似于:
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
我想使用 scikit-learn 通过交叉验证对自定义内核 SVM 进行网格搜索。更准确地说 this example 我想定义一个像
这样的内核函数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是核的一个参数(就像高斯核中的gamma)。
我想通过 GridSearchCV 为这个参数 M 提供类似
的内容parameters = {'kernel':('my_kernel'), 'C':[1, 10], 'M':[M1,M2]}
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, parameters)
所以我的问题是:如何定义 my_kernel 以便 GridSearchCV 给出 M 变量?
您可能需要制作一个包装器 class。类似于:
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