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

例如,sklearn包含custom kernel function chi2_kernel(X,Y = None,gamma = 1.0),它计算特征向量X和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()

输出:

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替换为计算内核矩阵的函数.

python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...相关推荐

  1. ASO搜索优化如何挑选适合的关键词,aso搜索关键词优化

    对于很多开发者来说,选出有效关键词,并制定出一份优秀的关键词覆盖方案并不是一件容易的事情.有用户咨询:如何才能为应用挑选出"最好"的关键词.其实,这个问题并不是很复杂,接下来就和大 ...

  2. 可以搜python编程答案的软件_python实现百万答题自动百度搜索答案

    用python搭建百万答题.自动百度搜索答案. 使用平台 windows7 python3.6 MIX2手机 代码原理 手机屏幕内容同步到pc端 对问题截图 对截图文字分析 用浏览器自动搜索文本 使用 ...

  3. python一次性输入多个数_python如何利用input函数输入多个参数?

    python进行交互式输入过程中,一般使用input()函数来接受键盘的输入. 如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有 ...

  4. python map 多参数_python – multiprocessing.pool.map和带有两个参数的函数

    我正在使用multiprocessing.Pool() 这是我想要的池: def insert_and_process(file_to_process,db): db = DAL("path ...

  5. python字符串截取后拼接_Python字符串拼接、截断、搜索、替换,python,截取,查找

    熟练掌握字符串操作可以使我们的开发效率更高,接下来总结一下python字符串的操作 一.字符串拼接 1.字符串拼接,直接用加号即可, string1 = "Today is " s ...

  6. 如何在python中一次性输入多个参数_python如何利用input函数输入多个参数?

    如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有一些帖子,但是总是没有讲到要点,这里解析如下. 关键知识点: 1.input函数 ...

  7. python主要讲什么意思_python:苗先生从影评上说了什么?,中,看妙,讲,啥

    最近,在工作之余自学python,越发膨胀,觉得自己厉害了一丢丢,前段时间看过秒先生,画面还挺好,立意嘛就图一乐呵,于是想用影评分析一下,看看大家都怎么看待妙先生这部电影. 分析网站 如图所示,我们要 ...

  8. python与机械教育初探_python与机器学实践-何宇健 源代码及过程中遇到的问题

    # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. "&quo ...

  9. python下载matplotlib.finance模块_Python pyfinance包_程序模块 - PyPI - Python中文网

    PyFinance pyfinance是一个python包,用于投资管理和安全回报分析. 它是对面向量化金融的现有软件包的补充,例如pyfolio, 熊猫数据读取器,以及fecon235 支持巨蟒3. ...

最新文章

  1. 巨头抱团后 奢侈品电商还有前途吗?
  2. q-dir 打不开文件_Q-Dir –多窗格文件管理器
  3. 转:Mac文件权限操作详细记录
  4. MVC源码解析 - 配置注册 / 动态注册 HttpModule
  5. 北京上海等昨天大规模断网 专家称与太阳无关
  6. 1. SOAP 简介
  7. You must install signalwire-client-c to build mod_signalwire
  8. comsol兼容服务器系统,comsol 云服务器
  9. 人人都能看懂——c大调d大调f…
  10. STM32驱动步进电机
  11. DDos攻击防御策略
  12. 微信公众号:我们可以用它来干什么?
  13. Stripe完善账户与使用(重点)
  14. 本地代码推到远程仓库——gitee
  15. android手机root status,相应黑科技梳理
  16. Sqlserver 修改字段长度
  17. 107- 智力金壤:争分夺秒是什么意思生肖求解
  18. 5. ESP8266固件的编译(RTOS SDK固件)
  19. 迅捷CAD编辑器哪些功能比较好用
  20. SLF4J: Class path contains multiple SLF4J bindings. 问题原因及解决方法。

热门文章

  1. [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数...
  2. 动态加载jar包(一)
  3. 记录一次奇葩的sleep(15)引起的Too many connections
  4. 1. Windows Powershell初接触
  5. 310. 最小高度树
  6. 【论文写作】毕业论文写作的基本流程
  7. android渠道校验,Android渠道版本自动化校验
  8. java 调用.net类库_通过COM组件方式实现java调用C#写的DLL文件
  9. php个推透传消息,GitHub - Lysice/laravel-getui: Laravel个推的集成包,支持单推/多推/全量推送/透传消息等功能。...
  10. 速度极大提升,Arch Linux 计划将 zstd 作为默认压缩算法