美文网首页数据分析专栏
数据分析:信用卡违约率分析,利用GridSearchCV进行参数

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

作者: Viva_Stephen | 来源:发表于2019-07-17 00:11 被阅读19次
    分类器:

    随机森林分类器(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

    相关文章

      网友评论

        本文标题:数据分析:信用卡违约率分析,利用GridSearchCV进行参数

        本文链接:https://www.haomeiwen.com/subject/abzxlctx.html