首页 > 其他分享 >DatawhaleAI夏令营 机器学习方向 学习笔记

DatawhaleAI夏令营 机器学习方向 学习笔记

时间:2024-07-20 16:20:51浏览次数:10  
标签:plt target df 学习 train import data 夏令营 DatawhaleAI

电力需求预测挑战赛

理解赛题

【训练时序预测模型助力电力需求预测

赛题任务

给定多个房屋对应电力消耗历史N天的相关序列数据等信息,预测房屋对应电力的消耗。

赛题数据

赛题数据由训练集和测试集组成,为了保证比赛的公平性,将每日日期进行脱敏,用1-N进行标识。
即1为数据集最近一天,其中1-10为测试集数据。
数据集由字段id(房屋id)、 dt(日标识)、type(房屋类型)、target(实际电力消耗)组成。

注意时间穿越问题,不要用未来的数据预测过去

优化思路

0.特征优化
1.窗口从三个变成7,10个
2.除了均值,还有最值,中位数,方差
3.差分统计,增大减小的趋势
4.K值交叉验证(可能出现穿越问题)
5.模型融合

baseline代码

学习文件的输入与输出

# 1. 导入需要用到的相关库
# 导入 pandas 库,用于数据处理和分析
import pandas as pd
# 导入 numpy 库,用于科学计算和多维数组操作
import numpy as np

# 2. 读取训练集和测试集
# 使用 read_csv() 函数从文件中读取训练集数据,文件名为 'train.csv'
train = pd.read_csv('./data/train.csv')
# 使用 read_csv() 函数从文件中读取测试集数据,文件名为 'train.csv'
test = pd.read_csv('./data/test.csv')

# 3. 计算训练数据最近11-20单位时间内对应id的目标均值
target_mean = train[train['dt']<=20].groupby(['id'])['target'].mean().reset_index()

# 4. 将target_mean作为测试集结果进行合并
test = test.merge(target_mean, on=['id'], how='left')

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

task02代码-lightgbm

1.数据可视化
2.在代码加入print语句,作为断点,便于调试

#安装lightgbm
 !pip install lightgbm==3.3.0
 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')

# 读取训练数据和测试数据
 train = pd.read_csv('./data/data283931/train.csv')
 test = pd.read_csv('./data/data283931/test.csv')

 # 不同type类型对应target的柱状图
 import matplotlib.pyplot as plt
 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()

 print("0Look me!!!!!")

# id为00037f39cf的按dt为序列关于target的折线图
 specific_id_df = train[train['id'] == '00037f39cf']
 plt.figure(figsize=(10, 5))
 plt.plot(specific_id_df['dt'], specific_id_df['target'], marker='o', 
linestyle='-')
 plt.xlabel('DateTime')
 plt.ylabel('Target Value')
 plt.title("Line Chart of Target for ID '00037f39cf'")
 plt.show()

 print("1Look me!!!!!")

 # 合并训练数据和测试数据,并进⾏排序
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_sum_target'] = 0
 for i in range(10,30):
  data[f'win3_sum_target'] += data[f'last{i}_target']
 data[f'win3_mean_target'] = data[f'win3_sum_target'] / 20.0

# 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']]



 print("2Look me!!!!!")

#############
 def time_model(lgb, train_df, test_df, cols): 
 # 训练集和验证集切分
     print("3Look me!!!!!")
     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']
     # 构建模型输⼊数据
     print("4Look me!!!!!")
     train_matrix = lgb.Dataset(trn_x, label=trn_y)
     valid_matrix = lgb.Dataset(val_x, label=val_y)
     # lightgbm参数
     print("5Look me!!!!!")
     lgb_params = {
      'boosting_type': 'gbdt',
      'objective': 'regression',
      'metric': 'mse',
      'min_child_weight': 5,
      #'max_depth' : 25,
      'num_leaves': 2 ** 4 + 2 ** 3,
      # 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,
      }
     print("5.1Look me!!!!!")
     # 训练模型

     model = lgb.train(lgb_params, train_matrix, 50000, valid_sets=
     [train_matrix, valid_matrix], categorical_feature=[], verbose_eval=500, early_stopping_rounds=500)
     print("5.2Look me!!!!!")
    # 验证集和测试集结果预测
     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)
     print("6Look me!!!!!")
     return val_pred, test_pred
     print("7Look me!!!!!")
 print("8Look me!!!!!")
 lgb_oof, lgb_test = time_model(lgb, train, test, train_cols)
     


 print("9Look me!!!!!")




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

