概述
一、学习要求
对一份金融数据,我们在之前的博客中用各种模型完成了预测贷款用户是否会逾期的工作,接下来我们要介绍网格搜索和交叉验证的方法,来提高模型的准确率。
二、基础知识
-
什么是网格搜索
通过循环遍历,尝试每一种可能的参数选择,表现最好的参数就是最终的结果。以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,最后比较挑选出最优结果对应的参数网格。 -
交叉验证用来干什么的
在模型中,我们把数据分成了训练集和测试集,通过训练集拿到的参数来预测并且观察与测试集的拟合效果,但这样有很大的偶然性,为了减少这种一次划分的偶然性,我们使用交叉验证的方法。
三、实现
对数据的预处理和模型测试详见前面的博客,以下是模型调优的实现过程
逻辑回归模型调优
#模型调优
# n折交叉验证
n_fold = 5
# 评价标准
scoring = 'roc_auc'
from sklearn.model_selection import GridSearchCV
log_reg = LogisticRegression()
#把要调整的参数以及其候选值 列出来;
param_grid = {'C': [1e-3,0.01,0.1,1,10,100,1e3], 'penalty':['l1', 'l2']}
print("Parameters:{}".format(param_grid))
#实例化一个GridSearchCV类
grid_search = GridSearchCV(log_reg, param_grid = param_grid,cv = n_fold, scoring = scoring)
#训练,找到最优的参数
grid_search.fit(X_train, y_train)
print("Test set score:{:.2f}".format(grid_search.score(X_test,y_test)))
print("Best parameters:{}".format(grid_search.best_params_))
print("Best score on train set:{:.2f}".format(grid_search.best_score_))
print('Best score on test set:', grid_search.score(X_test, y_test))
SVM模型
n_fold = 5
scoring = 'roc_auc'
from sklearn import svm
from sklearn.model_selection import GridSearchCV
svm_linear = svm.SVC(kernel = 'linear', probability=True)
#把要调整的参数以及其候选值 列出来;
param_grid = {'C':[0.01,0.1,1]}
print("Parameters:{}".format(param_grid))
#实例化一个GridSearchCV类
grid_search = GridSearchCV(svm_linear, param_grid = param_grid,cv = n_fold, scoring = scoring)
#训练,找到最优的参数
grid_search.fit(X_train, y_train)
print("Test set score:{:.2f}".format(grid_search.score(X_test,y_test)))
print("Best parameters:{}".format(grid_search.best_params_))
print("Best score on train set:{:.2f}".format(grid_search.best_score_))
print('Best score on test set:', grid_search.score(X_test, y_test))
决策树
n_fold = 5
scoring = 'roc_auc'
from sklearn.model_selection import GridSearchCV
dtree = DecisionTreeClassifier(max_depth=6)
#把要调整的参数以及其候选值 列出来;
param_grid = {'max_depth': [3, 4, 5, 6, 7,]}
print("Parameters:{}".format(param_grid))
#实例化一个GridSearchCV类
grid_search = GridSearchCV(dtree, param_grid = param_grid,cv = n_fold, scoring = scoring)
#训练,找到最优的参数
grid_search.fit(X_train, y_train)
print("Test set score:{:.2f}".format(grid_search.score(X_test,y_test)))
print("Best parameters:{}".format(grid_search.best_params_))
print("Best score on train set:{:.2f}".format(grid_search.best_score_))
print('Best score on test set:', grid_search.score(X_test, y_test))
Xgboost
n_fold = 5
scoring = 'roc_auc'
from sklearn.model_selection import GridSearchCV
xgbClassifier = XGBClassifier()
#把要调整的参数以及其候选值 列出来;
param_grid = {'C': [1e-3,0.01,0.1,1,10,100,1e3], 'penalty':['l1', 'l2']}
print("Parameters:{}".format(param_grid))
#实例化一个GridSearchCV类
grid_search = GridSearchCV(xgbClassifier, param_grid = param_grid,cv = n_fold, scoring = scoring)
#训练,找到最优的参数
grid_search.fit(X_train, y_train)
print("Test set score:{:.2f}".format(grid_search.score(X_test,y_test)))
print("Best parameters:{}".format(grid_search.best_params_))
print("Best score on train set:{:.2f}".format(grid_search.best_score_))
print('Best score on test set:', grid_search.score(X_test, y_test))
最后
以上就是欣慰八宝粥为你收集整理的模型优化———预测贷款用户是否逾期一、学习要求二、基础知识三、实现的全部内容,希望文章能够帮你解决模型优化———预测贷款用户是否逾期一、学习要求二、基础知识三、实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复