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

机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克

机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克

资料取自《零基础学机器学习》。
查看总目录:学习大纲

关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南


Kaggle详解:超市销量预测竞赛全流程解析[^10-2]

Kaggle竞赛的权威性

  • 全球影响力:Kaggle是全球最大的数据科学社区和竞赛平台,拥有超过1200万开发者、学者及企业团队。其竞赛吸引了全球各地的数据科学家和机器学习爱好者,参赛者来自不同的国家和地区,具有广泛的国际影响力。
  • 行业认可度:Kaggle竞赛在数据科学和机器学习领域具有极高的认可度,其竞赛结果和参赛者的表现受到业界和学术界的广泛关注。许多知名科技公司,如Google、Facebook、Microsoft等,都在Kaggle上举办过数据挖掘比赛,这进一步提升了Kaggle竞赛的权威性和影响力。

以"超市月度销量预测"竞赛为例,结合买菜、会员日促销等生活场景,展示完整Kaggle参赛流程:

报名竞赛
下载数据
分析销售规律
处理节假日数据
训练预测模型
提交结果
优化模型
一、数据初探(第三章)

销售数据分析四步法

import pandas as pd
import matplotlib.pyplot as plt# 读取数据(类似查看超市进货记录)
sales_data = pd.read_csv('/kaggle/input/supermarket-sales/sales.csv')  # [^7-1]# 可视化分析(发现周末销量激增)
plt.plot(sales_data['日期'], sales_data['销量'])  # 每周六出现波峰 [^2-2]

关键特征矩阵

特征处理方式章节引用
温度标准化处理[^4-1]第四章第二节
是否节假日二进制编码[^4-3]第四章第四节
历史销量滑动窗口平均值[^4章]第四章第三节
促销活动直接保留原始值[^5章]第五章第一节
二、特征烹饪(第四章)

销量数据加工流水线

温度标准化
节假日编码
创建周累计销量
添加天气影响
  1. 温度标准化

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    sales_data['温度'] = scaler.fit_transform(sales_data[['温度']])  # [^4-1]
    
  2. 节假日编码

    # 将"春节/国庆"转为1,平常日转为0
    sales_data['节日'] = sales_data['节日'].apply(lambda x: 1 if x != '无' else 0)  # [^4-3]
    
  3. 创建历史特征

    # 计算前3天平均销量(类似观察近期趋势)
    sales_data['3日平均'] = sales_data['销量'].rolling(window=3).mean()  # [^4章]
    
三、模型训练(第五章)

多模型对比策略

基础模型
线性回归
决策树
模型融合

代码实现

from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import cross_val_score  # [^8-2]# 线性回归训练(类似画销售趋势线)
lr = LinearRegression()
print(cross_val_score(lr, X, y, cv=5).mean())  # 交叉验证[^8-2]# 决策树训练(类似多条件判断)
tree = DecisionTreeRegressor(max_depth=5)
tree.fit(train_X, train_y)  # [^5-2]

模型对比表

模型MAE误差训练时间章节知识点
线性回归23.50.8s第五章第一节[^5-1]
决策树18.71.2s第五章第三节[^5-2]
随机森林15.33.5s第七章第一节[^7-1]
四、结果优化(第八章)

三级提升方法

  1. 添加周末特征

    sales_data['周末'] = sales_data['日期'].dt.weekday.apply(lambda x: 1 if x >=5 else 0)
    
  2. 网格搜索调参

    from sklearn.model_selection import GridSearchCV
    params = {'max_depth': [3,5,7], 'min_samples_split': [2,5]}  # [^8-3]
    grid = GridSearchCV(tree, params, cv=5)
    
  3. 正则化处理

    from sklearn.linear_model import Ridge
    ridge = Ridge(alpha=0.5)  # 控制模型复杂度[^8-4]
    
