算法竞赛相关问题总结记录

前言

        日常在校生或者是工作之余的同学或多或少都会参加一些竞赛,参加竞赛一方面可以锻炼自己的理解与实践能力,也能够增加自己的生活费,竞赛中的一些方案也可以后续作为自己论文的base,甚至是横向课题的框架。在算法竞赛中算法的差别个人感觉差距都不大,主要的差别点就是数据处理方式、数据特征的处理,数据特征与结果直接挂钩。

内容

        本科或者是刚读研的学生除了kaggle等这些知名的竞赛平台,可以从一些小的平台开始。个人推荐两个平台,里面的项目与一些解决方案,多少都会对自己有益,本人之前看了一个多模态融合的方法就结合实际项目做出了不错的效果。

平台介绍

1、DLab教学与实训平台

        可以看到里面涉及的模块还是挺丰富的,包含视觉、NLP等,另外一些可以瓜分的较大额度奖金,并且很多项目来自企业或者事业的实际业务,在后续的简历中也可以自己的项目,除此之外还有学习圈可以看一些优秀的项目与解决方案。

2、FlyAI-AI竞赛服务平台

内容小结

        1)、进行数据分析时,首先要看的就是数据的分布情况,看每个类别的分布是否是均衡,其次对于文本的长度进行统计,比如平均长度,这样在选取数据长度的时可以选取平均长度亦或者是略大于平均长度。

        2)、针对于样本分布如果是样本分布不均衡,可这对于样本不均衡作出相应的调整。首先是欠采样或者是过采样。对于样本比较多的进行欠采样,样本比较少的进行过采样。欠采样:删除掉一些文本(对一些不重要文本进行剔除)

常见的文本增强有:

  • 句子的随机打乱(随机打乱句子)
  • (噪声的加入):在正例中加入一些噪声词,或随机剔除一些词
  • 对长文本进行处理(裁剪掉长文本的某一句,比如开头句或结尾句)
  • copy复制
  • paraphrasing,用序列到序列的方式去生成,在问答系统有一个领域叫做问题复述,根据原始问题生成格式更好的问题,相当于修正不规范的问题,将新问题代替旧问题输入到问答系统中

数据分析是首要选择,句子的长度,分类的话包含类别的分布情况。如下所示进行相关统计。

        相比没有进行统计的结果,最初数据的分布如下所示:

        对数据的分布进行初步的分析发现,数据分布存在很大的问题,可以看出很明显的问题就是数据不均衡,尤其对于分类任务来说,数据量分布最大与最小的差别有上万条,最终会影响最后的结果。

预处理部分:

                随机shuffle后以9:1的比例划分线下验证集和训练集,防止数据周期的影响,其次对于不同长度的数据选择合适的长度,可以根据数据分布去中间值,又或比中间值略大的部分。进行对于数据长尾部分的处理,可以采用变换的方式对数据的标签进行转换,(Datawhale 零基础入门数据挖掘-Task4 建模调参-天池实验室-阿里云天池 https://tianchi.aliyun.com/notebook-ai/detail?spm=5176.12586969.1002.18.1cd8593aw4bbL5&postId=95460)

在这里对标签进行了 log \left ( x+1 \right )​变换,使标签贴近于正态分布.

train_y_ln = np.log(train_y + 1)

模型融合(Datawhale 零基础入门数据挖掘-Task5 模型融合_天池notebook-阿里云天池)

  1. 简单加权融合,如回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);分类:投票(Voting)综合:排序融合(Rank averaging),log融合
  2. stacking/blending:构建多层模型,并利用预测结果再拟合预测。
  3. boosting/bagging(在xgboost,Adaboost,GBDT中已经用到):多树的提升方法

 对于样本不平衡常采用focal loss加上f1-score 组成新的损失函数

FL=-\alpha _{t}(1-p_{t})^{\gamma }log(p_{t})

F1-score=\tfrac{2*Precision*Recall}{(Precision+Recall)}

        组成新的损失函数:

\alpha(1-F1-score)+Focall_{-}loss

        具体的代码如下所示:

# focal loss code from https://github.com/umbertogriffo/focal-loss-keras/blob/master/losses.py
# f1 loss code from https://www.kaggle.com/rejpalcz/best-loss-function-for-f1-score-metric

def focal_loss(y_true, y_pred):
  gamma=2.
  alpha=.25  
  # Scale predictions so that the class probas of each sample sum to 1
  y_pred /= K.sum(y_pred, axis=-1, keepdims=True)  
  # Clip the prediction value to prevent NaN's and Inf's
  epsilon = K.epsilon()
  y_pred = K.clip(y_pred, epsilon, 1. - epsilon)
  # Calculate Cross Entropy
  cross_entropy = -y_true * K.log(y_pred)
  # Calculate Focal Loss
  loss = alpha * K.pow(1 - y_pred, gamma) * cross_entropy
  # Compute mean loss in mini_batch
  return K.mean(loss, axis=1)

def focal_f1_loss(y_true, y_pred):
  tp = K.sum(K.cast(y_true*y_pred, 'float'), axis=0)
  tn = K.sum(K.cast((1-y_true)*(1-y_pred), 'float'), axis=0)
  fp = K.sum(K.cast((1-y_true)*y_pred, 'float'), axis=0)
  fn = K.sum(K.cast(y_true*(1-y_pred), 'float'), axis=0)
  p = tp / (tp + fp + K.epsilon())
  r = tp / (tp + fn + K.epsilon())
  f1 = 2*p*r / (p+r+K.epsilon())
  alpha = 0.001
  return alpha *  (1 - K.mean(f1)) +  focal_loss(y_true, y_pred)

参考:

2017知乎看山杯 从入门到第二 - 知乎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创建一个空的maven项目,整合SpringBoot和Redis

创建一个空的maven项目,整合SpringBoot和Redis 创建空的maven项目 在最新版的idea中创建maven项目的时候会让选择模板 如下图: 我们选择quickstart快速开始模板,quickstart快速开始模板创建的maven项目里面什么都不带,只有一个…

便携式手提万兆网络协议测试仪

便携式手提万兆网络协议测试仪 平台简介 便携式手提万兆网络协议测试仪,以FPGA万兆卡和X86主板为基础,构建便携式的手提设备。 FPGA万兆卡是以Kintex-7XC7K325T PCIeX4的双路万兆光纤网络卡,支持万兆网络数据的收发和网络协议的定制设计。 …

微服务之.SpringCloud AlibabaSentinel实现熔断与限流

一、概述 1.1介绍 Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站: 官网https://sentinelguard.io/zh-cn/ 从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开…

计算机服务器中了locked勒索病毒怎么办,locked勒索病毒解密工具流程步骤

随着网络技术的不断应用与发展,越来越多的企业离不开网络,网络大大提升了企业的办公效率水平,也为企业的带来快速发展,对于企业来说,网络数据安全成为了大家关心的主要话题。近日,云天数据恢复中心接到多家…

注意libaudioProcess.so和libdevice.a是不一样的,一个是动态链接,一个是静态

libaudioProcess.so是动态链接,修改需要改根文件系统,需要bsp重新配置 libdevice.a是静态链接,直接替换就行 动态链接文件修改 然后执行fw_update.sh

JAVA学习笔记29(集合)

1.集合 ​ *集合分为:单列集合、双列集合 ​ *Collection 接口有两个重要子接口 List Set,实现子类为单列集合 ​ *Map接口实现子类为双列集合,存放的King–Value ​ *集合体系图 1.1 Collection接口 1.接口实现类特点 1.collection实现…

射频识别技术助力产品分拣:提升效率与准确性

射频识别技术助力产品分拣:提升效率与准确性 RFID技术在产品分拣中具有重要的应用,它利用射频信号进行非接触式的自动识别,能够高效、准确地完成产品分拣工作。 在产品分拣中,RFID技术的主要应用方式是在产品上粘贴RFID电子标签&…

