Sklearn自定义实现GridSearch

本文介绍了如何使用Sklearn的ParameterGrid实现一个自定义GridSearch函数,允许用户设置自己的评价指标,并在固定验证集上选择最优模型。示例展示了在SVM场景下的应用,但文章结论指出固定验证集可能引发过拟合,建议在数据处理上做好优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言:本文旨在利用Sklearn中的ParameterGrid来实现一个自定义化的网格搜索(GridSearch)函数,应用场景的话是可以自定义评价指标、同时能够在固定的验证集而非默认使用K-fold进行最优模型保存。

问题概述

 网格搜索(GridSearch)可以帮助我们确定最优的模型参数,但它的封装程度较高,难以进行自定义的评价指标设置;此外默认使用K-fold来选取最优参数也比较烦人。因此本文设计的自定义GridSearch流程实现了在固定的evaluation set进行最优模型的选取。

设计思路

 设计流程和原始的GridSearch一致,主要是利用了Sklearn中原本就有的ParameterGrid来生成一系列的候选参数,循环创建对应的模型,在验证集上评估模型的效果并保存系列模型的得分,最终选取最优模型。代码如下:

def custom_GridSearch(params,model,train_feature,train_label,eval_feature,eval_label,criterion):
    from sklearn.model_selection import ParameterGrid
    candidatas=ParameterGrid(params)
    result={}

    for i in range(candidatas.__len__()):
        temp_model=model(**candidatas[i])
        temp_model.fit(train_feature,train_label)
        pred=temp_model.predict(eval_feature)
        score=criterion(eval_label,pred)
        result[i]=score

    result=sorted(result.items(),key=lambda item:item[1],reverse=True)

    model_best=model(**candidatas[result[0][0]])
    model_best.fit(train_feature,train_label)


    print('--------------------------------Attrabutes-------------------------------')
    print('best_estimator_:', model_best)
    print('best_params_:', candidatas[result[0][0]])
    print('best_score_:',result[0][1])

    return model_best

给出SVM场景下的使用范例:

import numpy as n
import numpy as np
from sklearn.svm import  SVC
from sklearn.metrics import f1_score,precision_score,recall_score,accuracy_score,roc_curve
train_featue=np.random.rand(10,100)
train_label=np.random.randint(0,2,(10,))
eval_feature=np.random.rand(5,100)
eval_label=np.random.randint(0,2,(5,))
best=custom_GridSearch(params,SVC,train_featue,train_label,eval_feature,eval_labe

总结

 实际上最后发现还是不要固定验证集来评估模型的好坏,非常容易过拟合,还是在数据处理上做好准备吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值