首页 > 其他分享 >Datawhale AI 夏令营 task2

Datawhale AI 夏令营 task2

时间:2024-07-17 11:09:53浏览次数:7  
标签:task2 target AI 数据 Datawhale df train test data

Task1 的baseline我们是基于经验模型(使用均值作为结果数据)来解决的问题,Task2 版本教程将使用机器学习模型解决本次问题,模型使用简单,数据不需要过多预处理;

使用机器学习方法一般主要需要从 获取数据&增强、特征提取和模型 三个方面下手。

一般的使用机器学习模型解决问题的主要步骤为探索性数据分析、数据预处理、提取特征、切分训练集与验证集、训练模型、预测结果。

一、代码详解
1、导入模块
import numpy as np
import pandas as pd
import lightgbm as lgb
from sklearn.metrics import mean_squared_log_error, mean_absolute_error, mean_squared_error
import tqdm
import sys
import os
import gc
import argparse
import warnings
warnings.filterwarnings('ignore')
2、探索性数据分析
在数据准备阶段,主要读取训练数据和测试数据,并进行基本的数据展示。

train = pd.read_csv('./data/train.csv')
test = pd.read_csv('./data/test.csv')
数据简单介绍:其中id为房屋id,dt为日标识,训练数据dt最小为11,不同id对应序列长度不同;type为房屋类型,通常而言不同类型的房屋整体消耗存在比较大的差异;target为实际电力消耗,也是我们的本次比赛的预测目标。

不同type类型对应target的柱状图

import matplotlib.pyplot as plt
# 不同type类型对应target的柱状图
type_target_df = train.groupby('type')['target'].mean().reset_index()
plt.figure(figsize=(8, 4))
plt.bar(type_target_df['type'], type_target_df['target'], color=['blue', 'green'])
plt.xlabel('Type')
plt.ylabel('Average Target Value')
plt.title('Bar Chart of Target by Type')
plt.show()


3、特征工程
这里主要构建了历史平移特征和窗口统计特征;每种特征都是有理可据的,具体说明如下:

历史平移特征:通过历史平移获取上个阶段的信息;如下图所示,可以将d-1时间的信息给到d时间,d时间信息给到d+1时间,这样就实现了平移一个单位的特征构建。

 

窗口统计特征:窗口统计可以构建不同的窗口大小,然后基于窗口范围进统计均值、最大值、最小值、中位数、方差的信息,可以反映最近阶段数据的变化情况。如下图所示,可以将d时刻之前的三个时间单位的信息进行统计构建特征给到d时刻。

 

完整代码如下:

# 合并训练数据和测试数据,并进行排序
data = pd.concat([test, train], axis=0, ignore_index=True)
data = data.sort_values(['id','dt'], ascending=False).reset_index(drop=True)

# 历史平移
for i in range(10,30):
data[f'last{i}_target'] = data.groupby(['id'])['target'].shift(i)

# 窗口统计
data[f'win3_mean_target'] = (data['last10_target'] + data['last11_target'] + data['last12_target']) / 3

# 进行数据切分
train = data[data.target.notnull()].reset_index(drop=True)
test = data[data.target.isnull()].reset_index(drop=True)

# 确定输入特征
train_cols = [f for f in data.columns if f not in ['id','target']]

4、模型训练&测试集预测
这里选择使用Lightgbm模型,也是通常作为数据挖掘比赛的基线模型,在不需要过程调参的情况的也能得到比较稳定的分数。另外需要注意的训练集和验证集的构建,因为数据存在时序关系,所以需要严格按照时序进行切分,这里选择原始给出训练数据集中dt为30之后的数据作为训练数据,之前的数据作为验证数据,这样保证了数据不存在穿越问题(不使用未来数据预测历史数据)。

