智慧海洋建设TOP方案借鉴学习与整理

2020DCIC智能算法赛-智慧海洋建设(渔船分类) 最近忙于找工作,之前做的项目还没有总结过,这里就先简单的总结一下 项目要求通过分析渔船北斗设备位置数据,具体判断出是拖网作业、围网作业还是流刺网作业。即:“轨迹(序列数据)+多分类”的任务,评估指标选用的是F1值。 本项目的关键点就是对原始数据的特征工程: baseline (本人的baseline代码找不到了,所以这里借用已经公开的方法,方法基本一样,只不过本人的baseline引入了更多的统计量) import os, sys, glob import numpy as np import pandas 阅读详情


本文主要是学习了天池的智慧海洋建设比赛的一些TOP方案,并对思路进行整理,本文以TOP1的方案为主,其他方案作为补充。

参考的文章如下:

  1. 2020DCIC智能算法赛-智慧海洋建设TOP1方案
  2. DCIC 2020数字中国创新大赛数字政府赛道:智慧海洋建设Rank 3解决方案
  3. 智慧海洋复赛0.89937方案代码开源
  4. 智慧海洋建设算法赛道B榜top5 方案及源码
  5. 42个特征+xgboost top7方案-完整notebook

非常感谢前排大佬开源的方案!

数据探索与预处理

渔船作业方式的定义

拖网:拖曳渔具在海底或海水中前进,对鱼类进行捕捞的作业方式。

围网:使用网具包围鱼群进行捕捞的作业方式

刺网:将长带形的网列敷设于水域中,使鱼刺入网目或被网衣缠络后加以捕捞

渔船作业过程中的三种状态

Anchored-off:船舶休息的点

Turning:船舶转弯的点

Straight-sailing:船舶航行的点

预处理

轨迹数据预处理方面, 将平面坐标转换为经纬度坐标。首先采用了经验阈值均值滤波去除了每条轨迹速度的异常值、坐标的离群点, 并用多项式插值函数对离群点进行了插值,基于局部速度对异常坐标点进行插值。

特征工程

统计特征

1,分箱特征,距离海岸线的近似值。

对v求分箱特征,等分为200份,求每一份的统计值
对x求分箱特征,1000份和10000份,求每一份的次数统计值,和每一个分箱对应不同id数目
对y求分箱特征,1000份和10000份,求每一份的次数统计值,和每一个分箱对应不同id数目
求x,y分箱后的组合特征做为分组,求对应的次数统计值,和对应的id的不同数目
根据x分组,求y距离最小y的距离 # 可以理解为距离海岸线距离
根据y分组,求x距离最小x的距离 # 可以理解为距离海岸线距离

2,对渔船的经纬度序列做均值、方差、分位数、众数等统计,可以简单地刻画渔船的活动范围

mode_df = data.groupby(['渔船ID', 'lat', 'lon'])['time'].agg({'mode_cnt':'count'}).reset_index()
mode_df['rank'] = mode_df.groupby('渔船ID')['mode_cnt'].rank(method='first', ascending=False)
for i in range(1, 4):
    tmp_df = mode_df[mode_df['rank']==i]
    del tmp_df['rank']
    tmp_df.columns = ['渔船ID', 'rank{}_mode_lat'.format(i), 'rank{}_mode_lon'.format(i), 'rank{}_mode_cnt'.format(i)]
    data_ = data_.merge(tmp_df, on=['渔船ID'], how='left')

3,间隔空间位移特征

根据id分组,对x求,上一个x,下一个x,间隔2个x的距离
根据id分组,对y求,上一个y,下一个y,间隔2个y的距离
根据上述距离,求上一时刻,下一时刻,间隔2个时刻的面积,相对值

4,行程特征

总行程距离
每一步行程的占比
将'dist_move_prev_bin_sen', 'v_bin_sen'转化为onehot稀疏特征

5,其他:

分别计算每个ship中速度大于0小于等于2、大于2小于等于6、大于6小于等于10的比例和平均值,三种区间代表三种运动状态,

以每个区间中的平均速度代表该船在该运动状态下的速度描述(根据速度的分布图选择的对速度的分箱方式)。以速度大于4的连续运动片段作为工作状态,计算每个ship中的工作状态片段并计算每个片段的位移作为作业间隔,统计每个ship中的作业间隔的中位数特征。

利用原数据’time’特征,提取其‘分钟’特征,计算其最大值。

时间差的平均值。时间差的分位数。时间差的中位数。

计算每个ship中角度的平均值。设计了拐角特征,并统计每艘船的三种拐角形式的数量,均值作为特征。