五、完整参赛示例
# 超市销量预测完整流程(含数据预处理、建模、提交)
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import OneHotEncoder# 数据读取(相当于拿到进货记录)
train = pd.read_csv('/kaggle/input/supermarket-sales/train.csv')
test = pd.read_csv('/kaggle/input/supermarket-sales/test.csv')# 处理天气数据(晴天=1,雨天=0)
weather_mapping = {'晴':1, '雨':0}
train['天气'] = train['天气'].map(weather_mapping)  # [^4-3]# 添加温度影响分档
train['温度区间'] = pd.cut(train['温度'], bins=5, labels=False)  # [^4章]# 选择关键特征
features = ['温度', '节日', '周末', '促销活动']
X = train[features]
y = train['销量']# 训练随机森林(类似综合多个店员经验)
model = RandomForestRegressor(n_estimators=200)  # [^5-2]
model.fit(X, y)# 生成提交文件
test_pred = model.predict(test[features])
submission = pd.DataFrame({'ID': test['ID'], '销量': test_pred})
submission.to_csv('submission.csv', index=False)  # [^10-2]
六、竞赛进阶技巧

Kaggle四大法宝

40% 30% 20% 10% 重要技术分布 特征工程 模型集成 参数调优 数据分析

新手避坑指南

  1. 避免数据泄露 → 不要用未来数据预测过去(如用全量数据计算均值)[^8-2]
  2. 理解评估指标 → 选择MAE还是RMSE影响优化方向[^8-1]
  3. 学习优秀方案 → 在Kaggle的Kernel区查看金牌解法[^10-2]

特征增强示例

原始特征增强方法效果提升
日期提取"月份"和"周数"+3%
温度添加"温差"特征+2.5%
历史销量计算7日移动平均+4%

目录:总目录
上篇文章:机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴


[^2-2]《零基础学机器学习》第二章数据分析
[^4-1]《零基础学机器学习》第四章标准化
[^4-3]《零基础学机器学习》第四章编码处理
[^4章]《零基础学机器学习》第四章特征工程
[^5-1]《零基础学机器学习》第五章线性回归
[^5-2]《零基础学机器学习》第五章树模型
[^7-1]《零基础学机器学习》第七章工具使用
[^8-1]《零基础学机器学习》第八章评估指标
[^8-2]《零基础学机器学习》第八章交叉验证
[^8-3]《零基础学机器学习》第八章参数调优
[^8-4]《零基础学机器学习》第八章正则化
[^10-2]《零基础学机器学习》第十竞赛指导

http://www.xdnf.cn/news/8605.html

相关文章:

  • 大数据治理:理论、实践与未来展望(一)
  • Next.js项目创建(chapter 1)
  • 关于vector、queue、list哪边是front、哪边是back,增加、删除元素操作
  • 黑马Java基础笔记-15
  • C++ 实现二叉树的后序遍历与中序遍历构建及层次遍历输出
  • 吃透C++ for循环:框架+例题
  • 理解 Redis 事务-20 (MULTI、EXEC、DISCARD)
  • c/c++的opencv像素级操作二值化
  • 开发者工具箱-鸿蒙IPv6子网计算器开发笔记
  • .NET外挂系列:8. harmony 的IL编织 Transpiler
  • 如何通过EventChannel实现Flutter与原生平台的双向通信?
  • C++ 输入输出流示例代码剖析
  • 每日c/c++题 备战蓝桥杯(洛谷P1873 EKO砍树问题详解)
  • 几个MySQL系统调优工具
  • 黑马点评--基于Redis实现共享session登录
  • 《关于浔川社团退出DevPress社区及内容撤回的声明》
  • [C++面试] 基础题 11~20
  • 怎样改变中断优先级?
  • 酷柚易汛ERP仓储物流解决方案
  • CodeBuddy实现pdf批量加密
  • SQL注入基础
  • vue+threeJs 创造镂空管状
  • 配置tomcat时,无法部署工件该怎么办?
  • 深度学习损失“三位一体”——从 Fisher 的最大似然到 Shannon 的交叉熵再到 KL 散度,并走进 PET·P-Tuning微调·知识蒸馏的实战
  • Selenium自动化测试网页加载太慢如何解决?
  • 基于netty实现视频流式传输和多线程传输
  • 大模型的上下文context到底是啥
  • 环境搭建与工具配置
  • 博客打卡-八皇后问题
  • 用go从零构建写一个RPC(3)--异步调用+多路复用实现