数据分析:信用卡违约率分析,利用GridSearchCV进行参数调优!

分类器:

随机森林分类器(RandomForest):包含多个决策树的分类器,每一个子分类器都是一颗CART分类器。

RandomForestClassifier()
随即森林参数含义.png
GridSearchTV工具对模型参数进行调优:

它是python的自动参数搜索模块,只要给它参数取值范围,它可以自动跑一边所有的参数,并且告诉我们最优参数是什么。
代码:

from sklearn.model_selection import GridSearchCV

参数含义.png
使用管道机制流水线线作业:

当模型需要,数据规范化处理、PCA方法对数据进行数据降维,等步骤时,便可以穿件Pipeline流水线。

from sklearn.model_selection import GridSearchCV
pipeline = Pipeline([
        ('scaler', StandardScaler()),
        ('pca', PCA()),
        ('randomforestclassifier', RandomForestClassifier())
])

代码步骤:

1、数据导入与数据探索

2、数据清洗、特征选择、训练集与测试集选择

3、构造四个分类器、四个名称、四个参数及取值范围(字典或列表形式),以列表的形式存在

4、函数,带入自动筛选函数,参数为管道执行顺序,测试训练值,以及变化参数

5、用for 循环解封分类器、参数……列表,并管道执行数据标准化,分类器创建

# 查看信用卡违约率
import pandas as pd
from sklearn.model_selection import learning_curve,train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
import  matplotlib.pyplot as plt
import seaborn as sns
#1、数据探索
data=pd.read_csv('E:/数据学习网站/credit_default-master/UCI_Credit_Card.csv')
# print(data.head(5))
# print(data.describe())
# print(data.shape)
next_month=data['default.payment.next.month'].value_counts()#统计个数
# print(next_month)
df=pd.DataFrame({'default.payment.next.month':next_month.index,'values':next_month.values})#将统计数据设置成pandas格式
# print(df)

# 可视化
# plt.rcParams['font.sans-serif']=['SimHei']#用来正常显示中文
# plt.figure(figsize=(6,6))#图形大小
# plt.title('信用卡违约率客户\n(违约:1,守约:0)')#图形标题
# sns.set_color_codes('pastel')#图形颜色
# sns.barplot(x='default.payment.next.month',y='values',data=df)
# locs,labels=plt.xticks()
# plt.show()

#2、数据清洗、特征选择
data.drop(['ID'],inplace=True,axis=1)#除去没用的ID
target=data['default.payment.next.month'].values#结果
columns=data.columns.tolist()
columns.remove('default.payment.next.month')#移除结果栏
features=data[columns].values
train_x,test_x,train_y,test_y=train_test_split(features,target,test_size=0.3,stratify=target,random_state=1)#一般来说0.3用来测试

# 3、构造各种分类器,四个分类器,以列表的形式存在
classifiers=[
    SVC(random_state=1,kernel='rbf'),
    DecisionTreeClassifier(random_state=1,criterion='gini'),
    RandomForestClassifier(random_state=1,criterion='gini'),
    KNeighborsClassifier(metric='minkowski')
]

# 4、分类器名称
classifier_names=[
    'svc',
    'decisiontreeclassifier',
    'randomforestclassifier',
    'kneighborsclassifier'
]

# 5、分类器参数
classifier_param_grid = [
    {'svc__C': [1], 'svc__gamma': [0.01]},
    {'decisiontreeclassifier__max_depth': [6, 9, 11]},
    {'randomforestclassifier__n_estimators': [3, 5, 6]},
    {'kneighborsclassifier__n_neighbors': [4, 6, 8]},
]

#6、函数,带入自动筛选函数,参数为管道执行顺序,测试训练值,以及变化参数
def GridSearchCV_work(pipeline,train_x,train_y,test_x,test_y,param_grid,score='accuracy'):
    response={}
    gridsearch=GridSearchCV(estimator=pipeline,param_grid=param_grid,scoring=score)
    gridsearch.fit(train_x,train_y)
    print('最优参数为:',gridsearch.best_params_)
    print('最优分数为:',gridsearch.best_score_)
    predict_y=gridsearch.predict(test_x)
    print('准确率为:',accuracy_score(test_y,predict_y))
    response['predict_y']=predict_y
    response['accuracy_score']=accuracy_score(test_y,predict_y)
    return response

#7、用for 循环解封分类器、参数……列表,并管道执行数据标准化,分类器创建
for model,model_name,model_param_grid in zip(classifiers,classifier_names,classifier_param_grid):
    pipeline=Pipeline([
        ('scaler',StandardScaler()),
        (model_name,model)
    ])
   result=GridSearchCV_work(pipeline,train_x,train_y,test_x,test_y,model_param_grid,score='accuracy')

结果:

最优参数为: {'svc__C': 1, 'svc__gamma': 0.01}
最优分数为: 0.8173809523809524
准确率为: 0.8172222222222222

最优参数为: {'decisiontreeclassifier__max_depth': 6}
最优分数为: 0.8186190476190476
准确率为: 0.8113333333333334

最优参数为: {'randomforestclassifier__n_estimators': 6}
最优分数为: 0.7998095238095239
准确率为: 0.7994444444444444

最优参数为: {'kneighborsclassifier__n_neighbors': 8}
最优分数为: 0.804047619047619
准确率为: 0.8035555555555556

可以看出,各个分类器的最优结果和最优的参数。

数据来源:
我们现在来做一个信用卡违约率的项目,这个数据集你可以从 GitHub 上下载:https://github.com/cystanford/credit_default

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容