贷款逾期(6)-交叉验证

本文介绍了网格搜索和交叉验证在模型调优中的应用。网格搜索是一种参数调优技术,通过遍历所有可能的参数组合找到最佳参数。交叉验证如KFold、留一法、留p法和ShuffleSplit等,用于评估模型的泛化能力,减少数据划分的偶然性。留一法在小样本数据中表现出色,但计算成本高。文章提供了各种交叉验证方法的代码实现。
摘要由CSDN通过智能技术生成

任务

使用网格搜索对模型进行调优并采用五折交叉验证的方式进行模型评估。

1.网格搜索

网格搜索

1.1 什么是Grid Search 网格搜索?

网格搜索是一种调参手段;在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。(为什么叫网格搜索?以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫grid search)

1.2 Simple Grid Search:简单的网格搜索

原始数据集划分成训练集和测试集以后,其中测试集除了用作调整参数,也用来测量模型的好坏
缺点:导致最终的评分结果比实际效果要好。(因为测试集在调参过程中,送到了模型里,而我们的目的是将训练模型应用在unseen data上)
解决方法:对训练集再进行一次划分,分成训练集和验证集,这样划分的结果就是:原始数据划分为3份,分别为:训练集、验证集和测试集;其中训练集用来模型训练,验证集用来调整参数,而测试集用来衡量模型表现好坏。然而,这种简单的grid search方法,其最终的表现好坏与初始数据的划分结果有很大的关系,为了处理这种情况,我们采用交叉验证的方式来减少偶然性。

1.3代码实现

#!/user/bin/env python
#-*- coding:utf-8 -*-
# @Time    : 2018/11/24 10:41
# @Author  : 刘
# @Site    : 
# @File    : wanggesuoshuo.py
# @Software: PyCharm
import  pickle
from sklearn.svm import SVC

"""
读取数据
"""

path = "E:/mypython/moxingxuexi/"
print("0 读取特征")
f = open(path + 'feature/V4.pkl', 'rb')
X_train, X_test, y_train,y_test= pickle.load(f)
f.close()

print("Size of training set:{} size of testing set:{}".format(X_train.shape[0],X_test.shape[0]))

"""
网格搜索
"""
X_train,X_val,y_train,y_val = X_train, X_test, y_train,y_test
print("训练集:{} 验证集:{} 测试集:{}".format(X_train.shape[0],X_val.shape[0],X_test.shape[0]))
best_score = 0
for gamma in [0.001,0.01,0.1,1,10,100]:
    for C in [0.001,0.01,0.1,1,10,100]:
        svm = SVC(gamma=gamma,C=C)#对于每种参数可能的组合,进行一次训练;
        svm.fit(X_train,y_train)
        score = svm.score(X_val,y_val)
        print("当前gamma值:{} ,当前C值:{} ,当前score:{} ".format(gamma,C,score))
        if score > best_score:#找到表现最好的参数
            best_score = score
            best_parameters = {'gamma':gamma,'C':C}
"""【网格搜索结束】"""
svm=SVC(**best_parameters)  #使用最佳参数,构建新的模型
svm.fit(X_train,y_train) #使用训练集和验证集进行训练,more data always results in good performance
test_score = svm.score(X_test,y_test) # evaluation模型评估

print("Best score:{:.2f}".format(best_score))
print("Best parameters:{}".format(best_parameters))
print("Best score on test set:{}".format(test_score))

2.交叉

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值