是否可以通过 scikit-learn 中自定义内核的网格搜索来调整参数?

2023-11-26

我有一个自定义内核函数,并且我将 GridSearchCV 函数与 SVC(kernel=my_kernel) 一起使用。

my_kernel 函数需要一个参数 k 来调整,所以我想知道是否可以配置 param_grid 选项来调整我的自定义内核函数的参数。

例如,可以如下调整 RBF 内核的 gamma 参数。我可以为我的自定义内核提供 param_grid=dict(k=k_range) 类型的选项吗?

gamma_range = 10. ** np.arange(-5, 4)
param_grid = dict(gamma=gamma_range)
grid = GridSearchCV(SVC(), param_grid=param_grid, cv=StratifiedKFold(y=Y, k=5))

一种方法是使用Pipeline, SVC(kernel='precomputed')并将您的自定义内核函数包装为sklearn估计器(的子类BaseEstimator and TransformerMixin)).

例如,sklearn包含一个自定义核函数 chi2_kernel(X, Y=None, gamma=1.0),计算特征向量的核矩阵X and Y。 该函数需要一个参数gamma,最好使用交叉验证来设置。 我们可以对该函数的参数进行网格搜索,如下所示:

from __future__ import print_function
from __future__ import division

import sys

import numpy as np

import sklearn
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.cross_validation import train_test_split
from sklearn.datasets import load_digits
from sklearn.grid_search import GridSearchCV
from sklearn.metrics import accuracy_score
from sklearn.metrics.pairwise import chi2_kernel
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC

# Wrapper class for the custom kernel chi2_kernel
class Chi2Kernel(BaseEstimator,TransformerMixin):
    def __init__(self, gamma=1.0):
        super(Chi2Kernel,self).__init__()
        self.gamma = gamma

    def transform(self, X):
        return chi2_kernel(X, self.X_train_, gamma=self.gamma)

    def fit(self, X, y=None, **fit_params):
        self.X_train_ = X
        return self

def main():

    print('python: {}'.format(sys.version))
    print('numpy: {}'.format(np.__version__))
    print('sklearn: {}'.format(sklearn.__version__))
    np.random.seed(0)

    # Get some data to evaluate
    dataset = load_digits()
    X = dataset.data
    y = dataset.target
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

    # Create a pipeline where our custom predefined kernel Chi2Kernel
    # is run before SVC.
    pipe = Pipeline([
        ('chi2', Chi2Kernel()),
        ('svm', SVC()),
    ])

    # Set the parameter 'gamma' of our custom kernel by
    # using the 'estimator__param' syntax.
    cv_params = dict([
        ('chi2__gamma', 10.0**np.arange(-9,4)),
        ('svm__kernel', ['precomputed']),
        ('svm__C', 10.0**np.arange(-2,9)),
    ])

    # Do grid search to get the best parameter value of 'gamma'.
    model = GridSearchCV(pipe, cv_params, cv=5, verbose=1, n_jobs=-1)
    model.fit(X_train, y_train)
    y_pred = model.predict(X_test)
    acc_test = accuracy_score(y_test, y_pred)

    print("Test accuracy: {}".format(acc_test))
    print("Best params:")
    print(model.best_params_)

if __name__ == '__main__':
    main()

Output:

    python: 2.7.3 (default, Dec 18 2014, 19:10:20)
    [GCC 4.6.3]
    numpy: 1.8.0
    sklearn: 0.16.1
    Fitting 5 folds for each of 143 candidates, totalling 715 fits
    [Parallel(n_jobs=-1)]: Done   1 jobs       | elapsed:    0.4s
    [Parallel(n_jobs=-1)]: Done  50 jobs       | elapsed:    2.7s
    [Parallel(n_jobs=-1)]: Done 200 jobs       | elapsed:    9.8s
    [Parallel(n_jobs=-1)]: Done 450 jobs       | elapsed:   21.6s
    [Parallel(n_jobs=-1)]: Done 701 out of 715 | elapsed:   34.8s remaining:    0.7s
    [Parallel(n_jobs=-1)]: Done 715 out of 715 | elapsed:   35.4s finished
    Test accuracy: 0.989898989899
    Best params:
    {'chi2__gamma': 0.01, 'svm__C': 10.0, 'svm__kernel': 'precomputed'}

在你的情况下,只需更换chi2_kernel使用计算内核矩阵的函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以通过 scikit-learn 中自定义内核的网格搜索来调整参数? 的相关文章

