【Kaggle】练习赛《洪水数据集的回归预测》(下)

前言

上篇《洪水数据集的回归预测》(上) 介绍了该数据集非常特殊之处,各特征都非常类似,没有特别之处,各特征之间的相关系数几乎为零。同时,各类模型不敏感,最理想的模型居然是线性回归,决定系数 R 2 R^2 R2,也只有 0.846。对这样的一个问题,我们如何突破呢?

方向一

既然线性模型效果相对于其他模型算是较好的,因此我们选择深度学习的MLP【多层感知器(multilayer Perceptron)】模型进行尝试,核心代码如下,

数据归一化

sc = preprocessing.StandardScaler()
X_scaled=sc.fit_transform(X) 
X_valid_scaled = sc.transform(X_valid)
test_scaled = sc.transform(test)
建模
model = Sequential() 
model.add(Dense(64, kernel_initializer = 'normal', activation = 'relu',
input_shape = (20,))) 
model.add(Dense(64, activation = 'relu'))
model.add(Dense(32, activation = 'relu'))
model.add(Dense(1))

第一个版本,中间层只有 64 一层

编译
model.compile(loss = 'mse', optimizer = RMSprop(learning_rate=0.0005),  metrics =  ['mean_absolute_error']
)

这里选择 RMSprop 做为优化器,我尝试过用 Adam 效果差不多,同样,这里的学习率也可以做适当的调整。

训练
history = model.fit(X_scaled, y,    batch_size=128, epochs = 500, verbose = 1, validation_split = 0.2, callbacks = [EarlyStopping(monitor = 'val_loss', patience = 20)]
)

6988/6988 ━━━━━━━━━━━━━━━━━━━━ 13s 2ms/step - loss: 3.5157e-04 - mean_absolute_error: 0.0147 - val_loss: 3.5295e-04 - val_mean_absolute_error: 0.0146
Epoch 147/500
6988/6988 ━━━━━━━━━━━━━━━━━━━━ 13s 2ms/step - loss: 3.5114e-04 - mean_absolute_error: 0.0147 - val_loss: 3.6086e-04 - val_mean_absolute_error: 0.0145

第一版本,训练数据和验证数据分别 用train_test_split方式来进行训练
采用早停的方式来终止训练,这里共训练了147次,MSE 可以达到0.0145~0.0146之前

LOSS 结果
plt.plot(history.epoch,history.history.get('loss'),label="loss")
plt.xlabel("epoch")
plt.ylabel("MSE")
plt.legend()

在这里插入图片描述

查看验证结果
y_valid_pred = model.predict(X_valid_scaled)
r2_score(y_valid,y_valid_pred)

0.8628182472445698

0.8628,这个结果大大的超过了预期,第一个版本成绩为0.859,因此就选用了这个标题了,现在所展示的是第二个版本,具体详见 完整代码

以下是我当天提交结果

在这里插入图片描述

正当以为找到方案一,调整模型层数和相关参数提升模型效果时,很快发现又出称瓶颈(0.8645),不得不需要找到另外的突破的方式。

方案二

在上篇留了一个坑 ,也在总结 写到"如果直接用上述的数据建模的话, R 2 R^2 R2 的上限不太可能会突破0.85",尽管方案一突破了0.85 ,来到了0.86 这个区别,难道不能上0.87 那个区间吗。因此,我们突破常规思路,必须从数据集入手,有效的进行特征工具(FE),提升这些特征的有效性。

上文提到那些特征没有特色,具体普遍性,而机器学习在寻找特征的基本思想就是找出与别人不一校样的东西,如果一组数据没有波动,也不能称之为特征,因此,需要我们找出不一样的波动的东西,顺着这个思路,我们把以上原有特征的统计量给找出来,看看能发现什么。

