【问题标题】:Cross validation for custom kernel SVM in scikit-learnscikit-learn 中自定义内核 SVM 的交叉验证
【发布时间】:2015-09-29 21:15:16
【问题描述】:

我想通过交叉验证使用 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 以便 M 变量将由 GridSearchCV 给出?

【问题讨论】:

    标签: scikit-learn svm cross-validation


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2016-05-09
      • 2013-08-17
      • 2016-04-25
      • 2017-09-02
      • 2012-10-14
      • 2014-04-15
      • 2015-10-14
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多