数据处理:skew较大的特征使用log函数将其正态化;与速度相关的特征保留其两位有效数字。

表征渔船的轨迹

POI信息

将每条轨迹投射到网格坐标系下,这样轨迹序列变为了网格id的符号序列; 随后我们基于被boat_id不同的渔船访问次数, 不同boat_id的渔船在该网格停留的平均时长和网格总的被访问的次数三个判据,筛选出了一系列的POI网格。

基于轨迹序列绝对和相对位置的复合向量编码

经纬度常规的统计特征对渔船轨迹信息的表征能力其实是有限的,这里我们设计了一种轨迹序列的编码方式(该方法可拓展至其他类型的轨迹序列数据),进一步刻画了轨迹的动态信息和渔船经过的每个点之间的联系

1,Geohash7编码:Geohash其实是将地图拆分成了一个个矩形网格,当经纬度落入到某个网格内时,则使用网格的编码代替经纬度,这相当于是一种聚类方式。这里我们不直接使用经纬度(细粒度)的好处就是可以提高特征的泛化能力。除此之外,我们还采用了全集和下采样两种提取方式来提取Geohash7编码后的轨迹序列。下采样的好处是缓解渔船位置信息频繁上报而产生的噪音。

在这里插入图片描述

2,梯度编码:轨迹序列的梯度是指的后一个位置相对于前一个位置的变化,目的是为了获取相对位置信息

在这里插入图片描述

3,基于Word2Vec和Node2Vec的DNN编码:主要思想是将渔船的轨迹序列当成文本,每个地点(Geohash编码)则是一个 “词语”,使用Word2Vec进行向量表征;把渔船经过的地点构造成 “点”,而不同地点之间的关系构造成 “边”,使用Node2Vec进行向量表征。

def w2v_feat(df, group_id, feat, length):
    print('start word2vec ...')
    data_frame = df.groupby(group_id)[feat].agg(list).reset_index()
    model = Word2Vec(data_frame[feat].values, size=length, window=5, min_count=1, sg=1, hs=1,
                     workers=1, iter=10, seed=1, hashfxn=hashfxn)
    # data_frame[feat] 存放每个渔船的[xz5k92v, xz5k99f, ...,xz5kdjj]对应的【二维表】,维度:(n , 30)
    # n 是渔船的所有轨迹记录[xz5k92v, xz5k99f, ...,xz5kdjj]的个数
    # 30是每个轨迹数据,如xz5k92v,通过Word2Vec得到是30维向量
    # 即每一行都存放了一个轨迹记录的30维向量
    data_frame[feat] = data_frame[feat].apply(lambda x: pd.DataFrame([model[c] for c in x]))
    # 遍历30维向量的每个分量
    for m in range(length):
        # 计算n行30维向量 的 每个分量 的均值,也就是计算第m列均值,作为该渔船的一个Word2Vec特征。
        data_frame['w2v_{}_mean'.format(m)] = data_frame[feat].apply(lambda x: x[m].mean())
    del data_frame[feat]
    return data_frame

4,TFIDF&CountVec编码:

此类编码方式也是借鉴了文本的常用处理方法,提取渔船轨迹序列中Geohash的频次信息。

def tfidf(input_values, output_num, output_prefix, seed=1024):
    tfidf_enc = TfidfVectorizer()
    tfidf_vec = tfidf_enc.fit_transform(input_values)
    svd_tmp = TruncatedSVD(n_components=output_num, n_iter=20, random_state=seed)
    svd_tmp = svd_tmp.fit_transform(tfidf_vec)
    svd_tmp = pd.DataFrame(svd_tmp)
    svd_tmp.columns = ['{}_tfidf_{}'.format(output_prefix, i) for i in range(output_num)]
    return svd_tmp

表征渔船不同状态下的信息

Anchored-off状态特征

认为当渔船的速度为0时,渔船处于停靠或是收网的状态。统计该状态下渔船所处的位置,可以让模型捕捉到不同作业方式下渔船停靠点或收网点的规律。

