python网格搜索优化参数_python – 是否有可能通过网格搜索调整参数scikit-learn中的自定义内核?...
一种方法是使用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中的自定义内核?...相关推荐
- ASO搜索优化如何挑选适合的关键词,aso搜索关键词优化
对于很多开发者来说,选出有效关键词,并制定出一份优秀的关键词覆盖方案并不是一件容易的事情.有用户咨询:如何才能为应用挑选出"最好"的关键词.其实,这个问题并不是很复杂,接下来就和大 ...
- 可以搜python编程答案的软件_python实现百万答题自动百度搜索答案
用python搭建百万答题.自动百度搜索答案. 使用平台 windows7 python3.6 MIX2手机 代码原理 手机屏幕内容同步到pc端 对问题截图 对截图文字分析 用浏览器自动搜索文本 使用 ...
- python一次性输入多个数_python如何利用input函数输入多个参数?
python进行交互式输入过程中,一般使用input()函数来接受键盘的输入. 如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有 ...
- python map 多参数_python – multiprocessing.pool.map和带有两个参数的函数
我正在使用multiprocessing.Pool() 这是我想要的池: def insert_and_process(file_to_process,db): db = DAL("path ...
- python字符串截取后拼接_Python字符串拼接、截断、搜索、替换,python,截取,查找
熟练掌握字符串操作可以使我们的开发效率更高,接下来总结一下python字符串的操作 一.字符串拼接 1.字符串拼接,直接用加号即可, string1 = "Today is " s ...
- 如何在python中一次性输入多个参数_python如何利用input函数输入多个参数?
如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有一些帖子,但是总是没有讲到要点,这里解析如下. 关键知识点: 1.input函数 ...
- python主要讲什么意思_python:苗先生从影评上说了什么?,中,看妙,讲,啥
最近,在工作之余自学python,越发膨胀,觉得自己厉害了一丢丢,前段时间看过秒先生,画面还挺好,立意嘛就图一乐呵,于是想用影评分析一下,看看大家都怎么看待妙先生这部电影. 分析网站 如图所示,我们要 ...
- python与机械教育初探_python与机器学实践-何宇健 源代码及过程中遇到的问题
# -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. "&quo ...
- python下载matplotlib.finance模块_Python pyfinance包_程序模块 - PyPI - Python中文网
PyFinance pyfinance是一个python包,用于投资管理和安全回报分析. 它是对面向量化金融的现有软件包的补充,例如pyfolio, 熊猫数据读取器,以及fecon235 支持巨蟒3. ...
最新文章
- 巨头抱团后 奢侈品电商还有前途吗?
- q-dir 打不开文件_Q-Dir –多窗格文件管理器
- 转:Mac文件权限操作详细记录
- MVC源码解析 - 配置注册 / 动态注册 HttpModule
- 北京上海等昨天大规模断网 专家称与太阳无关
- 1. SOAP 简介
- You must install signalwire-client-c to build mod_signalwire
- comsol兼容服务器系统,comsol 云服务器
- 人人都能看懂——c大调d大调f…
- STM32驱动步进电机
- DDos攻击防御策略
- 微信公众号:我们可以用它来干什么?
- Stripe完善账户与使用(重点)
- 本地代码推到远程仓库——gitee
- android手机root status,相应黑科技梳理
- Sqlserver 修改字段长度
- 107- 智力金壤:争分夺秒是什么意思生肖求解
- 5. ESP8266固件的编译(RTOS SDK固件)
- 迅捷CAD编辑器哪些功能比较好用
- SLF4J: Class path contains multiple SLF4J bindings. 问题原因及解决方法。
热门文章
- [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理 OnActionExecuting内如何获取参数...
- 动态加载jar包(一)
- 记录一次奇葩的sleep(15)引起的Too many connections
- 1. Windows Powershell初接触
- 310. 最小高度树
- 【论文写作】毕业论文写作的基本流程
- android渠道校验,Android渠道版本自动化校验
- java 调用.net类库_通过COM组件方式实现java调用C#写的DLL文件
- php个推透传消息,GitHub - Lysice/laravel-getui: Laravel个推的集成包,支持单推/多推/全量推送/透传消息等功能。...
- 速度极大提升,Arch Linux 计划将 zstd 作为默认压缩算法