阿里云mysql8.0 this is incompatible withsql mode=only full group by

阿里云RDS中mysql5.6升级为8.0后,出现如下问题: ### Error querying database. Cause:java.sql.SQLSyntaxErrorException: Expression #1 of SELECT listis not in GROUP BY clause and contains nonaggregatedcolumn temp.product_id which is not fun…

电商平台数据有哪些(淘宝1688京东API)?如何进行电商平台数据分析?(内附测试方式)

电商平台数据是一个庞大且复杂的体系,涵盖了多个维度和类型。在淘宝、1688、京东等电商平台中,数据主要分为以下几个类别: 用户数据:包括用户属性(如年龄、性别、地域、职业等)、用户行为(如浏…

本地环境测试

1. 在 Anaconda Navigator 中,打开 Jupyter Notebook ,在网页中,点击进入本地环境搭建中创 建的工作目录,点击右上角的 New- 》 Folder ,将新出现的 Untitled Folder 选中,并使用左上角 的 Rename 按钮重…

CSS基础常用属性之字体属性(如果想知道CSS的字体属性知识点,那么只看这一篇就足够了!)

前言:在我们学习CSS的时候,主要学习选择器和常用的属性,而这篇文章讲解的就是最基础的属性之一——文字属性。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 废话不多说,让我们直…

STP学习的第一篇

1.STP的基本概念:根桥 (1)STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。 (2)根桥是一个STP交换网络中的“树根”。 (3)STP开始工作后&#xf…

Hack The Box-Runner

总体思路 子域名扫描->CVE-2023-42793利用->获取敏感信息->user->端口转发->CVE-2024-21626利用->root 信息收集&端口利用 nmap -sSVC 10.10.11.13目标开放22、80、8000端口,这里先将runner.htb加入到hosts文件后,访问之 查看源…

一文读懂链游!探索链游的前世今生,区块链与游戏结合的新兴趋势

区块链技术的崛起给游戏行业带来了前所未有的变革,而链游(Blockchain Games)正是这一变革的产物。本文将带您一览链游的前世今生,探索区块链与游戏结合的新兴趋势。 1. 链游的起源 链游,顾名思义,是指利用…

DAPP的商业模型创新: 探索可持续盈利路径

去中心化应用(Decentralized Applications,DAPPs)作为区块链技术的重要应用之一,在近年来蓬勃发展。然而,随着市场竞争的加剧和用户需求的不断变化,DAPP开发者们面临着寻找可持续盈利路径的挑战。本文将探讨…

STM32学习和实践笔记(16):STM32的中断一般配置步骤

STM32的中断配置步骤,通常都需经过这几步: (1)使能外设某个中断 方法就是调用这个外设的中断使能库函数来使能或者说打开它。 (2)设置中断优先级分组, 方法就是使用库函数 NVIC_PriorityGro…

Linux下kafka单机版搭建

1.zookeeper的安装 这里使用3.6.4版本 前提:服务器已经安装了jdk,zookeeper运行需要jdk环境 1.1创建放zookeeper的目录 #创建目录 mkdir -p /usr/local/zookeeper#赋予权限 chmod 777 /usr/local/zookeeper1.2安装包的下载 #这里推荐去官网下载 https:…

使用大卫的k8s监控面板(k8s+prometheus+grafana)

问题 书接上回,对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控AMG(AWS云 grafana),上次我们只是配通了EKSAMPAMG的监控路径。这次使用一位大卫老师的grafana的面板,具体地址如下: ht…

Git 介绍和安装

Git 介绍和安装 | CoderMast编程桅杆Git 介绍和安装 Git介绍 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus T…

算法思想总结:栈

一、栈的经典应用:波兰表达式与逆波兰表达式 我们平时看到的 12*(3-4*5)6/7 叫做中缀表达式,平时我们习惯用这个计算的原因是我们可以整体地去看到这个表达式并且清楚地知道各个运算符的优先级,但是计算机并不一定知道…