sklearn的自动调参

一、管道

1、构造管道

# 标准语句
from sklearn.pipeline import Pipeline
pipe = Pipeline(steps)

# 缩减语句
from sklearn.pipeline import make_pipeline
pipe = Pipeline(*steps)

标准语句中的steps:列表形式,列表元素为元组(‘step_name’, step),'step_name’是步骤名称,可以自定义,step是实例化的估计器

缩减语句中的steps:只需要输入实例化的估计器,‘step_name’会自动生成

2、管道方法

pipe本身可以看做一个估计器,所以pipe也有和估计器类似的 score()fit()predict()等方法;

二、交叉检验与网格搜索

1、构造搜索

from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(estimator, param_grid, n_jobs=None, cv=None)

estimator:实例化后的估计器,或管道对象
param_grid:字典或字典列表类型
n_jobs:调用的cpu数量,默认为1
cv:折叠数,默认为5

param_grid详解
(1)对estimator是单个估计器的网格搜索情况:输入类型是字典类型,键值对是“参数名”——参数迭代列表。
demo:

param_grid = {'C':[1,2,3], 'gamma':[1,2,3]}
grid = GridSearchCV(SVC(), param_grid=param_grid)

表示SVC()估计器搜索C参数和gamma参数分别取1、2、3时的最优结果。

(2)对estimator是管道的网格搜索情况:输入类型是字典类型,键值对是“步骤名”——估计器列表,或是“步骤参数名”——参数迭代列表,其中步骤参数名的格式为“步骤名__参数名”(之间用双下划线连接)。
demo:

pipe = Pipeline([('reprocess', PCA()), ('regression', LinearSVC())])

param_grid =
	{	
	'reprocess': [PCA()],
	'regession': [LinearSVC(), LogisticRegression()],
	'regression__C': [1,2,3]
	}

grid = GridSearchCV(pipe, param_grid=param_grid)

表示reprocess步骤取PCA(),regression步骤分别取LinearSVC()LogisticRegression(),regression步骤估计器的C参数分别取1、2、3时,搜索出最优结果。

(3)非网格搜索情况:在某些条件下,如估计器的参数名不相同,或步骤不相同,无法通过一个字典迭代完所有情况时,可以使用非网格搜索。输入类型是字典列表。
demo:

pipe = Pipeline([('reprocess', PCA()), ('regression', SVC())])

param_grid =
	[{
	'reprocess': [PCA()],
	'regession': [LinearSVC(), LogisticRegression()],
	'regression__C': [1,2,3]
	},
	{
	'reprecess': [None], #None表示本步骤省略
	'regression': [RandomForestRegressor()],
	'regression__n_estimators': [1,2,3]
	}]

grid = GridSearchCV(pipe, param_grid=param_grid)

2、搜索器的方法和属性

(1)grid可以看成一个估计器,搜索出的最优估计器有的方法,grid也可以调用;
(2)best_params_属性:字典类型,最好的参数组合
(3)best_estimator属性:管道类型,最好的管道
(4)best_score_属性:最高的分数

三、自定义估计器

GridSearchCV方法可以对sklearn里的估计器或管道使用,如果需要对非sklearn中的估计器进行网格搜索,可以根据以下步骤自定义一个估计器

1、估计器要求

(1)需要继承BaseEstimator
(2)需要自定义fit()方法和score()

from sklearn.base import BaseEstimator

class MyEstimator(BaseEstimator):
	def fit(self, X, y):
		pass
	
	def score(self, X, y):
		pass

2、进一步简化构建估计器

可以将自定义估计器在继承BaseEstimator的基础上再继承一个类(都在sklearn.base中),则可以减少score()方法的定义:
ClassifierMixin:分类
ClusterMixin:聚类
RegressorMixin:回归
TransformerMixin:转换

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值