美文网首页
房屋信贷违约风险竞争(kaggle)系列6-模型解释

房屋信贷违约风险竞争(kaggle)系列6-模型解释

作者: 只是甲 | 来源:发表于2022-08-24 15:15 被阅读0次

    一. 模型解释

    作为一种查看哪些变量最相关的简单方法,我们可以查看随机森林的特征输入。
    鉴于我们在探索性数据分析中看到的相关性,我们应该预期最重要的特性是EXT_SOURCE和DAYS_BIRTH。
    在未来的工作中,我们可能会使用这些特征输入作为降维的方法。

    # 导入基本处理模块
    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import LabelEncoder
    import os
    import warnings
    warnings.filterwarnings('ignore')
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 输入处理缺失值
    from sklearn.impute import SimpleImputer
    from sklearn.preprocessing import PolynomialFeatures
    
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.linear_model import LogisticRegression
    
    app_train = pd.read_csv('E:/home_credit_default_risk/application_train.csv')
    app_test = pd.read_csv('E:/home_credit_default_risk/application_test.csv')
    
    train_labels = app_train['TARGET']
    
    app_train = app_train.select_dtypes(['number'])
    app_test = app_test.select_dtypes(['number'])
    
    # 从训练数据中删除目标
    if 'TARGET' in app_train:
        train = app_train.drop(columns=['TARGET'])
    else:
        train = app_train.copy()
    
    # 特征名称
    features = list(train.columns)
    
    # 复制测试集
    test = app_test.copy()
    
    # 缺失值的中值估算
    imputer = SimpleImputer(strategy='median')
    
    # 将每个特性缩放到0-1
    scaler = MinMaxScaler(feature_range=(0, 1))
    
    # 符合训练数据
    imputer.fit(train)
    
    # 转换训练和测试数据
    train = imputer.transform(train)
    test = imputer.transform(app_test)
    
    # 重复的标量
    scaler.fit(train)
    train = scaler.transform(train)
    test = scaler.transform(test)
    
    from sklearn.ensemble import RandomForestClassifier
    
    # 建立随机森林分类器
    random_forest = RandomForestClassifier(n_estimators = 100, random_state = 50, verbose = 1, n_jobs = -1)
    # Train on the training data
    random_forest.fit(train, train_labels)
    
    # 提取重要特征
    feature_importance_values = random_forest.feature_importances_
    feature_importances = pd.DataFrame({'feature': features, 'importance': feature_importance_values})
    
    # 对测试数据进行预测
    predictions = random_forest.predict_proba(test)[:, 1]
    
    # 做一个提交用的dataframe
    submit = app_test[['SK_ID_CURR']]
    submit['TARGET'] = predictions
    
    
    
    def plot_feature_importances(df):
        """
        由平面图测量模型的重要性。这可以用任何测量
    如果重要性越高越好,那么特征的重要性就越大。
    
    参数:
    df(dataframe):功能重要性。必须在列中包含特征吗
    在一个名为“重要性”的专栏中,它被称为“特征”和“重要性”
    
    返回:
    显示了15个最重要的特征
    df (dataframe):按特征的重要性进行排序(最高到最低)
    带有一列表示归一化重要性
            """
    
        # 按特征的重要性进行排序
        df = df.sort_values('importance', ascending=False).reset_index()
    
        # 对特性的重要性进行规范化,使其加起来为1
        df['importance_normalized'] = df['importance'] / df['importance'].sum()
    
        # 制作测量特征的水平条形图
        plt.figure(figsize=(10, 6))
        ax = plt.subplot()
    
        # 需要反向索引绘制最重要的顶部
        ax.barh(list(reversed(list(df.index[:15]))),
                df['importance_normalized'].head(15),
                align='center', edgecolor='k')
    
        # 设置y轴刻度和标签
        ax.set_yticks(list(reversed(list(df.index[:15]))))
        ax.set_yticklabels(df['feature'].head(15))
    
        # 平面图的标签
        plt.xlabel('Normalized Importance');
        plt.title('Feature Importances')
        plt.show()
    
        return df
    
    
    #  将特征重要性显示为默认的
    feature_importances_sorted = plot_feature_importances(feature_importances)
    
    image.png

    我们看到,我们所有的四个自己设计的功能都使它进入了前15个最重要的!这能使我们确信,我们的领域知识至少有部分走上了正轨。

    相关文章

      网友评论

          本文标题:房屋信贷违约风险竞争(kaggle)系列6-模型解释

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