for col in ['lat', 'lon']:
    print(col)
    group_df = data[data['速度']==0].groupby(['渔船ID'])[col].agg(
                     {'锚点_'+col+'_mean': 'mean',
                      '锚点_'+col+'_max': 'max',
                      '锚点_'+col+'_min': 'min',
                      '锚点_'+col+'_nuniq': 'nunique',
                      '锚点_'+col+'_q1': lambda x: np.quantile(x, 0.10),
                      '锚点_'+col+'_q2': lambda x: np.quantile(x, 0.20),
                      '锚点_'+col+'_q3': lambda x: np.quantile(x, 0.30),
                      '锚点_'+col+'_q4': lambda x: np.quantile(x, 0.40),
                      '锚点_'+col+'_q5': lambda x: np.quantile(x, 0.50),
                      '锚点_'+col+'_q6': lambda x: np.quantile(x, 0.60),
                      '锚点_'+col+'_q7': lambda x: np.quantile(x, 0.70),
                      '锚点_'+col+'_q8': lambda x: np.quantile(x, 0.80),
                      '锚点_'+col+'_q9': lambda x: np.quantile(x, 0.90)}
                     ).reset_index()
    features = features.merge(group_df, on=['渔船ID'], how='left')

Turning状态特征

将数值型的方向特征进行离散化处理后,统计渔船作业过程中不同方向的频次及比例。

data['方向'] = data['方向'].apply(lambda x:(int(round(x/30)))*30)
degree_df = data.pivot_table(index='渔船ID',columns='方向',values='lat', dropna=False, aggfunc='count').fillna(0)
degree_df.columns = [str(f)+'_方向_count' for f in degree_df.columns]
degree_df.reset_index(inplace=True)

Straight-sailing状态特征

渔船的历史数据中存在大量的速度为0的记录,会对速度进行均值、方差等统计产生较大的影响。我们单独取速度大于0时的样本,再对速度构造统计特征,一方面去除速度为0的影响、另一方面刻画了渔船航行时的状态。

group_df = data[data['速度']>0].groupby(['渔船ID'])['速度'].agg({
    '速度_mean_new': 'mean',
    '速度_q10_new': lambda x: np.quantile(x, 0.10),
    '速度_q20_new': lambda x: np.quantile(x, 0.20),
    '速度_q30_new': lambda x: np.quantile(x, 0.30),
    '速度_q40_new': lambda x: np.quantile(x, 0.40),
    '速度_q50_new': lambda x: np.quantile(x, 0.50),
    '速度_q60_new': lambda x: np.quantile(x, 0.60),
    '速度_q70_new': lambda x: np.quantile(x, 0.70),
    '速度_q80_new': lambda x: np.quantile(x, 0.80),
    '速度_q90_new': lambda x: np.quantile(x, 0.90),
}).reset_index()

动态信息特征

每个渔船id的速度、经纬度看做是一个序列信息

利用速度、经纬度的分位数统计量,将浮点特征分桶转成一个类型特征

使用不同的ngram提取TF-IDF 特征(ngram=1, 2, 3)

最终,利用NLP的TF-IDF提取关键高维的ngram信息,有效获取速度和经纬度动态变化的信息

模型策略

五折验证,使用的lightgbm参数如下:

params = {
        'learning_rate': 0.05,
        'boosting_type': 'gbdt',
        'objective': 'multiclass',
        'metric': 'None',
        'num_leaves': 63,
        'feature_fraction': 0.8,
        'bagging_fraction': 0.8,
        'bagging_freq': 5,
        'seed': 1,
        'bagging_seed': 1,
        'feature_fraction_seed': 7,
        'min_data_in_leaf': 20,
        'num_class': n_class,
        'nthread': 8,
        'verbose': -1,
    }

再次感谢前排大佬开源的方案!

【信息科学与工程学】计算机科学与自动化-第十一篇 机械工程04 机械结构 上述表格总结了常见机械几何结构的参数特性及其应用场景,涵盖宏观几何参数、微观物理特性等多个层面。这些参数在设计、制造、分析和优化机械结构时都需要综合考虑,以确保结构满足功能、性能、可靠性和寿命要求。注意:微观层面特性通常涉及材料科学、纳米技术和表面工程等领域,对结构的疲劳、磨损、腐蚀、摩擦和润滑等性能有重要影响。宏观层面特性则决定结构的运动学、动力学、强度、刚度和稳定性等整体性能。实际应用中,需根据具体工况(载荷、速度、温度、环境等)选择合适的参数组合,并进行多学科优化设计。上表整理了常见机械几何结构的参数 阅读详情

相关推荐

【精品推荐】智慧海洋信息化建设方案共3份.zip

智慧海洋信息化平台建设顶层设计方案共51页.pptx 智慧海洋环境与资源基础数据管理平台建设方案共251页.docx 智慧海洋馆建设和运营整体解决方案共102页.doc

DataWhale数据挖掘实践_智慧海洋(二)

https://github.com/datawhalechina/team-learning-data-mining/tree/master/wisdomOcean 1.tqdm介绍及常用方法 tqdm库的简介 显示循环的进度条的库。taqadum)在阿拉伯语中的意思是进展。tqdm可以在长循环中添加一个进度提示信息,用户只需要 封装任意的迭代器 tqdm(iterator),是一个快速、扩展性强的进度条工具库。 tqdm库的安装 pip install tqdm tqdm库的使用方法 import ti