def time_model(lgb, train_df, test_df, cols):
# 训练集和验证集切分
trn_x, trn_y = train_df[train_df.dt>=31][cols], train_df[train_df.dt>=31]['target']
val_x, val_y = train_df[train_df.dt<=30][cols], train_df[train_df.dt<=30]['target']
# 构建模型输入数据
train_matrix = lgb.Dataset(trn_x, label=trn_y)
valid_matrix = lgb.Dataset(val_x, label=val_y)
# lightgbm参数
lgb_params = {
'boosting_type': 'gbdt',
'objective': 'regression',
'metric': 'mse',
'min_child_weight': 5,
'num_leaves': 2 ** 5,
'lambda_l2': 10,
'feature_fraction': 0.8,
'bagging_fraction': 0.8,
'bagging_freq': 4,
'learning_rate': 0.05,
'seed': 2024,
'nthread' : 16,
'verbose' : -1,
}
# 训练模型
model = lgb.train(lgb_params, train_matrix, 50000, valid_sets=[train_matrix, valid_matrix],
categorical_feature=[], verbose_eval=500, early_stopping_rounds=500)
# 验证集和测试集结果预测
val_pred = model.predict(val_x, num_iteration=model.best_iteration)
test_pred = model.predict(test_df[cols], num_iteration=model.best_iteration)
# 离线分数评估
score = mean_squared_error(val_pred, val_y)
print(score)

return val_pred, test_pred

lgb_oof, lgb_test = time_model(lgb, train, test, train_cols)

# 保存结果文件到本地
test['target'] = lgb_test
test[['id','dt','target']].to_csv('submit.csv', index=None)

最开始将Datawhale学习指南中Task2中的代码拷贝下来,运行后发现出现报错:

 

根据文章:lightGBM训练时报错:TypeError: train() got an unexpected keyword argument ‘verbose_eval‘_typeerror: fuse() got an unexpected keyword argume-CSDN博客指示重新安装特定版本lightgbm,成功解决问题。

二、知识补充
特征工程是什么&为什么要构建特征工程
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。由此可见,特征工程在机器学习中占有相当重要的地位。在实际应用当中,可以说特征工程是机器学习成功的关键。

特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。

 

通过特征提取,我们能得到未经处理的特征。本处使用的为时间序列特征构造。

时间序列不仅包含一维时间变量,还有一维其他变量,如股票价格、天气温度、降雨量、订单量等。时间序列分析的主要目的是基于历史数据来预测未来信息。对于时间序列,我们关心的是长期的变动趋势、周期性的变动(如季节性变动)以及不规则的变动。

本处使用的两种特征构建方式均为时间序列历史特征。

Lightgbm模型
(Light Gradient Boosting Machine)是一款基于决策树算法的分布式梯度提升框架。为了满足工业界缩短模型计算时间的需求,LightGBM的设计思路主要是两点:
减小数据对内存的使用,保证单个机器在不牺牲速度的情况下,尽可能地用上更多的数据;
减小通信的代价,提升多机并行时的效率,实现在计算上的线性加速。
由此可见,LightGBM的设计初衷就是提供一个快速高效、低内存占用、高准确度、支持并行和大规模数据处理的数据科学工具。
LightGBM是微软旗下的Distributed Machine Learning Toolkit (DMKT)的一个项目,由2014年首届阿里巴巴大数据竞赛获胜者之一柯国霖主持开发。虽然其开源时间才仅仅2个月,但是其快速高效的特点已经在数据科学竞赛中崭露头角。Allstate Claims Severity竞赛中的冠军解决方案里就使用了LightGBM,并对其大嘉赞赏。

通俗解释:LGBM的优化方法是,在保留大梯度样本的同时,随机地保留一些小梯度样本,同时放大了小梯度样本带来的信息增益。

流程: 首先把样本按照梯度排序,选出梯度最大的a%个样本,然后在剩下小梯度数据中随机选取b%个样本,在计算信息增益的时候,将选出来b%个小梯度样本的信息增益扩大 1 - a / b 倍。这样就会避免对于数据分布的改变。

LightGBM实现:
gbdt:梯度提升决策树,串行速度慢,容易过拟合;

rf:随机森林,并行速度快;

dart:训练较慢;

goss:容易过拟合。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/asphysiaa/article/details/140412733

标签:task2,target,AI,数据,Datawhale,df,train,test,data
From: https://www.cnblogs.com/a1b2c3d4e5f6/p/18306879