选择统计量分析
# 求出相关的统计量,并删除原特征
def cleaning(dataset):features = dataset.columns.tolist()dataset['mean_features'] = 0.1*dataset[features].mean(axis=1)dataset['std_features'] = dataset[features].std(axis=1)dataset['max_features'] = dataset[features].max(axis=1)dataset['min_features'] = dataset[features].min(axis=1)dataset['median_features'] = 0.1*dataset[features].median(axis=1)# just keep the descriptive statisticsdataset = dataset.drop(features, axis=1)return dataset
# 将原始数据和训练数据合并
dataset = pd.concat([original_data, train_data.drop('id', axis=1)], ignore_index=True)
X = dataset
X = X.drop(["FloodProbability"], axis=1)
X = cleaning(X)
y = dataset["FloodProbability"]
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats# Plot scatter plots and regression lines for each feature in separate plots
for i, col in enumerate(X.columns):plt.figure(figsize=(6, 4))  # Create a new figure for each feature# Scatter plot and regression linesns.regplot(x=X[col], y=y, color='darkturquoise', line_kws={'color': 'red'}, scatter_kws={'alpha': 0.5})  # Set alpha for dot transparency# Calculate linear regressionslope, intercept, r_value, p_value, std_err = stats.linregress(X[col], y)# Add title including the regression coefficientsplt.title(f'{col} vs Target\nSlope: {slope:.2f}, Intercept: {intercept:.2f}')# Setting labelsplt.xlabel(col)plt.ylabel('Target')plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们惊奇的发现,这些统计量与目标值【FloodProbability】居有具较强的相关性。
以此为起点,我们以上述统计量为特征,进行建模分析。
以下没有优化的结果如下

模型原始特征 R 2 R^2 R2统计量特征的 R 2 R^2 R2
LinearRegression0.8454600.84561
Lasso-5.51093-5.51093
Ridge0.8454600.84561
ElasticNet-5.51093-5.51093
SVR0.696670.78454
RandomForestRegressor0.653940.86045
XGBRegressor0.809420.869125
LGBMRegressor0.7671980.869094
CatBoostRegressor0.846690.869264
DL-MLP0.8628180.865859

以上表数据均为验证集的结果,未进行提交的成绩。

为了取得更好的成绩,我们将最好的三个模型进行融合。

xgb_pred = xgb.predict(test_t)
lgb_pred = lgb.predict(test_t)
cat_pred = cat.predict(test_t)
sample['FloodProbability'] = (xgb_pred+lgb_pred+cat_pred)/3
sample.to_csv("submit_melt.csv",index=None)

详见 notebook

最终,提交到竞赛中得到 0.86887的成绩,截止发稿,最好成绩为0.86932。
在这里插入图片描述

到这里暂告一段落,要想继续提升我们的成绩,还是有一定的空间,有几个方向供小伙伴参考

  • 上述的三个模型都是采用默认参数的方式,都可以进行 optuna 进行优化,参照我的几篇文章,如《肥胖风险的多类别预测》的 Optuna 进行微调部分。
  • 在融合方式中可以用不同权重进行优化。
  • 模型训练时可以用5折交叉验证来提升模型的泛化能力。

总结

  1. 写这篇文章的初衷,是为了一种思维的突破,改变原先常规的特征基础,选用统计量作为特征,这是我在以往所没有碰到过的,基于这一点,拿来分享给大家。
  2. 这种方法其实是有条件的,并非所有的题目都可以这样,只有当这些特征具有以下特点是,如所有特征具有共同的特性,并其相关性为零,特征量不太少,用一般的树形模型没法提升时。
  3. 每个数据集基于特征都有一个理论上限,如果已接近这个天花板时,就需要改变原先的特征,像本题,是一种完全改变的方式,除此之外,有扩展,PCA等方式。
    以上这些观点是我自己的感受和体会,并非一定正确,如有不想法和建议,欢迎评论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/671116.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring+SpringMVC+Jsp实现校园二手交易系统

