Kaggle HousePrice : LB 0.11666(排名前15%), 用搭积木的方式(一,原理)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介:

image

关键词: 机器学习, 特征工程,调参, 比赛, Kaggle, House Price, 搭积木, 管道, Pandas Pipe, Sklearn Pipeline

本文预计阅读时间需要15分钟。 假定读者已经对Kaggle 和机器学习比赛有一定了解。(原文系列发表于知乎,这里可以赚积分,故也发一下)

我参加了两个Kaggle 比赛,一个是Titanic (分类),另一个是HousePrice(回归)。分别获得了前7% (花了约3个月业余时间)和前13%排名(花了约2个月业余时间)的成绩。由于刚刚上手5个月机器学习,其中花了很多时间作重复和无用功。
image

本文的目的主要是分享和探讨:

  • 我总结的搭积木式刷分大法。(即,利用Pandas 的Pipe 和 Sklearn的 Pipeline)
  • 特征工程中做法的自我理解。(例如:为什么要Log transfer,正态化等)

3。将自己碰到的问题(特征工程导致的过拟合)分享出来,求高人解惑

1。首先,重要的事情说三遍。

特征工程

特征工程

特征工程
image

机器学习的目的是已知的数据(包含X(特征), Y(标签)),采用一定算法,训练出某模型。用这个模型对新的数据进行预测 ,到预测的结果(标签)。

对于,已知的数据以及新的数据中的(特征)都需要通过特征工程处理。才能去训练模型,或者进行预测。

采用不同特征工程方法处理过的数据,训练时得出的模型不一样,调参的结果不一样,预测的结果更是有不同的结果。 因此在机器学习中,特征工程往往花掉80%时间,而模型训练之用到了20%的时间。

我在第一个Titanic 比赛中花了大量的时间,学习和测试各种调参,集成方法。 在House Price 比赛中也试图采用同样的策略,结果效果不是很好。往往结果会互相影响,甚至有的时候有机器学习是玄学的感觉。

重新审视了之后,我将整个House Price 的机器学习分成两个大步骤 :即:

1 . 特征工程(只使用Pandas, StatsModel,scipy,numpy, seaborn等库)

1.1 输入: 原始Train, Test 数据集,将原始Train和Test 合并成一个数据集combined

1.2 处理: Pandas Pipe

根据各种可能和各种特征工程方法定义各种函数(输入combined, 输入pre_combined)

用PandasPipe 将这个函数像搭积木一样连在一起。用列表按序存放这些函数)

例如: pipe_basic = [pipe_basic_fillna,pipe_fillna_ascat,pipe_bypass,pipe_bypass,pipe_log_getdummies,pipe_export,pipe_r2test]

这个列表就是,1. 基本的填充空值, 2. 转换数据类型, 3. 空白函数(为了对齐美观而以,啥事不做),4. log 转换,类别数据哑元处理, 5. 导出到hdf5文件, 6.检查R2值

利用各种排列组合,或者各种参数组合,可以产生丰富的pipes,每一个pipes都可以产生一个预处理过的文件。

1.3 输出:某文件夹下 的N个预处理过的hdf5文件。 针对各种特征工程的排列组合,或者是Kaggle上面的各种新奇的特征工程方法。

在特征工程处理完后, 已经产生了大量的预处理数据。 和这些预处理数据的R2值[0~1]。如果R2值过低,例如小于80%,那么可以考虑直接删除。因为预处理的数据中的X只能解释80%的Y值。R2值太低,没有进一步处理的价值。

  1. 机器学习阶段(训练和产生模型,目标是尽可能获得尽可能低的RMSE值(针对训练数据),同时要具有范化的能力(针对测试数据))

第一步,建立基准,筛选出最好的一个(几个)预处理文件(随机数设成固定值)

第二步,针对筛选出来的预处理文件,进行调参。找到最合适的几个算法(通常是RMSE值最低,且不同Kernel)(随机数设成固定值)

第三步,用调好的参数来预处理文件中的Traing数据的做average 和stacking.

第四部,生成csv文件,提交到Kaggle 看看得分如何。

我采用上述方法后,基本上获得的LB 分数就比较稳定向上,避免了之前的忽上忽下。而且避免了大量的重复工作。

上面是原理部分。 如果大家觉得写的值得一看,请随手点赞。赞数过50,我再继续分享实践部分。一步一步,届时如何做。后续的分享可能比较枯燥,里面就有一些代码了。

注:转发到这里的时候,赞数已经超过50。后续文章会在知乎和Python中文社区继续发表

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
负载均衡 Dubbo 应用服务中间件
微服务技术系列教程(31) - Dubbo-原理及负载均衡分析
微服务技术系列教程(31) - Dubbo-原理及负载均衡分析
92 0
|
存储 Kubernetes 负载均衡
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
389 2
|
10天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
1月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
35 3
|
3月前
|
负载均衡 算法 调度
负载均衡原理分析与源码解读
负载均衡原理分析与源码解读
|
3月前
|
负载均衡 算法 微服务
基于gRPC的注册发现与负载均衡的原理和实战
基于gRPC的注册发现与负载均衡的原理和实战
|
3月前
|
消息中间件 负载均衡 API
RocketMQ生产者负载均衡(轮询机制)核心原理
文章深入分析了RocketMQ生产者的负载均衡机制,特别是轮询机制的实现原理,揭示了如何通过`ThreadLocal`技术和消息队列的选播策略来确保消息在多个队列之间均衡发送,以及如何通过灵活的API支持自定义负载均衡策略。
|
3月前
|
存储 负载均衡 监控
自适应负载均衡算法原理和实现
自适应负载均衡算法原理和实现
|
3月前
|
负载均衡 网络协议 Linux
在Linux中,负载均衡的原理是什么?
在Linux中,负载均衡的原理是什么?
|
3月前
|
负载均衡 Dubbo 算法
Dubbo服务负载均衡原理
该文章主要介绍了Dubbo服务负载均衡的原理,包括Dubbo中负载均衡的实现位置、为什么需要负载均衡机制、Dubbo支持的负载均衡算法以及随机负载均衡策略的源码分析。
下一篇
无影云桌面