机器学习第二十七讲:Kaggle → 参加机器学习界的奥林匹克
资料取自《零基础学机器学习》。
查看总目录:学习大纲
关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:超详细手把手指南
Kaggle详解:超市销量预测竞赛全流程解析1
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]
关键特征矩阵:
特征 | 处理方式 | 章节引用 |
---|---|---|
温度 | 标准化处理2 | 第四章第二节 |
是否节假日 | 二进制编码3 | 第四章第四节 |
历史销量 | 滑动窗口平均值4 | 第四章第三节 |
促销活动 | 直接保留原始值5 | 第五章第一节 |
二、特征烹饪(第四章)
销量数据加工流水线:
温度标准化:
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() sales_data['温度'] = scaler.fit_transform(sales_data[['温度']]) # [^4-1]
节假日编码:
# 将"春节/国庆"转为1,平常日转为0 sales_data['节日'] = sales_data['节日'].apply(lambda x: 1 if x != '无' else 0) # [^4-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.5 | 0.8s | 第五章第一节6 |
决策树 | 18.7 | 1.2s | 第五章第三节7 |
随机森林 | 15.3 | 3.5s | 第七章第一节8 |
四、结果优化(第八章)
三级提升方法:
添加周末特征:
sales_data['周末'] = sales_data['日期'].dt.weekday.apply(lambda x: 1 if x >=5 else 0)
网格搜索调参:
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)
正则化处理:
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四大法宝:
新手避坑指南:
特征增强示例:
原始特征 | 增强方法 | 效果提升 |
---|---|---|
日期 | 提取"月份"和"周数" | +3% |
温度 | 添加"温差"特征 | +2.5% |
历史销量 | 计算7日移动平均 | +4% |
目录:总目录
上篇文章:机器学习第二十六讲:官方示例 → 跟着菜谱学做经典菜肴
11《零基础学机器学习》第二章数据分析
2《零基础学机器学习》第四章标准化
3《零基础学机器学习》第四章编码处理
4《零基础学机器学习》第四章特征工程
6《零基础学机器学习》第五章线性回归
7《零基础学机器学习》第五章树模型
8《零基础学机器学习》第七章工具使用
10《零基础学机器学习》第八章评估指标
9《零基础学机器学习》第八章交叉验证
12《零基础学机器学习》第八章参数调优
13《零基础学机器学习》第八章正则化
1《零基础学机器学习》第十竞赛指导
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。