DataWhale AI夏令营——机器学习

这篇具有很好参考价值的文章主要介绍了DataWhale AI夏令营——机器学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习记录一

锂电池电池生产参数调控及生产温度预测挑战赛

已配置环境,跑通baseline,并在此基础上对数据进行了简单的分析。

1. 异常值分析

对训练集中的缺失值和异常值进行分析

train_data.info()  
train_data.describe()

观察到数据中不存在缺失值,存在异常值train_dataset['下部温度9'] == -32768.000000]。删除该缺失值。

train_dataset.drop(train_dataset[train_dataset['下部温度9'] == -32768.000000].index).reset_index(drop=True)

2. 单变量箱线图可视化

对训练集和测试集中的流量、上部设定温度和下部设定温度的数据分布进行了箱线图可视化
DataWhale AI夏令营——机器学习,人工智能,机器学习
观察到上部和下部温度设定数据中存在一些异常值,对应数据中2023/1/7、2023/1/8,2023/1/9 三日的数据。
DataWhale AI夏令营——机器学习,人工智能,机器学习


在Baseline(6.29551)基础上进行了两处改动:

  1. 删除了数据中存在的一处错误值(6.72811)
  2. 删除2023/1/7、2023/1/8,2023/1/9 三日的数据(6.73844)

DataWhale AI夏令营——机器学习,人工智能,机器学习


3. 特征重要性分析

接着尝试了分析对于单个预测变量的有效特征分析

  1. 计算相关性矩阵
df = pd.concat([X, y.iloc[:,0]], axis = 1) # X是处理后的训练数据,y是标签
corr_matrix = df.corr()
corr_matrix['上部温度1'].sort_values(ascending=False)
  1. 对于lightgbm的特征重要性
feature_importance = model.feature_importance()
sorted_features = sorted(zip(X.columns, feature_importance), key=lambda x: x[1], reverse=True)

# 打印按照feature_importance值降序排列的特征列表
for feature, importance in sorted_features:
    print(f"{feature}: {importance}")

相关性矩阵计算的是线性相关性,所以结果观察到和lightgbm的特征重要性的结果是有些不同的。

下一步打算在针对每个预测输出的结果构建衍生不同的特征并进行特征筛选。

学习记录2 (2023.07.27更新)

这几天主要是和Baseline的斗争,然后全部失败。从数据层面,特征工程,数据划分方式,后处理都做了尝试。

1. 数据层面

之前上一次发现的数据中存在缺失值(为0)和异常值,采用了查找筛选出然后改动。而最近通过可视化发现,几乎每个特征都存在异常值。尤其体现在流量特征中。

DataWhale AI夏令营——机器学习,人工智能,机器学习
上图是17个流量特征在训练数据中的折线图,可以看到还是有很大的波动。
DataWhale AI夏令营——机器学习,人工智能,机器学习
通过利用中位数进行滑动窗口滤波后得到的结果,其中红色曲线是测试集滤波后的结果。
滤波采用的代码:

def smooth_t(df, cols):
    df = df.copy()

    window_size = 5
    for col in cols:
        df[f'smoothed_{col}'] = df[col].rolling(window=window_size, center=True).median()
        outlier_threshold = 5.0
        df['absolute_diff'] = abs(df[col] - df[f'smoothed_{col}'])
        outliers = df['absolute_diff'] > outlier_threshold
        df.loc[outliers, col] = df.loc[outliers, f'smoothed_{col}']
        df.drop(columns=[f'smoothed_{col}', 'absolute_diff'], inplace=True)
    return df

结果:滤波后的数据在测试集上MAE并没有减少。

2. 特征工程

主要从三个方面进行:

  1. 流量特征:构造了一定时间范围内(一天中)的方差、均值和变异系数。其中变异系数表现较好,在树模型的特征重要性中得分高于原始的流量特征,但用该特征训练后在测试集上的表现并没有更好,该怎样保留和删除特征仍有些疑惑。
  2. 温度设定特征:这些特征在corr相关性中和target的线性相关性较强,但在树模型的特征重要性评价中表现很差,而且值比较平稳,不容易构建衍生特征。我尝试了构建成离散特征,分别用最多的n 个值代替所有值,同时用1,0,-1构建其前后的变化。但这些特征表现都很差。
  3. 接着尝试了使用全自动特征生成器openFE。效果也一般。