相关文章

  • 2024年睿抗机器人开发者大赛(RAICOM)CAIP-编程技能赛-本科组省赛
    本人分数:10+15+17+1+30=73 九百多名次,等公布得奖结果之后再贴出来代码情况:前二十分钟进不去,炸掉了,官方补时20minRC-u1热҈热҈热҈ 分数10热҈热҈热҈……最近热得打的字都出汗了!幸好某连锁餐厅开启了气温大于等于35度即可获得一杯免费雪碧的活动。但不知为何,在......
  • MarkText A simple and elegant markdown editor, available for Linux, macOS and Wi
    1、这个工具挺不错的,先上一张图,来自github页面截图:2、这个工具是开源的项目,开源地址:https://github.com/marktext官网地址:www.marktext.cc/三个平台都有:可以直接点上面的按钮,找到自己所用电脑的平台,就可以下载。也可以转到Githubreleasepage下载。3、安装:点击【安......
  • VMware Cloud Director Availability 4.7.2 | 灾难恢复和迁移 | DRaaS
    VMwareCloudDirectorAvailability4.7.2|灾难恢复和迁移|DRaaSOnboarding&DisasterRecoveryServices请访问原文链接:https://sysin.org/blog/vmware-cloud-director-availability-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgVMwareCloudDirectorA......
  • 从黑格尔《精神现象学》的视角去看待AI时代的来临(二)
    黑格尔的《精神现象学》是一部描绘意识进化的哲学巨著,展示了意识从感性确定性到绝对知识的过程。这一进程通过对自我和世界的反思与否定,逐步提升认知水平。借助黑格尔的哲学框架,我们可以对AI时代的来临进行深刻分析,从感性阶段到高级的精神阶段,逐步探讨AI技术在各个层面的发展及......
  • 第四期 AI 编程
    目标如何用AI辅助编程,提升工作效率如何用AI快速应用和学习新技术,扩展职业边界通过AI编程,洞察AI对各个行业的影响趋势产品与技术的联通+业务视角=AI全栈工程师AI编程使用AI编程(编程目前是大模型能力最强的垂直领域),除了解决编程问题以外,更重要是建立AI意......
  • 无人驾驶的未来:AI如何重塑我们的出行世界
      无人驾驶汽车,作为人工智能(AI)技术的集大成者,正以前所未有的速度改变着我们的出行方式。从机器学习到计算机视觉,再到人工智能生成内容(AIGC),AI技术的每一次进步都在为无人驾驶汽车的未来发展铺平道路。本文将深入探讨AI如何赋能无人驾驶,以及特斯拉与百度“萝卜快跑”如何在......
  • 1 关于Tailwind CSS
    1关于TailwindCSSTailwindCSS是一个高度可定制的CSS框架,采用实用工具优先的方式,允许开发人员直接在HTML中应用样式。与传统的CSS框架不同,Tailwind提供的是一组预定义的CSS类,用户可以通过组合这些类快速构建现代化的响应式网页实用工具优先Tailwind提供大量的小......
  • Chain-of-Thought Prompting
    Chain-of-ThoughtPromptinghttps://www.promptingguide.ai/zh/techniques/cot#%E9%9B%B6%E6%A0%B7%E6%9C%AC-cot-%E6%8F%90%E7%A4%BA链式思考(CoT)提示图片来源:Wei等人(2022)在Wei等人(2022)中引入的链式思考(CoT)提示通过中间推理步骤实现了复杂的推理能力。您可以将其与少样本......
  • 2024 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)
    2024睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)RC-u1热҈热҈热҈#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn,w;cin>>n>>w;intans1=......
  • AI发展下的伦理挑战的应对之法
            人工智能飞速发展的同时,也逐渐暴露出侵犯数据隐私、制造“信息茧房”等种种伦理风险。随着AI技术在社会各个领域的广泛应用,关于AI伦理和隐私保护问题日趋凸显。尽管国外已出台系列法规来规范AI的使用,保护个人隐私和数据安全,但如用户被区别对待的“大数据杀熟”......