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

 

随着近年来互联网技术的不断成熟,城市产业转型和升级不断加速,一场智慧化变革正悄然发生。那么,将来城市会以怎样的方式进行划分呢?不一样的城市区域又将承担怎样的角色?城市精细化治理不只关乎城市的发展速度,也关乎每一个城市居民的生活品质。html

 

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

 

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

 

  01github

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

 

此前,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

 

>> 访问 PaddlePaddle 官网,了解更多相关内容

相关文章
相关标签/搜索