Kaggle-Store Sales-(回归+多表合并+xgboost模型)
Store Sales
题意:
给出很多商店,给出商店的类型,某时某刻卖了多少销售额。
给出了油价表,假期表,进货表。
让你求出测试集合中每个商店的销售额是多少。
数据处理:
1.由于是多表,所以要先把其他表与train合并。根据train和其他表共有的某一列特征值中,选择一个共有列作为key然后进行合并。注意,同时也要处理test数据,这样才能保证列一致。由于test的数据处理后也不能让行有变化,所以进行合并之前,其他表要先进行去重。
2.合并后进行缺失值处理,使用平均值还是众数还是前后值要根据不同情况来分析,就比如油价就应该按前后值填充。
3.对非数值型的特征值进行独热编码。
建立模型:
1.建立xgboost模型,设置网格参数进行网格搜索求出超参数。
2.对xgb_model训练的时候要先把Y_train取log,最后X_test要取exp。以免炸精度。
代码:
import sys
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn import model_selection
from sklearn.model_selection import GridSearchCV, train_test_split
from xgboost import XGBClassifier, XGBRegressor
import seaborn as snspd.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(data,colx,coly):if data[colx].dtype == 'object' or data[colx].dtype == 'category' or len(data[colx].unique())<20:sns.boxplot(x=colx, y=coly, data=data)else:plt.scatter(data[colx], data[coly])plt.xlabel(colx)plt.ylabel(coly)plt.show()if __name__ == '__main__':data_train = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/train.csv')data_test = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/test.csv')data_holiday = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/holidays_events.csv')data_oil = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/oil.csv')data_store = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/stores.csv')data_transaction = pd.read_csv('/kaggle/input/store-sales-time-series-forecasting/transactions.csv')#合并data_holidaydata_holiday = data_holiday.drop_duplicates(subset=['date'])data_train = pd.merge(data_train, data_holiday, how='left', left_on='date', right_on='date')data_train = data_train.drop(columns=['type','locale','locale_name','description'],axis=1)data_train['transferred'] = data_train['transferred'].fillna(data_train['transferred'].mode()[0])data_test = pd.merge(data_test, data_holiday, how='left', left_on='date', right_on='date')data_test = data_test.drop(columns=['type', 'locale', 'locale_name', 'description'], axis=1)data_test['transferred'] = data_test['transferred'].fillna(data_test['transferred'].mode()[0])#合并data_oildata_oil = data_oil.drop_duplicates(subset=['date'])data_train = pd.merge(data_train, data_oil, how='left', left_on='date', right_on='date')data_train['dcoilwtico'] = data_train['dcoilwtico'].ffill().bfill()data_test = pd.merge(data_test, data_oil, how='left', left_on='date', right_on='date')data_test['dcoilwtico'] = data_test['dcoilwtico'].ffill().bfill()#合并data_storedata_store = data_store.drop_duplicates(subset=['store_nbr'])data_train = pd.merge(data_train, data_store, how='left', left_on='store_nbr', right_on='store_nbr')data_test = pd.merge(data_test, data_store, how='left', left_on='store_nbr', right_on='store_nbr')#合并data_transactiondata_transaction = data_transaction.drop_duplicates(subset=['store_nbr'])data_transaction = data_transaction.drop(columns=['date'],axis=1)data_train = pd.merge(data_train, data_transaction, how='left', left_on='store_nbr', right_on='store_nbr')data_test = pd.merge(data_test, data_transaction, how='left', left_on='store_nbr', right_on='store_nbr')#合并data_train和data_testdata_all = pd.concat([data_train.drop(['id', 'sales'], axis=1), data_test.drop(['id'], axis=1)], axis=0)data_all['date'] = pd.to_datetime(data_all['date'], errors='coerce')data_all['date'] = data_all['date'].astype('int64')#独热编码data_all = pd.concat([data_all.drop(str_cols,axis=1),pd.get_dummies(data_all[str_cols])], axis=1)X_train = data_all[:data_train.shape[0]]Y_train = data_train['sales']X_train,X_val,Y_train,Y_val = train_test_split(X_train,Y_train,test_size=0.2,random_state=42)X_test = data_all[data_train.shape[0]:]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] #控制模型的正则化强度}xgb_model = GridSearchCV(estimator=XGBRegressor(random_state=42), # 对什么模型进行搜索超参数param_grid=xgb_param_grid, # 超参数的候选值cv=3, # 使用3折交叉验证n_jobs=-1, # 使用所有cpu并行运算)xgb_model.fit(X_train,np.log1p(Y_train))print('xgb预测分数:' + str(xgb_model.score(X_val, np.log1p(Y_val))))Submission = pd.DataFrame({'id': data_test['id'],'sales': np.exp(xgb_model.predict(X_test))})Submission.to_csv('/kaggle/working/Submission.csv', index=False)
相关文章:
Kaggle-Store Sales-(回归+多表合并+xgboost模型)
Store Sales 题意: 给出很多商店,给出商店的类型,某时某刻卖了多少销售额。 给出了油价表,假期表,进货表。 让你求出测试集合中每个商店的销售额是多少。 数据处理: 1.由于是多表,所以要先把其他表与tr…...
在 Tailwind CSS 中优雅地隐藏滚动条
在开发中,我们经常需要隐藏滚动条但保持滚动功能,这在构建现代化的用户界面时很常见。 本文将介绍两种在 Tailwind CSS 项目中实现这一目标的方法,方便同学们记录和查阅。 方法一:使用 tailwind-scrollbar-hide 插件 这是一种更…...
智能合约安全审计平台——以太坊虚拟机安全沙箱
目录 以太坊虚拟机安全沙箱 —— 理论、设计与实战1. 引言2. 理论背景与安全原理2.1 以太坊虚拟机(EVM)概述2.2 安全沙箱的基本概念2.3 安全证明与形式化验证3. 系统架构与模块设计3.1 模块功能说明3.2 模块之间的数据流与安全性4. 安全性与密码学考量4.1 密码学保障在沙箱中…...
std::unordered_map(C++)
std::unordered_map 1. 概述2. 内部实现3. 性能特征4. 常用 API5. 使用示例6. 自定义哈希与相等比较7. 注意事项与优化8. 使用建议9. emplace和insert异同相同点不同点例子对比何时优先使用哪种? 1. 概述 定义:std::unordered_map<Key, T, Hash, KeyE…...
【MCP教程】Claude Desktop 如何连接部署在远程的remote mcp server服务器(remote host)
前言 最近MCP特别火热,笔者自己也根据官方文档尝试了下。 官方文档给的Demo是在本地部署一个weather.py,然后用本地的Claude Desktop去访问该mcp服务器,从而完成工具的调用: 但是,问题来了,Claude Deskto…...
Android Input——输入事件回调完成(十四)
前面几篇文章介绍了事件回调的相关流程,以及回调事件处理函数的相关内容,最后我们再来看一下事件处理完后,如何通知 InputDispatcher 去回调 Callback。 一、客户端回调 在 Android 的事件分发机制中,当客户端(即应用层)完成事件处理后,最终会调用 ViewRootImpl 的 fin…...
数据通信学习笔记之OSPF配置命令
华为 [huawei]ospf 10 router-id 1.1.1.1 //创建ospf进程,本地有效area 1 // 进入区域1network 192.168.1.0 0.0.0.255 // 宣告网段,使用反掩码stub // 配置为stub区域stub no-summary // 配置为Totally Stub 完全末节区域。在ABR上配置࿰…...
Python -yield 在python 中什么意思
在 Python 中,yield 是一个关键字,用于定义生成器函数(generator function)。它的作用是将一个普通函数转变为可迭代的生成器,具有惰性计算的特性。以下是关键要点: 核心概念 生成器函数: 当函数…...
多个路由器互通(静态路由)无单臂路由(简单版)
多个路由器互通(静态路由)无单臂路由(简单版) 开启端口并配ip地址 维护1 Router>en Router#conf t Router(config)#int g0/0 Router(config-if)#no shutdown Router(config-if)#ip address 192.168.10.254 255.255.255.0 Ro…...
OpenCV 图形API(38)图像滤波-----Sobel 算子操作函数Sobel()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::gapi::Sobel 函数是 OpenCV 的 G-API 模块中用于执行 Sobel 算子操作的一个函数,主要用于图像的边缘检测。Sobel 算子通过计算图…...
3DS 转 STL 全攻略:传统工具与迪威模型网在线转换深度解析
在 3D 建模与 3D 打印的技术领域中,常常会遇到需要将不同格式的文件进行转换的情况。其中,把 3DS 文件转换为 STL 格式是较为常见的操作。3DS 文件作为一种旧版 Autodesk 3D Studio 使用的 3D 图像格式,存储着丰富的信息,包括网格…...
windows系统安装驱动、cuda和cudnn
一、首先在自己的电脑里安装了nvidia的独立显卡 显卡的查找方式: CtrlShiftEsc打开任务管理器,点击性能,点击GPU 0查看显卡型号,如下图所示: 只要电脑中有nvidia的独立显卡,就可以暗转显卡驱动、cuda和cu…...
嵌入式开发--STM32软件和硬件CRC的使用--续篇
本文是《嵌入式开发–STM32软件和硬件CRC的使用》的续篇,又踩到一个坑,发出来让大家避一下坑。 按照G0系列的设置,得出错误的结果 前文对应的是STM32G0系列,今天在用STM32G4系列时,按照前文的设置,用硬件…...
2.深入剖析 Rust+Axum 类型安全路由系统
摘要 详细解读 RustAxum 路由系统的关键设计原理,涵盖基于 Rust 类型系统的路由匹配机制、动态路径参数与正则表达式验证以及嵌套路由与模块化组织等多种特性。 一、引言 在现代 Web 开发中,路由系统是构建 Web 应用的核心组件之一,它负责…...
c# 委托和事件的区别及联系,Action<T1,T2>与Func<T1,T2>的区别
定义与本质 委托: 委托是一种类型,用于存储对方法的引用。它允许将方法作为参数传递、存储和调用。委托可以绑定一个或多个方法,并通过和-操作符动态添加或移除方法。 事件: 事件是基于委托的封装,提供了一种发布/订阅机制。事件…...
【Python入门】文件读取全攻略:5种常用格式(csv/excel/word/ppt/pdf)一键搞定 | 附完整代码示例
大家好,我是唐叔!今天给大家带来一篇Python文件读取的终极指南。无论是数据分析、办公自动化还是爬虫开发,文件读取都是Python程序员必须掌握的核心技能。本文将详细介绍Python处理5大常用文件格式的方法,包含完整可运行的代码示例…...
【Git】git的简单使用
文章目录 1. 基础概念2. 简单使用2.1 git配置2.1.1 git的配置文件2.1.2 .gitignore文件 2.2 创建仓库2.2.1 创建本地仓库2.2.2 github创建远程仓库step1:github新建一个代码仓step2:创建密钥远程仓库相关指令2.2.3 本地仓库 关联 远程仓库 2.3 分支2.3.1…...
WebSocket 实现数据实时推送原理
WebSocket 实现数据实时推送的核心机制在于其全双工通信能力和持久的连接特性。以下是其工作原理的详细步骤: 1. 握手阶段(HTTP 升级协议) 客户端发起请求:通过发送一个带有特殊头部的 HTTP 请求,请求协议升级。 GET …...
LeetCode 2919 使数组变美的最小增量运算数
动态规划解题:最小操作次数使数组变为美丽数组 问题描述 给定一个下标从0开始、长度为n的整数数组nums和一个整数k。你可以对数组中的任意一个元素进行加1操作,操作次数不限。如果数组中任意长度大于或等于3的子数组的最大值都大于或等于k,…...
[Web 安全] Web 信息收集 —— 信息收集流程
🌟 想系统化学习 Web 渗透?看看这个:[Web 安全] Web 安全攻防 学习手册 提示:本章不涉及任何具体信息收集技术,仅仅是讲解收集这些信息我能干啥,以及如何才能比较全面的收集信息。 0x01:信息收…...
内部聊天软件,BeeWorks-安全的企业内部通讯软件
企业在享受数据便利的同时,如何保障企业数据安全已经成为无法回避的重要课题。BeeWorks作为一款专为企业设计的内部通讯软件,通过全链路的安全能力升维,为企业提供了一个安全、高效、便捷的沟通协作平台,全面保障企业数据安全。 …...
线程安全学习
1 什么是线程 线程是cpu调度的最小单位,在Linux 下 实现线程的方式为轻量级进程,复用进程的结构体,使用clone函数创建 2 线程安全 所谓线程安全,更确切的应该描述为内存安全 #include <stdio.h> #include <pthread.h…...
应用篇02-镜头标定(上)
本节主要介绍相机的标定方法,包括其内、外参数的求解,以及如何使用HALCON标定助手实现标定。 计算机视觉——相机标定(Camera Calibration)_摄像机标定-CSDN博客 1. 原理 本节介绍与相机标定相关的理论知识,不一定全,可以参考相…...
【UE5 C++】“ProceduralMeshComponent”的使用记录
效果 如下所示,通过“ProceduralMeshComponent”创建了一个自定义形状的Mesh,并且该Mesh包含碰撞信息,然后2s后更新Mesh形状。 步骤 1. 在“xxx.Build.cs”中引入“ProceduralMeshComponent”模块 2. 新建一个Actor类,这里命名为…...
解决PIP 安装出错ERROR: cp310-cp310-manylinux_2_28_x86_64.whl is not a supported wheel
ERROR: torch-2.8.0.dev20250325cu128-cp310-cp310-manylinux_2_28_x86_64.whl is not a supported wheel on this platform. 可以 pip debug --verbose | grep manylinux | grep cp310 WARNING: This command is only meant for debugging. Do not use this with automation f…...
通过helm在k8s中安装mysql 8.0.37
使用 Helm 在 Kubernetes 中安装 MySQL 8.0.37 是一个相对简单的过程。以下是详细步骤: 下载helm包 #添加 Helm 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami#搜索mysql helm search repo mysql --versions NAME CHAR…...
【暴力求解】1534. 统计好三元组
1534. 统计好三元组 - 力扣(LeetCode) 给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。 如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。 0 < i < j &l…...
前端页面效果收集
文章目录 数字雨元素融化动画电子签名共享屏幕 数字雨 <canvas id"matrix"></canvas> <script>const canvas document.getElementById(matrix);const ctx canvas.getContext(2d);canvas.width window.innerWidth;canvas.height window.innerH…...
(leetcode算法题)309. 买卖股票的最佳时机含冷冻期
按照题目要求,研究对象是最后一天结束后获得的最大利润 那么就可以把问题拆分成 第 1 天结束后获得的最大利润, 第 2 天结束后获得的最大利润, 第 i 天结束后获得的最大利润, 由于规则中强调不能同时参与多笔交易,…...
Chrome漏洞可窃取数据并获得未经授权的访问权限
在发现两个关键漏洞后,谷歌发布了Chrome浏览器的紧急安全更新。这些漏洞可能允许攻击者窃取敏感数据并未经授权访问用户系统。 这些缺陷被识别为CVE-2025-3619和CVE-2025-3620,在Windows和Mac的135.0.7049.95/.96之前影响Chrome版本,影响Linux的135.0.7049.95/.96。该更新将在…...