前言介绍 在社会快速发展的影响下,使校园二手交易系统的管理和运营比过去十年更加理性化。依照这一现实为基础,设计一个快捷而又方便的网上校园二手交易系统是一项十分重要并且有价值的事情。对于传统的管理控制模型来说,网上校园二手交易系…

生产管理驾驶舱模板分享,制造业都来抄作业!

今天要讲的是一张从组织、生产车间、物料、仓库、时间等不同维度,展示产能、产量、投入成本、产能达成率等关键信息,让企业运营决策者全面了解生产产能情况、产量情况、投入成本情况、产能达成率情况的BI生产管理驾驶舱模板。这是奥威BI标准方案为设有生…

自编码器网络

1.自编码器网络 自动编码器是一种无监督的数据维度压缩和数据特征表达方法。 无监督 在海量数据的场景下,使用无监督的学习方法比有监督的学习方法更省力。 维度上的压缩 自编码网络可以根据输入的数据,对其进行表征学习。输入数据转换到隐藏层co…

GreptimeDB 助力国家电网数字换流站打造稳定高效的时序数据底座

电网体系作为现代社会运行的支柱之一,为各行各业、千家万户提供了电能的基本支持。从家庭到企业,医院到学校,交通到通讯,电力电网的应用贯穿始终。近年来,特高压换流站成为国家电网的重点建设工程,“十四五…

Maria DB 安装(含客户端),看这一篇就够了

文章目录 一 安装前准备1 版本与Win平台对应2 推荐安装 二 安装步骤1 安装主体程序2 添加系统路径Path 三 客户端 一 安装前准备 1 版本与Win平台对应 版本对应关系可参考: https://www.codebye.com/mariadb-deprecated-package-platforms.html。 2 推荐安装 经…

Stable Diffusion学习记录

文章目录 前言电脑配置推荐环境搭建下载地址安装步骤步骤一,打开下载的秋叶整合包,路径秋叶整合包/sd-wenui-aki步骤二,打开下载好的sd-webui-aki-v4.8.7解压包 Stable Diffusion软件配置,插件安装,模型下载Stable Dif…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

【高校科研前沿】中国科学院地理资源所钟帅副研究员研究组博士生朱屹东为一作在Top期刊发文:从潜力到利用:探索西藏风能资源开发的技术路径优化布局

01 文章简介 论文名称:From potential to utilization: Exploring the optimal layout with the technical path of wind resource development in Tibet(从潜力到利用:探索西藏风能资源开发的技术路径优化布局) 文章发表期刊:《…

红日靶场ATTCK 1通关攻略

环境 拓扑图 VM1 web服务器 win7(192.168.22.129,10.10.10.140) VM2 win2003(10.10.10.135) VM3 DC win2008(10.10.10.138) 环境搭建 win7: 设置内网两张网卡,开启…

期权如何开户的流程是什么样的?

今天期权懂带你了解期权如何开户的流程是什么样的?期权账户开户是指投资者向期权经纪商或金融机构提交申请,以便可以在期权市场上进行交易并持有期权合约的账户开设过程。 期权如何开户的流程是什么样的? 1. 投资者参与营业部提供的股票期权…

【6D位姿估计】数据集汇总 BOP

前言 BOP是6D位姿估计基准,汇总整理了多个数据集,还举行挑战赛,相关报告被CVPR2024接受和认可。 它提供3D物体模型和RGB-D图像,其中标注信息包括6D位姿、2D边界框和2D蒙版等。 包含数据集:LM 、LM-O 、T-LESS 、IT…

Netty核心线程模型源码分析

文章目录 一、Netty线程模型简介二、Netty线程模型源码分析1. 服务端源码分析 一、Netty线程模型简介 Netty的线程模型图如下所示: 具体细节看这篇博客 二、Netty线程模型源码分析 1. 服务端源码分析 首先我们在写Netty服务端程序的时候最开始是下面两句代码&a…