KAGGLE竞赛实战2-捷信金融违约预测竞赛-part2-用lightgbm建立baseline

ops/2025/1/20 1:51:18/

接着上一篇,用lightgbm建立baseline,发现模型效果得到了很大优化(模型分提升为0.73)

# In[211]:


from sklearn.model_selection import cross_val_score,KFold


# In[228]:


import lightgbm as lgb


# In[229]:


from lightgbm import LGBMClassifier 


# In[232]:


from lightgbm import early_stopping


# In[237]:


from sklearn.metrics import roc_auc_score


# In[215]:


bad_chars=[':','""','\\','']
for feature in application_train.columns:
    if any(bad_char in feature for bad_char in bad_chars):
        print(f"Feature '{feature}'包含非法字符。")


# In[216]:


#去掉特殊字符import pandas as pd
import re
def clean_column_names(df):
    """
    清理DataFrame列名,去除特殊字符,使其符合JSON格式要求。
    
    参数:
    df (pd.DataFrame): 输入的DataFrame。
    
    返回:
    pd.DataFrame: 列名已清理的DataFrame。
    """
    # 定义一个函数,用于替换单个列名中的特殊字符
    def replace_chars(col_name):
        # 替换掉所有非字母数字和下划线的字符
        return re.sub(r'\W+', '_', col_name)
    
    # 应用替换函数到所有列名
    df.columns = [replace_chars(col) for col in df.columns]
    return df


    


# In[217]:


application_train=clean_column_names(application_train)
application_test=clean_column_names(application_test)


# In[218]:


bad_chars=[':','""','\\','']
for feature in application_train.columns:
    if any(bad_char in feature for bad_char in bad_chars):
        print(f"Feature '{feature}'包含非法字符。")


# In[238]:


def fit(train=application_train, valid=application_test):
    """
    模型训练函数,
    参数:train训练集
    valid测试集
    返回值:
    valid_auc:验证集上AUC指标
    feature_importances:特征重要性
    test_results:测试集结果
    """
    test = valid.copy()
    x_train = train.drop(['SK_ID_CURR', 'TARGET'], axis=1)
    y_train = train['TARGET']
    # 五折交叉验证
    folds = KFold(n_splits=5, shuffle=True, random_state=1412)
    # 定义变量保存预测结果
    oof_preds = np.zeros(y_train.shape[0])
    test_preds = np.zeros(test.shape[0])
    # 提取特征名
    feature_names = list(x_train.columns)
    # 空数组用于存储特征重要性值
    feature_importance_values = np.zeros(len(feature_names))
    # 实例化模型
    lgb = LGBMClassifier(n_estimators=10000, early_stopping_round=200, random_state=24)
    for fold_idx, (train_idx, valid_idx) in enumerate(folds.split(x_train)):
        X = x_train.iloc[train_idx]
        y = y_train.iloc[train_idx]
        valid_X = x_train.iloc[valid_idx]
        valid_y = y_train.iloc[valid_idx]
        # 定义早停回调函数
        callbacks = [early_stopping(stopping_rounds=200)]
        # 拟合模型
        lgb.fit(X, y, eval_set=[(X, y), (valid_X, valid_y)], callbacks=callbacks)
        # 记录特征重要性
        feature_importance_values += lgb.feature_importances_ / folds.n_splits
        # 在验证集上进行预测
        proba = lgb.predict_proba(valid_X, num_iteration=lgb.best_iteration_)
        oof_preds[valid_idx] = proba[:, 1]  # 选择正类概率
        test_preds += lgb.predict_proba(test[feature_names], num_iteration=lgb.best_iteration_)[:, 1]
    valid_auc = roc_auc_score(y_train, oof_preds)
    feature_importances = pd.DataFrame({'feature': feature_names, 'importance': feature_importance_values})
    test['TARGET'] = test_preds
    return valid_auc, feature_importances, test[['SK_ID_CURR', 'TARGET']]


# In[246]:


valid_auc,feature_importance,submission=fit(application_train[:50000],application_test)
#发现报错了Do not support special JSON characters in feature name,原因是有些列名里有特殊的字符,这是get_dummies时产生的


# In[247]:


valid_auc #0.7421786519800682


# In[248]:


#看下特征重要性
feature_importance.sort_values(by='importance',ascending=False)


# In[250]:


submission.to_csv('baseline_model_lightgbm.csv',index=False)#提交后成绩0.73


# In[251]:


application_train.to_csv('original_application_train.csv')#保存下结果
application_test.to_csv('original_application_test.csv')


http://www.ppmy.cn/ops/151531.html

相关文章

C#高级:通过 Assembly 类加载 DLL 和直接引用DLL的方法大全

一、主项目不添加引用 (主项目不添加引用,而是通过路径获取指定dll) 1.打印类的属性名称 namespace ReflectionDemo {class Program{static void Main(string[] args){// 指定【编译输出】的项目类库dll(启动项目编译输出目录下…

网络安全 | 什么是正向代理和反向代理?

关注:CodingTechWork 引言 在现代网络架构中,代理服务器扮演着重要的角色。它们在客户端和服务器之间充当中介,帮助管理、保护和优化数据流。根据代理的工作方向和用途,代理服务器可分为正向代理和反向代理。本文将深入探讨这两种…

【C++篇】红黑树的实现

目录 前言: 一,红黑树的概念 1.1,红黑树的规则 1.2,红黑树的最长路径 1.3,红黑树的效率分析 二,红黑树的实现 2.1,红黑树的结构 2.2,红黑树的插入 2.2.1,大致过程…

Hooks 使用规则

Hooks 使用规则 命名规则 Hook 必须 useXxx 格式来命名。 PS:这种命名规则也很易读,简单粗暴 调用位置 Hook 或自定义 Hook ,只能在两个地方被调用 组件内部其他 Hook 内部 组件外部,或一个普通函数中,不能调用…

Python 爬虫爬取京东商品信息 ||京东商品详情API

Python 爬虫爬取京东商品信息 下面我将逐一解释每一部分的代码 导入库 from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Options import time import random import csv from selenium.…

Vim 项目的现状

以下是 Vim 项目的现状: 维护与开发团队 团队变动:创始人 Bram Moolenaar 于 2023 年 8 月去世后,主要维护者 Christian Brabandt 承担起更多责任,并接纳了更多的开发者加入,如 Yegappan Lakshmanan、Dominique Pell …

攻防世界 unseping

开启场景 整体来说是创建了一个case类,然后可接受post传来的ctf的值,并对其进行base64解码以及反序列化。所以我们能控制ctf变量。 先看__wakeup方法,该方法使用waf方法对$arg中的内容进行了防护,过滤掉了| & ; 空格 / cat f…

Kotlin 极简小抄 P7- 空安全(安全调用操作符、Elvis 操作符、非空断言操作符、let 函数)

Kotlin 概述 Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言 Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性 Kotlin 是 Android 应用开发的首选语言,也可…