qq_36744449的博客 307

智慧海洋建设和运营一站式解决方案.ppt

智慧方案

Datawhale-数据挖掘实践(智慧海洋)

天池大赛-心跳信号分类预测 数据初步分析

weixin_44439904的博客 623

--智慧海洋馆建设和运营整体解决方案.docx

智慧方案

智慧海洋信息化建设和运营整体解决方案.ppt

智慧方案

Python深度学习:从入门到实战

亲爱的读者,欢迎您翻开这本书。我们即将探索的,是深度学习的宇宙——一个由数据、算法与算力构筑的奇妙世界。它既是严谨的科学,也是创造的艺术,更是一条通往未来智慧的修行之路。本书将带您从最基础的数学原理出发,亲手搭建神经网络,驾驭Transformer等前沿模型,最终将智慧转化为现实世界的价值。请放下畏惧,保持好奇。这不仅是一次知识的学习,更是一场思维的远行。来,随我一起,开启这趟非凡的旅程吧。

weixin_45747731的博客 296

智慧海洋信息化服务平台建设方案共52页.ppt

智慧海洋信息化服务平台建设方案共52页.ppt

GPT-4的1.8万亿参数与2%激活机制揭秘

大语言模型中的参数量并非单纯堆叠,而是反映模型容量与计算效率的综合指标。稀疏专家混合(MoE)架构通过动态路由机制,在推理时仅激活少量专家子网络,显著降低显存占用与计算开销,突破稠密模型的‘显存墙’和‘计算墙’瓶颈。其核心原理在于Router根据token语义匹配Top-K专家,实现高表达力与低延迟的平衡。该技术已从超大规模模型(如GPT-4)向中小模型、边缘设备及多任务场景快速下沉,支撑领域适配、多语言处理与资源受限部署。理解MoE不仅是掌握一种架构,更是建立‘按需调度、智能编排’的新一代AI工程思维。

tomfish 558

智慧海洋建设和运营整体解决方案.ppt

智慧方案

【网络图】:附Origin详细画图教程

网络图,是一种由节点(或顶点)和连接这些节点的边(或链路)组成的图形结构。在网络图中,节点通常代表系统中的一个实体(如项目中的一项任务、通信网络中的一个设备、或运输网络中的一个站点),而边则代表这些实体之间的直接联系或流动(如任务的先后顺序、数据的传输路径、或乘客的旅行路线)。 有向图:如果边具有方向性,即从一个节点指向另一个节点,则称为有向图。这种图常用于表示具有明确先后顺序或方向性的系统,如项目管理中的任务依赖关系。 无向图:如果图中的边没有方向,则称为无向图。它适用于表示实体间相互关联但无明确方向性的

weixin_50236590的博客 3954

海岸拾贝与海玻璃工坊HarmonyOS ArkTS API 24可以通过 .fontSize()、.backgroundColor()、.borderRadius() 等方法快速配置样式

在移动互联网与智能穿戴设备高度普及的今天,"习惯养成"已经从一个模糊的自我管理理念,演变为一个可量化、可追踪、可视化的数字化产品赛道。越来越多的人希望借助手中的智能终端,把"早起、冥想、阅读、运动"这些抽象的自律行为,转化为一条条清晰的数据曲线和一张张可触摸的打卡卡片。而鸿蒙生态(HarmonyOS)凭借其跨设备协同、分布式软总线以及声明式 UI 开发框架 ArkUI,为这类注重"轻量化交互 + 即时反馈"的生活方式类应用提供了极为理想的生长土壤。本应用正是一款面向"晨间场景"深度打磨的习惯追踪工具。它聚焦

jin421352的博客 211

STM32H750VBT6在Keil5下载报错?三步搞定Flash Download Failed Cortex-M7问题

本文针对STM32H750VBT6在Keil5开发环境中常见的“Flash Download Failed Cortex-M7”下载报错问题,提供了系统性的三步解决方案。核心在于理解该芯片128KB内部Flash的特殊性,并详细指导用户检查更新Device Pack、精确配置Flash下载算法地址(0x08000000, 0x20000)以及进行硬件连接验证,从而快速修复调试器与芯片间的Flash操作协议问题。

weixin_29274969的博客 480
上一篇: 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
下一篇: 【比赛学习笔记】电信行业存量用户的智能套餐个性化匹配
VariableX
博客等级 码龄7年 142粉丝 62原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值