随机推荐

  • 位移操作未返回预期结果

    为什么Java会返回 2147483648当我移位时1 预期结果是9 223 372 036 854 775 808 使用 Wolfram Alpha 和我的计算器进行了测试 我测试过 System out print long 1 lt
  • 迭代二维 STL 向量 c++

    我目前正在尝试打印我正在开发的游戏中玩家的动作历史记录 在每轮结束时 每个玩家都在正向或负向移动了一定的量 这会被记录为移动向量中的 int 最终我想绘制每个玩家的移动方向与时间的关系 但我在从二维向量中提取数据时遇到了困难 所以我尝试的第
  • Xcode 中是否可以将动态框架转换为静态库?

    是否可以将动态框架转换为静态库 问题是我没有框架的源代码 但只有SomeFramework framework文件是少数架构的动态库 创建一个 可可触摸框架 并将您的 framework 添加到 链接的框架和库 然后你可以 Go to 构建
  • 使用 sed 合并两个模式之间的行

    我有一个如下所示的输出文件 HEADER 1 server1 server2 server3 server4 server5 server6 server7 server8 server9 HEADER 2 HEADER 1 server1
  • 有没有办法在html中插入QPixmap对象?

    简单的情况 我有一个对象 它有一个QPixmap成员 首先创建对象 现在像素图为空 然后从数据库读取像素图并将其插入对象中 我需要在 html 代码 中插入该像素图并在 a 中显示该 html 代码QLabel但我不知道如何制作它 因为像素
  • Angular 2 Router、href 链接和不需要的页面刷新

    我目前正在尝试 angular2 beta1 我对新路由器有点困惑 通过 router navigate 进行导航就像一个魅力 而尝试通过注册路线的普通链接来刷新页面 当然 PathLocationStrategy 会发生这种情况 因为 H
  • Javascript 正则表达式 - 如何获取大括号之间的文本

    我需要获取大括号之间的文本 如果有 我确实找到了另一篇文章 但从技术上讲 它没有正确回答 用于提取方括号或大括号之间的文本的正则表达式 它实际上并没有说明如何实际提取文本 所以我已经做到了这一点 var cleanStr Some rand
  • 如何使用 jQuery 隐藏 div?

    当我想隐藏 HTML 时 div 我使用以下 JavaScript 代码 var div document getElementById myDiv div style visibility hidden div style display
  • 为什么这个 Javascript 方法不会继续调用自身?

    我有一个带有特权方法的 JavaScript 对象 当此方法完成后 我希望它调用自身 在短暂的超时后 并继续无限期地运行 不幸的是 该方法只运行两次 然后就停止了 没有任何错误 在 Chrome 和 IE 中测试 结果相同 代码如下 fun
  • HTML5 视频源作为本地存储的 blob 不再工作

    从 Chrome 80 开始 Blob 或 IndexedDB 的工作方式似乎发生了变化 将视频文件作为 blob 加载并通过 createObjectURL 将其分配给 HTML5 Video 元素仍然有效 load the blob t
  • 如何在 SWT 标签中添加文本和图像

    有没有办法在 SWT 标签中在一行中添加文本和图像 一旦我添加图像 文本就会消失 不 你不能在一个文件中同时拥有图像和文本Label 除非你自定义绘制它 其他用途org eclipse swt custom CLabel Code impo
  • 如何用动画改变NumberPicker的值?

    我创建了一个 Android 应用程序 其中有一个 NumberPicker 我需要更改此 NumberPicker 的值 但要具有平滑的动画 就像您触摸它并更改其值时一样 例如 假设当前值为 1 它将是 5 我希望 NumberPicke
  • 设置 stty 参数

    我尝试使用 bash 从 ttyS0 读取数据 需要设置以下内容 但我很难弄清楚 databits 7 stopbits 2 parity 0 flow control 0 这是我的代码 bin bash Port setting stty
  • 即使使用最新的驱动程序,Python pyopencl DLL 加载也会失败

    我已经为我的 GPU 安装了最新的 CUDA 和驱动程序 我在 Win7 64 位上使用 Python 2 7 10 我尝试从以下位置安装 pyopencl a 非官方 Windows 二进制文件位于http www lfd uci edu
  • 获取 Item 的深度

    我有这样的xml a b test b b b test2 b b b b b test2 b b b a 如何使用 linq to xml 获取每个项目的级别 测试级别 1 测试级别 2 测试级别3 3 我不知道会有多少个节点或有多少个级
  • Django:禁止直接分配到多对多集的前侧。使用 user.set() 代替

    当我尝试将当前登录的用户添加到另一个关系中时 出现此错误ManyToManyField TypeError Direct assignment to the forward side of a many to many set is pro
  • jquery 在焦点或单击时触发操作,但不能同时触发两者

    我有这个示例代码 myTrigger click function e alert click focus function e alert focus this click 目的是我希望当您单击 myTrigger 时发生一些事情 另一方
  • 如何查看 Typescript 类型的完整扩展合约?

    如果我有一个看起来有点像这样的类型集合 type ValidValues string number null type ValidTypes text time unknown type Decorated name string nul
  • 如何在 MAUI 项目中包含每个平台的现有 C++ 库?

    我们有一个针对每个平台构建的 C 库 即适用于 Windows 的 dll 适用于 Android 的 so 和适用于 iOS 的 a 尝试以下方法将 so 文件包含在 Android 版 MAUI 应用程序中 其他平台待定 Platfor
  • 是否可以通过 scikit-learn 中自定义内核的网格搜索来调整参数?

    我有一个自定义内核函数 并且我将 GridSearchCV 函数与 SVC kernel my kernel 一起使用 my kernel 函数需要一个参数 k 来调整 所以我想知道是否可以配置 param grid 选项来调整我的自定义内