前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >他用飞桨,“画”出了一座智慧城市应有的模样

他用飞桨,“画”出了一座智慧城市应有的模样

作者头像
用户1386409
发布2020-02-12 15:22:02
5390
发布2020-02-12 15:22:02
举报
文章被收录于专栏:PaddlePaddlePaddlePaddle
随着近年来互联网技术的不断成熟,城市产业转型和升级不断加速,一场智慧化变革正悄然发生。那么,未来城市会以怎样的方式进行划分呢?不同的城市区域又将承担怎样的角色?城市精细化治理不仅关乎城市的发展速度,也关乎每个城市居民的生活品质。

好在AI技术的不断成熟,想要构筑一个城市的功能分类模型已非天方夜谭。尤其是飞桨开源深度学习平台的逐步成长,也让开发者有了更多的选择。针对上述问题,2019年9月至12月,飞桨举办了首期基线挑战赛,参赛选手使用飞桨构建一个城市区域功能分类模型:对给定的地理区域,输入该区域的遥感影像和用户到访数据,最终预测10万个测试集样本的区域功能类别。

经过3月的激烈竞争,最终Expelliarmus以0.88767的成绩获得冠军,也就是说该团队训练的飞桨模型成功预测了近8.9万个城市区域功能的类别,哪里是学校、居民区、飞机场,只需要一个模型便可准确分类。该成绩也逼近了2019国际大数据竞赛复赛第一名成绩0.90468。

01

赛题分析:基于遥感影像和用户行为的城市区域功能分类

此前,2019百度&西交大大数据竞赛已举办过Urban Region Function Classification 比赛,要求选手构建一个城市区域功能分类模型(居住区、学校 、工业园区 、火车站 、飞机场 、公园 、商业区 、政务区、医院等),对给定的地理区域、输入区域的遥感影像和用户的到访数据,并预测区域的功能类别。

此次飞桨基线挑战赛沿用了上述赛题,要求选手基于遥感影像和互联网用户行为,使用飞桨设计一个城市区域功能的分类模型。

因为有迹可循,这就让选手能够减少很多重复性工作。在本次比赛中,获得冠军的参赛队伍Expelliarmus就分享了他们的参赛历程。他们认为,本次参赛可以沿用先前比赛开源代码中可以利用的部分,减少重复工作,并使用基于飞桨开发的模型,替换掉先前比赛方案中不符合本次规则的模型。

也就是说,Expelliarmus在本次比赛中主要对官方基线模型、先前比赛中top2队伍海疯习习在GitHub上开源的特征提取代码,并结合自身使用飞桨搭建的MLP模型对上述提取的特征进行训练。

在本次比赛中,Expelliarmus所做的工作主要包含了以下四个方面:

1. 基于飞桨框架搭建了MLP模型,并封装了MLPClassifier。提供了fit()、predict_prob()、score()、save_model()、load_model()接口,方便模型训练预测调用。具体参见代码中的models.py文件。

2. 对官方基线模型进行如下修改:

a. 修改npy生成文件代码,使用multiprocessing多进程处理,加快处理速度;

b. 修改reader函数和infer函数,使其可以batch预测,加快预测速度;

c. 添加了k折交叉验证代码,及stacking方式生成基线模型特征代码。

3. 使用MLP模型进行特征筛选,具体做法是:

a. 划分训练验证集,并使用全部特征训练MLP模型;

b. 按顺序依次shuffle验证集的每一列特征,并在前面训练的模型上进行预测,如果预测分数不变或者升高,则说明这一列特征并未起到作用,则可以将该特征剔除。具体参见代码中的train_select.py文件。

4. 后期使用bagging方式训练多个模型,即每次训练前都对样本和特征进行采样,保证模型训练结果的多样性,提高模型融合效果。

02

比赛思路:特征提取及MLP模型训练

Expelliarmus贡献了本次比赛的参赛思路,详情可参考:

https://github.com/cchan19/region_classification

比赛过程中也沿用了top队伍海疯习习的比赛思路,具体内容可以参考:

https://www.cnblogs.com/skykill/p/11273640.html

而特征提取则主要包含了两个方面:

1. 使用官方基线模型提取特征。具体代码参见文件夹train_multimodel;

2. 使用海疯习习队伍开源代码提取特征,其中包括三类特征:

第一类:basic 特征

给定一个地区的访问数据,我们提取该地区不同时间段的统计特征(包括 sum, mean, std, max, min, 分 位数25,50, 75这8个统计量)。不区分用户的特征:24小时,24小时相邻小时人数比值,节假日,工作日,休息日,等等。区分用户的特征:

1) 一天中,最早几点出现,最晚几点出现,最晚减去最早, 一天中相邻的最大间隔小时数。

2)沿着天数的,每个小时的统计特征。等等

—— 引用自海疯习习博客。

第二类:local 特征

“用户的时间轴上的天数,小时数,一天中最早出现和最晚消失的时间以及其时间差,一天中相邻时间的最大间隔小时数;以及节假日的相应特征(由于内存限制,我们对于节假日的特征,只提取了部分特征,天数,小时数), 这边我们节假日分的稍微粗糙点。”—— 引用自海疯习习博客。

第三类:global特征

在提取local特征的方法下,使用部分basic特征替换掉local特征变量(具体方法参见海疯习习博客),并使用前文提到的特征筛选方法从basic特征中筛选部分特征。在提取global特征前,继续从basic特征中筛选出50个特征,用于构造global特征。

特征提取完毕后,可以用官方基线模型特征和的海疯习习队伍的三类特征共同训练MLP模型,使用4折交叉验证,最终得分为0.885+。而如果使用前文提到的bagging训练方法,训练50个MLP模型进行融合,最终得分为0.887+。需要注意的是,以上MLP模型层设置均为(256,128,64)。

03

代码目录及说明

那么以上两种办法具体是如何操作的呢?Expelliarmus提供了代码目录以及说明。

code

├─data:数据存放目录

│ ├─test_image:测试图片

│ ├─test_visit:测试文本

│ ├─train_image:训练图片

│ └─train_visit:训练文本

└─work

├─data_processing:数据预处理

│ ├─get_basic_file:记录训练测试文件及训练标签

│ └─get_npy:生成npy文件

├─feature_extracting:特征提取及筛选

│ ├─Basic_feature:basic特征

│ │ ├─Code_Basic_feature_1

│ │ └─Code_Basic_feature_2

│ ├─UserID_feature_global:global特征

│ └─UserID_feature_local:local特征

├─train_all:使用4折交叉训练模型(score:0.885)

├─train_bagging:使用bagging的方式训练模型(score:0.887)

└─train_multimodel:官方基线模型特征

注:属于已有开源代码的包括:

A. 修改自官方基线模型:

work\data_processing\get_npy\get_npy.py

work\train_multimodel\multimodel.py

work\train_multimodel\train_utils.py

B. 来自GitHub开源代码:

(网址:https://github.com/zhuqunxi/Urban-Region-Function-Classification

work\data_processing\get_basic_file\**

work\feature_extracting\Basic_feature\Code_Basic_feature_1\Config.py

work\feature_extracting\Basic_feature\Code_Basic_feature_1\feature.py

work\feature_extracting\Basic_feature\Code_Basic_feature_1\main.py

work\feature_extracting\Basic_feature\Code_Basic_feature_2\Config.py

work\feature_extracting\Basic_feature\Code_Basic_feature_2\feature.py

work\feature_extracting\Basic_feature\Code_Basic_feature_2\main.py

work\feature_extracting\UserID_feature_global\Config.py

work\feature_extracting\UserID_feature_global\function_global_feature.py

work\feature_extracting\UserID_feature_global\function.py

work\feature_extracting\UserID_feature_global\main.py

work\feature_extracting\UserID_feature_local\**

代码运行顺序如下:

进入data_processing/get_basic_file

(1) python get_label.py: 生成训练标签

(2) python get_train_test_csv.py:记录训练visit文件(csv)

(3) python get_train_test_txt.py:记录训练visit、测试image文件(txt)

进入data_processing/get_basic_file

(1) python get_npy.py: 生成官方基线用到的npy数组

进入work\feature_extracting\Basic_feature\Code_Basic_feature_1

(1) python main.py: 生成第一组basic特征

(2) python merge20.py: 将该组一半的basic特征合并,用于特征筛选

(3) python train_select.py: 利用MLP筛选特征,生成select_index.npy

进入work\feature_extracting\Basic_feature\Code_Basic_feature_2

(1) python main.py: 生成第一组basic特征

(2) python merge20.py: 将该组一半的basic特征合并,用于特征筛选

(3) python train_select.py: 利用MLP筛选特征,生成select_index.npy

进入work\feature_extracting\Basic_feature

(1) python train_select.py: 利用MLP筛选前面两组特征

(2) python merge.py: 合并筛选后的特征,生成最终的basic特征

进入work\feature_extracting\UserID_feature_local

(依次运行生成八组local特征)

(1) python normal_local.py

(2) python normal_hour_local.py

(3) python normal_hour_local_std.py

(4) python normal_work_rest_fangjia_hour_local.py

(5) python normal_work_rest_fangjia_hour_local_std.py

(6) python normal_work_rest_fangjia_local.py

(7) pythondata_precessing_user_id_number_holiday.py

(8) python data_precessing_user_id_number_hour.py

进入work\feature_extracting\UserID_feature_global

(1) python train_select.py: 在basic特征上继续筛选出50个特征

(2) python user_place_visit_num.py: 用户访问地点计数

(3) python main.py: 利用筛选的50个特征生成global特征

(4) python merge.py: 合并,得到最终的global特征

进入work\train_multimodel

(1) sh download_pretrain.sh: 下载SE_ResNeXt50预训练模型

(2) python train.py:k折交叉训练官方基线模型,预测概率值作为特征

进入work\train_all

(1) python train4fold.py: 利用MLP模型和前面生成的所有特征,四折交叉训练,预测结果线上得分为:0.885+

进入work\train_bagging

(1) python train.py: 利用bagging的策略训练50个MLP模型

(2) python infer.py: 利用前46个模型预测测试集,概率值平均求和,结果线上得分为:0.887+

04

写在最后

通过以上方法,由华南理工大学CChan带领的Expelliarmus最终成绩定格在了0.88767,而这一成绩也帮助他们成功登顶,获得了本次比赛的冠军。由此可见,无论是初出茅庐的学生还是已经工作许久的职场高手,只要善于把握机会,那么自身的光芒就一定能够闪耀出来。首期飞桨基线挑战赛显然是一个崭露头角的机会,但却并不是唯一机会,因为中国人工智能大赛·语言与知识技术竞赛也在火热报名中!

中国人工智能大赛·语言与知识技术竞赛由国家三部委指导,属于国家级AI竞赛。本次比赛设置了机器阅读理解方向赛题,参赛者可免费获得专家级AI培训以及长期技术支持,厦门政府为参赛者提供大力扶持政策,百度也为个人参赛者设立12万总奖池加码竞赛,更有AI Studio免费GPU算力助力选手参赛。

不要遗憾错失的机会,不必艳羡他人的光彩,每个活动都会为有准备的人敞开大门,点击左下角【阅读原文】即可报名,如果你也想赛场争锋,那么这次机会还请抓住呀!

参赛指南:https://ai.ixm.gov.cn/detail/intro-detail.html?id=a2b85a10d2d34ed7b70ad309c6881599

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PaddlePaddle 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档