Datawhale夏令营学习笔记二

文章介绍了如何建立一个基本的模型baseline,包括数据读取、数据集划分、LightGBM参数设置,以及防止过拟合的策略。进一步提出了使用K折交叉验证来优化模型,以解决数据量较小的问题,并讨论了调整模型参数以提高性能的方法。
摘要由CSDN通过智能技术生成

一、baseline理解

# 数据准备
train_dataset = pd.read_csv("./data/train.csv") # 原始训练数据。
test_dataset = pd.read_csv("./data/test.csv") # 原始测试数据(用于提交)。

首先是数据读取部分,用pandas的read_csv函数将训练数据和测试数据分别读入。

pred_labels = list(train_dataset.columns[-34:]) # 需要预测的标签。
train_set, valid_set = train_test_split(train_dataset, test_size=0.2) # 拆分数据集。

标签也就是需要我们最后预测的部分,在这里是数据集的后34列。然后将训练数据划分成数据集和验证集,需要注意的是这里的验证集才是供模型验证准确后继续优化的数据部分,而上面的训练集则只在模型训练好后用来衡量模型的准确性,只用一次且模型不能根据此次结果来继续优化,这一点需要注意。 举一个例子就是训练集就像平时学习时的作业,验证集像是期中期末,可以多次使用,测试集是高考,只能考一次。

lgb_params = {
        'boosting_type': 'gbdt', #使用的模型
        'objective': 'regression', #回归
        'metric': 'mae', #衡量准确性用的方法
        'min_child_weight': 5, #防止过拟合的话需要设小一点
        'num_leaves': 2 ** 5,  #最好不要超过上面
        'lambda_l2': 10, #L2正则化项的权重
        'feature_fraction': 0.8, #特征采样
        'bagging_fraction': 0.8, #数据采样
        'bagging_freq': 4,  #随机选择数据的频率
        'learning_rate': 0.05,  #学习率
        'seed': 2023,  #随机种子
        'nthread' : 16,   #并行线程
        'verbose' : -1, #不输出日志
        'early_stopping_rounds' : 50, #如果模型训练50次后无提升就停止
    }

no_info = lgb.callback.log_evaluation(period=-1) # 禁用训练日志输出。

二、优化思路 

1、 K折交叉验证

首先是数据集的问题,由于数据集比较少,然后再把验证集划分出去后就更少了,为了解决这个问题可以尝试K折交叉验证,也就是将数据集划分成K份,每次将其中的1份作为验证集,其他作为训练集,重复执行K次。为了使模型变得更好,可以将这K次训练全喂到一个模型里,这里可以使用save_model来将之前的模型保存下来。

from sklearn.model_selection import KFold

kf = KFold(n_splits=5) #5也就表示使用5折交叉验证

for result in kf.split(train_dataset):
    train_set = train_dataset.iloc[result[0]]
    valid_set = train_dataset.iloc[result[1]]

2、防止过拟合

在参数中加上early_stopping_rounds,然后在条件允许的时候可以将模型的训练次数拉大一点。

也可以更改参数中的min_child_weight和num_leaves部分,微调一下观察模型准确性的变化。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值