from openfe import OpenFE, transform, tree_to_formula

ofe = OpenFE()
features = ofe.fit(data = train_x, label = train_y, n_jobs=12) # n_jobs:指定CPU内核数
train_x_feature, test_dataset_feture = transform(train_x, test_x, features[:20], n_jobs = 12)

# 查看前20个高分特征
for feature in ofe.new_features_list[:20]:
    print(tree_to_formula(feature))

3. 数据划分方式

因为是时间序列数据,直接使用train_test_split有穿越,所以使用了针对时序数据的TimeSeriesSplit,效果很差,使用了KFold表现也不如train_test_split

4. 后处理

  1. Hillclimbing库 —— 用于模型融合
    找到的一个用于模型融合的库,但因为目前只用了lightgbm,所以还未尝试。
!pip install hillclimbers

from hillclimbers import climb, partial

def climb_hill(
    train=None, 
    oof_pred_df=None, 
    test_pred_df=None, 
    target=None, 
    objective=None, 
    eval_metric=None,
    negative_weights=False, 
    precision=0.01, 
    plot_hill=True, 
    plot_hist=False
) -> np.ndarray: # Returns test predictions resulting from hill climbing
  1. 后处理技巧
    发现的一个有意思的处理技巧,但在这个数据集上不适用,但借鉴这个思路我用来构建了温度设定特征的离散编码,虽然效果也很差。
# 1. 存储target唯一值
unique_targets = np.unique(trian['yield'])
# 2. 完成对训练和测试数据的预测
off_preds = model.prdict(X_val[features])
test_preds += model.predict(test[features]) / n_splits
# 四舍五入到最接近的唯一目标值
off_preds = [min(unique_targets, key = lambda x: abs(x-pred)) for pred in oof_preds]
test_preds = [min(unique_targets, key = lambda x: abs(x-pred)) for pred in test_preds]

学习记录3 (2023.07.30更新)

看了鱼佬的直播后收获颇丰,之前在特征筛选上花了很多工夫,后来才发现构造的特征量远远还达不到特征筛选的量。此外,在分数一直没有改进时,多从数据分析上入手。因此,这两天又仔细分析了一下数据,然后有了新的发现。

先统计了在训练集上从 2022-11-06 09:00:002023-03-01 04:00:00间每个小时数据的记录情况。
数据示例如下:

2022-11-06 09:00:00,40
2022-11-06 10:00:00,47
2022-11-06 11:00:00,46
2022-11-06 12:00:00,47
2022-11-06 13:00:00,47
2022-11-06 14:00:00,48
2022-11-06 15:00:00,47
......

DataWhale AI夏令营——机器学习,人工智能,机器学习
根据数据在每个小时的采样频率将训练集划分了五份。例如2022-11-72022-11-8的数据每小时采样了约48次,然后对数据用四步长再划分为4份,这样就得到了每小时约12次的采样。其余份的训练集进行类似的操作,使得整体的数据都保持每小时约12次采样。
DataWhale AI夏令营——机器学习,人工智能,机器学习
这样做的目的是因为,测试集全部维持着每小时11或12次的采样频率。
DataWhale AI夏令营——机器学习,人工智能,机器学习

经过这样的处理后,就实现了训练集和测试集上的相等的时间步长。方便后续构建时序特征。
此外,将训练集进行拆分后也有效的避免了空缺时间的影响。

另外,手动选取验证集保证验证集和测试集分布的一致性,使得线上线下更好的 拟合。

接着利用处理后的等时间步长的数据重新构建了之前尝试的时序相关特征。并采用baseline的方法进行的简单的验证。这次换了台速度快点的机器,最后MAE7.52,反而更差了,然后我又重跑了一遍baseline,发现这次baseline变成了8.51,之前baseline的得分还是6.29


总结:这两天的尝试在处理数据花费了太多时间,而且也不容易评估方案的好坏,感觉结果受到很多因素影响很不容易做到控制变量,整个编程过程也比较混乱,后面需要加强练习。从鱼佬直播中学习到的一些思路也还没来得及实践,之后利用最后几天再尝试一下。文章来源地址https://www.toymoban.com/news/detail-610252.html

