当前位置: 首页 > backend >正文

Binary Prediction with a Rainfall Dataset-(回归+特征工程+xgb)

Binary Prediction with a Rainfall Dataset

题意:

给你每天的天气信息,让你预测降雨量。

数据处理:

1.根据特征值构造天气降雨量的新特征值
2.根据时间构造月和季节特征
3.处理缺失值

建立模型:

1.建立lightgbm模型
2.建立xgboost模型,并进行网格搜索最佳参数模型
3.进行模型融合

代码:
import os
import sys
import warnings
import numpy as np
import pandas as pd
import seaborn
from matplotlib import pyplot as plt
import lightgbm
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
from sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score
from xgboost import XGBRegressordef init():os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'  # 仅输出错误日志warnings.simplefilter('ignore')  # 忽略警告日志pd.set_option('display.width', 1000)pd.set_option('display.max_colwidth', 1000)pd.set_option("display.max_rows", 1000)pd.set_option("display.max_columns", 1000)def show_dataframe():print("查看特征值和特征值类型\n" + str(df_train.dtypes) + "\n" + "-"*100)print("查看前10行信息\n" + str(df_train.head()) + "\n" + "-"*100)print("查看每个特征值的各种数据统计信息\n" + str(df_train.describe()) + "\n" + "-" * 100)print("输出重复行的个数\n" + str(df_train.duplicated().sum()) + "\n" + "-" * 100)print("查看每列的缺失值个数\n" + str(df_train.isnull().sum()) + "\n" + "-" * 100)print("查看缺失值的具体信息\n" + str(df_train.info()) + "\n" + "-" * 100)print("输出X所有值出现的是什么,还有对应出现的次数\n" + str(df_train['X'].value_count()) + "\n" + "-" * 100)def show_relation(data, colx, coly): #输出某一特征值与目标值的关系if data[colx].dtype == 'object' or data[colx].dtype == 'category' or len(data[colx].unique()) < 20:seaborn.boxplot(x=colx, y=coly, data=data)else:plt.scatter(data[colx], data[coly])plt.xlabel(colx)plt.ylabel(coly)plt.show()def show_score(model_name,pred):mse = mean_squared_error(y_train, pred)mae = mean_absolute_error(y_train, pred)score = r2_score(y_train, pred)print(model_name)print(f"{'MSE':<10}{mse:<15.4f}")print(f"{'MAE':<10}{mae:<15.4f}")print(f"{'R²':<10}{score:<15.4f}")print("-"*100)if __name__ == '__main__':df_train = pd.read_csv('/kaggle/input/playground-series-s5e3/train.csv')df_test = pd.read_csv('/kaggle/input/playground-series-s5e3/test.csv')init()#df_show()df_all = pd.concat([df_train.drop(['id', 'rainfall'], axis=1), df_test.drop(['id'], axis=1)], axis=0)df_all['cha_temp'] = df_all['maxtemp']-df_all['mintemp'] #温差df_all['cha_temp_dew'] = df_all['temparature'] - df_all['dewpoint'] #温度湿度差df_all['humidity_norm'] = df_all['humidity'] / 100  #湿度转换为0-1范围df_all['precip_potential'] = (df_all['humidity_norm'] * df_all['cloud']) / (df_all['windspeed'] + 1e-5) #降水潜力指数df_all['solar_energy'] = df_all['sunshine'] * (df_all['maxtemp'] - df_all['mintemp']) #日照能量X_train = df_all[:df_train.shape[0]]Y_train = df_train['rainfall']x_train,x_val,y_train,y_test = train_test_split(X_train,Y_train,test_size=0.2,random_state=42)x_test = df_all[df_train.shape[0]:]model_lgb = lightgbm.LGBMRegressor(n_estimators=3000,  # 增加迭代次数配合早停learning_rate=0.01,  # 减小学习率num_leaves=15,  # 限制模型复杂度min_child_samples=20,  # 增加最小叶子样本数reg_alpha=0.1,  # L1正则化reg_lambda=0.1,  # L2正则化objective='regression_l1',  # 改用MAE损失verbose=100)model_lgb.fit(x_train, y_train)pred_lgb = model_lgb.predict(x_test)show_score(model_name='lgb', pred=model_lgb.predict(x_train))xgb_param_grid = {'n_estimators': [50, 100, 200],  # 树的数量'max_depth': [3, 4, 5, 6],  # 树的最大深度'learning_rate': [0.01, 0.1, 0.2],  # 学习速率'subsample': [0.8, 1.0],  # 指定每次迭代中用于训练每棵树的数据比例#'colsample_bytree': [0.8, 1.0], #指定每次迭代中用于训练每棵树的特征比例#'gamma': [0, 0.1, 0.2], #最小损失减少值#'min_child_weight': [1, 3, 5], #子节点所需的最小样本权重和#'reg_alpha': [0, 0.1, 1], #控制模型的正则化强度#'reg_lambda': [0, 0.1, 1] #控制模型的正则化强度}model_xgb = GridSearchCV(estimator=XGBRegressor(random_state=42),  # 对什么模型进行搜索超参数param_grid=xgb_param_grid,  # 超参数的候选值cv=3,  # 使用3折交叉验证)model_xgb.fit(x_train, y_train)pred_xgb = model_xgb.predict(x_test)show_score(model_name='xgb', pred=model_xgb.predict(x_train))pred_all = pred_xgbsubmission = pd.DataFrame({'id': df_test['id'],'sales': np.where(pred_all < 0, 0, pred_all)})submission.to_csv('/kaggle/working/submission.csv', index=False)
http://www.xdnf.cn/news/7075.html

相关文章:

  • 【C++进阶篇】C++容器完全指南:掌握set和map的使用,提升编码效率
  • Popeye
  • UnLua源码分析(一)初始化流程
  • 13.Ext系列文件系统
  • 【2025版】SpringCloud Gateway网关快速入门
  • 相机Camera日志分析之十二:高通相机Camx hal拍照1帧logcat日志capture拍照帧详解
  • 基于CNN的猫狗识别(自定义CNN模型)
  • AIDA64 extreme7.5 版本注册激活方法
  • 掌握LINQ:查询语法与方法语法全解析
  • 什么是 Flink Pattern
  • 内容中台的AI基石是什么?
  • TDengine 在新能源领域的价值
  • 前端动画库 Anime.js 的V4 版本,兼容 Vue、React
  • OpenHarmony外设驱动使用 (四),Face_auth
  • 蓝牙通讯协议学习
  • 内容社区系统开发文档(中)
  • 继MCP、A2A之上的“AG-UI”协议横空出世,人机交互迈入新纪元
  • windows环境下c语言链接sql数据库
  • Kubernetes控制平面组件:Kubelet详解(六):pod sandbox(pause)容器
  • JSON Schema 高效校验 JSON 数据格式
  • 微服务项目->在线oj系统(Java版 - 2)
  • c++编写中遇见的错误
  • 【AWS入门】Amazon SageMaker简介
  • 4:OpenCV—保存图像
  • 解决 Tailwind CSS 代码冗余问题
  • 机器学习(12)——LGBM(1)
  • Python爬虫基础
  • 选择合适的AI模型:解析Trae编辑器中的多款模型及其应用场景
  • Go 语言中的一等公民(First-Class Citizens)
  • Flutter与Kotlin Multiplatform(KMP)深度对比及鸿蒙生态适配解析