标签:plt,target,df,学习,train,import,data,夏令营,DatawhaleAI
From: https://www.cnblogs.com/kkkrran/p/18313253

相关文章

  • TASK 3 Datawhale AI 夏令营
    \(transformer\)解决任务1.特点摒弃了循环结构,通过自注意力机制衡量上下文单词的重要程度说人话就是联系前后单词对于该单词的影响来完成本单词的翻译2.运行逻辑在运行前,由于摒弃了循环结构,我们需要在词语中嵌入位置编码来构建单词的向量表示,模型利用每个词语的位置与维度构......
  • 强化学习入门
    原文:https://blog.csdn.net/v_JULY_v/article/details/128965854目录强化学习极简入门:通俗理解MDP、DPMCTC和Q学习、策略梯度、PPO第一部分RL基础:什么是RL与MRP、MDP1.1入门强化学习所需掌握的基本概念1.1.1什么是强化学习:依据策略执行动作-感知状态-得到奖励1.1.2RL与监督......
  • java学习进度
    7.14(1)三元运算符格式:关系表达式?表达式1:表达式2;运行顺序:判断关系表达式是否为true,是则运行表达式1,否则运行表达式2代码示例://比较大小importjava.util.Scanner;publicclassSanyuan{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Syste......
  • STM32学习(2)-GPIO输出
    GPIO输出2.1GPIO输出1.GPIO简介2.GPIO基本结构3.GPIO位结构4.GPIO模式5.硬件电路2.2LED闪烁&LED流水灯&蜂鸣器1.LED闪烁main函数代码2.LED流水灯3.蜂鸣器2.1GPIO输出1.GPIO简介GPIO(GeneralPurposeInputOutput)通用输入输出口可配置为8种输入输出模式引脚电......
  • 【Python爬虫学习】7个好玩有趣的爬虫教程!(附源码)
    本文介绍了7个Python爬虫小案例,包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息,帮助读者理解并实践Python爬虫基础知识。在文章开始之前先给大家简单介绍一下python爬虫1.什么是爬虫?简单介绍爬虫爬虫的......
  • 学生Java学习路程-3
    ok,到了一周一次的总结时刻,我大致会有下面几个方面的论述:1.这周学习了Java的那些东西2.这周遇到了什么苦难3.未来是否需要改进方法等几个方面阐述我的学习路程。这周首先就是进行了for循环跟while的一些练习,主要学习的方面在Scanner的学习,这是网上以及网课建议新手用的输入形式,以......
  • 学习笔记——路由
    文章目录VueRouter介绍作用说明路由配置VueRouter的使用步骤(5+2)五个基础步骤(固定)两个核心步骤router-link介绍使用好处声明式导航-两个类名介绍特点自定义高亮类名声明式导航-跳转传参介绍查询参数传递语法对应页面组件接收传递过来的值基于参数发请求动态路由传参......
  • C基础(学习)2024.7.19
             Linux基本命令,vi编译器的使用,简单的编程步骤,程序语言,gcc编译器编译过程,进制转换相关知识可以查看文档http://t.csdnimg.cn/CmqhC        数值表示,词法符号,变量,常量相关知识可以查看文档http://t.csdnimg.cn/jJIe2        运算符和输表达式......
  • Java计算机毕业设计老年教育学习系统(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球人口老龄化的加速,老年教育作为提升老年人生活质量、促进终身学习的重要途径,日益受到社会各界的关注。然而,传统教育模式在满足老年人多样化、......
  • 苍穹外卖学习笔记——第十一天
    数据统计(图形报表)ApacheEChartsApacheECharts是一款基于Javascript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。官网地址:https://echarts.apache.org/zh/index.html。使用Echarts,重点在于研究当前图表所需的数据格式。通常是需要后端提供符合格式......