到了这里,关于DataWhale AI夏令营——机器学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Datawhale AI夏令营 - 用户新增预测挑战赛 | 学习笔记

      如果将submit.csv提交到讯飞比赛页面,会有多少的分数? 代码中如何对udmp进行了人工的onehot? 1:0.62710 2:对umap列中的字典元素按键取值,初始为一个九维的向量,将字典中键对应的值覆盖到向量中的对应位置。   字段x1至x8为用户相关的属性,为匿名处理字段。添加代码

    2024年02月10日
    浏览(25)
  • 【Datawhale夏令营】任务二学习笔记

    目录 一:python语法回顾 1.1  print() 1.2  列表与字典 1.3自定义函数与return 1.4火车类(面向对象)  实例化总结: 二:LightGBM 代码精读 2.1导入库 2.2数据准备与参数设置  2.3时间特征函数   2.4优化  2.5训练与预测 三:优化讲解 3.1: 3.2优化建议: 一:python语法回顾 1.1  print

    2024年02月14日
    浏览(37)
  • 【Datawhale AI 夏令营第二期】AI 量化模型预测挑战赛

    量化金融在国外已经有数十年的历程,而在国内兴起还不到十年。这是一个极具挑战的领域。量化金融结合了数理统计、金融理论、社会学、心理学等多学科的精华,同时特别注重实践。由于市场博弈参与个体的差异性和群体效应的复杂性,量化金融极具挑战与重大的机遇的

    2024年02月14日
    浏览(32)
  • Datawhale-AI夏令营:脑PET图像分析和疾病预测挑战赛baseline解读

    这段代码是一个完整的深度学习模型训练和预测的流程。下面我会逐步解释每个步骤的作用。 首先,这段代码导入了必要的库,包括PyTorch、numpy、pandas等。接着,打印出CUDA版本和是否可用GPU,并将模型部署到GPU上(如果可用)。 接下来是数据预处理的部分。通过glob.glob函数

    2024年02月16日
    浏览(24)
  • AI夏令营第三期用户新增挑战赛学习笔记

    通过pd库的df.info()方法查看数据框属性,发现只有udmap字段为类别类型,其余皆为数值类型。 相关性热力图颜色越深代表相关性越强,所以x7和x8变量之间的关系更加密切,还有common_ts与x6也是。即存在很强的多重共线性,进行特征工程时可以考虑剔除二者中的一个变量,以免

    2024年02月11日
    浏览(24)
  • DatawhaleAI夏令营第三期机器学习用户新增预测挑战赛baseline新手教程

    本教程会带领大家项目制学习,由浅入深,逐渐进阶。从竞赛通用流程与跑通最简的Baseline,到深入各个竞赛环节,精读Baseline与进阶实践技巧的学习。 千里之行,始于足下,从这里,开启你的 AI 学习之旅吧! —— Datawhale贡献者团队 用户新增预测挑战赛: https://challenge.xf

    2024年02月12日
    浏览(31)
  • AI夏令营笔记——任务2

    任务要求与任务1一样: 从论文标题、摘要作者等信息,判断该论文是否属于医学领域的文献。 可以将任务看作是一个文本二分类任务。机器需要根据对论文摘要等信息的理解,将论文划分为医学领域的文献和非医学领域的文献两个类别之一。 使用预训练的大语言模型进行建

    2024年02月11日
    浏览(23)
  • acm夏令营课后题(持续更新)

                                            米有程序题就懒得写哩           acm夏令营贪心算法选题_李卓航哇哇咔~的博客-CSDN博客  上面这个自己写的不知道为什么错哩,在网上找了下面这个。   这道题写的很顺      (这道题答案来源于网上)  网上答案写的很详细

    2024年02月13日
    浏览(29)
  • 考研保研、夏令营推免的简历模板

      本文介绍在保研夏令营、考研复试等场景中, 个人简历 的制作模板与撰写注意事项。   这里就将当初我自己的简历分享一下,供大家参考。其实我的简历是那种比较简单、质朴的,通篇就一个颜色,没有太多花里胡哨的部分。我个人感觉,对于读研、升学而言,其实

    2024年02月04日
    浏览(28)
  • 北京大学2014计算机学科夏令营上机考试

    暴力必超时  利用栈的思想,利用一个(模仿栈)的数组,遇到男孩则入栈(即加入数组),记录当前位置(更新相对下标、绝对下表); 而遇到女孩,则出栈(男孩相对下标--),输出女孩与男孩的绝对位置。 2014计算机学科夏令营上机考试 B:排队游戏 找规律……#¥%……

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包