上一篇,[Kaggle] How to kaggle?【方法导论】

这里再做一点进阶学习。

写在前面


"行业特征" 的重要性

Ref: Kaggle2017—1百万美金的肺癌检测竞赛的难点哪儿

一、医学顶会 MICCAI

Medical image analysis是个非常有意义的研究方向,按道理属于Computer Vision,但由于没有像CV里面物体识别场景识别里标准化的数据库和评测方法,一直比较小众。

MICCAI是这个medical image analysis方向的顶会,目前并没有被deep learning统治,经常看到mean-shift以及其他比较基础的图片处理的算法,深度学习在这方面应该有很大潜力。CV里扎堆的优秀同学们不妨多看看这个方向,毕竟在某个疾病预测任务上能提升2%准确度比在Pascal VOC上费牛劲撸个0.5%提高有意义多了:)

二、CNN策略找cancer

Medical image analysis里面数据尤其宝贵,这次比赛放出来的数据以及这种公开比赛的模式应该能推动这个方向的发展。大致看了下比赛数据,

“a thousand low-dose CT images from high-risk patients in DICOM format. Each image contains a series with multiple axial slices of the chest cavity. Each image has a variable number of 2D slices, which can vary based on the machine taking the scan and patient.”,

虽然只有1000多张CT图,但是每张图是很多slice,所以算是个cubic representation,可能可以从deep learning for 3D或者deep learning for video recognition等方向看看有没有合适的方法可以借鉴。我不是这方面的专家,就留给各位见仁见智了,欢迎分享。

这里给大家提供一个cancer detection的相关工作作为参考。我CSAIL实验室前同事去年参加了个类似的比赛cancer metastasis detection:CAMELYON16 - Results,他和Harvard medical school的朋友利用类似于CNN+FCN的网络取得了第一名。同事去年毕业了现在正在用这个成果做Startup,叫PathAI | Welcome。论文也放出来了,感兴趣的朋友可以读读:https://people.csail.mit.edu/khosla/papers/arxiv2016_Wang.pdf。网络结构大致如下图,思路挺简单。

<img src="https://pic1.zhimg.com/v2-0c6d2a13b6e35ba90f96b8bc8bbd8d10_b.png" data-rawwidth="687" data-rawheight="421" class="origin_image zh-lightbox-thumb" width="687" data-original="https://pic1.zhimg.com/v2-0c6d2a13b6e35ba90f96b8bc8bbd8d10_r.png">
 

三、可解释性之"热力图"

另外,在医学图像分析诊断预测里面,非常重要一点是模型的可解释性。就是你得解释清楚你这个AI模型为什么work了,或者为什么在某些情形不work。这点其实比在benchmark上单纯提升分数更难。在Deep learning一股脑调参调结构提升分数的年代,network interpretability这个问题普遍被忽略了。而这个人命关天的medical image analysis方向,模型的可解释性肯定必不可少。再好的模型,解释不了为啥work,可能连FDA审核都过不了。

这里我安利一下我CVPR‘16上发表的一个工作:

这个工作提出了一个叫CAM (Class Activation Mapping)的方法,可以给任意一个CNN分类网络生成热力图(Class Activation Map),这个热力图可以高亮出图片里面跟CNN最后预测结果最相关的区域,所以这个CAM能解释网络模型到底是基于图片里面哪些部分作为证据进行了这次预测。比如说如下图,我们在caltech256上fine-tune了网络,然后对于每张图生成跟这张图所属类别的Class Activation Map,然后就可以高亮出图片里面跟类别最相关的区域。这里在训练过程中,网络并没有接收到任何bounding box的标定。所以一个在medical image analysis上直接扩展是,CNN分类网络预测出这张图里面有很大概率有cancer,这个高亮出来的区域很可能就是cancer区域,感兴趣的同学不妨试试看,很期待你们有新的发现。

 

四、行业知识的预处理

大家可能一开始的思维都是直接套用目前cv界的一些成果,这个领域我应该有一点点发言权,毕竟研究生阶段做的就是肺癌检测,算是小有心得,也开始参赛了(钱好多而且也想在毕业前证明三年没白干),我的建议是在考虑建模前,首先考虑下肺癌的影像学表现以及基本处理方法,大概1600个ct,如果不利用基本医学领域知识做预处理,再好的模型我还是持悲观态度。

继续补充,目前来看,这个赛题不太合理,已经有人在论坛里面说了,肺结节是肺癌的一种影像学表现形式,我们检测肺癌,

首先会去检测肺结节,但是现在赛题的label仅仅是有没有得癌症,这种量级的数据,模型是无法找到病灶的,

所以我们需要先做肺结节检测,一个ct包含200张图,真在起作用的可能只有五到六张,你一股脑丢给模型,它都不知道自己要干啥,搜索空间太大,这也就是我说的必须预处理。

 

五、一些结论

Jeff:该帖让大家明白了,预处理的重要性。而CNN的反卷积成为发现latent features的一个重要方法。很多时候,正确工具的使用决定了一个人在某行业的产出,甚至生存。
自然地,大数据特征过多,有必要根据”行业经验“对特征的重要性进行一些预判。
 
 
  

所谓套路

Ref: 参加kaggle竞赛是怎样一种体验?

一、最常用策略

好模型:在比赛中,最常用的分类器一般是Gradient Boosting Tree(GBDT)和Random Forest(对,你没看错,不是那个在教科书中推Dual时让很多人痛不欲生的SVM)
预处理:一些常见的预处理技巧,比如PCA,KMeans,TF/IDF,Hashing等等都还是必须的。这里就不展开讲了。
 

二、特征工程的重要性

对大多数比赛来说,Feature Engineering比选用什么模型更重要。
kaggle winner = feature engineering + ensemble + good machine + domain knowledge。
大部分kaggle比赛和machine learning关系不大。大部分比赛还是很brute force的方法,个人看法能拿到10%并不是很困难,

(1) 都是一些常见的featuer处理方法(Hash, BOW, TFIDF, Categorization, Normalization),

(2) 加几个常见模型(RF, GBDT, LR),

(3) cross-validation调参数,

(4) 最后ensemble一下。

(5) 最好有很好的机器(主要是ram,以及tree-based model并行),这样就不用太担心online training的问题,大部分的lib也能用了。

预定哪一家酒店


Expedia比赛的挑战是你基于在Expedia提供的用户的搜索数据中的一些属性来预测他们会预定哪一个酒店。在我们编程之前需要花时间先理解问题和数据。

如果当你在研究比赛时想要学习更多内容,欢迎选择我们的课程dataquest来学习关于数据处理,统计学,机器学习,如何使用Spark工作等等。牛课程:https://www.dataquest.io/dashboard

Expedia比赛

 

一、数据集

浏览预定流程可以帮助我们置身于数据描述的情景中更好的理解Expedia数据。训练数据达到了3.975GB (千万行级别),普通的编辑器无法打开。
 

二、预测什么

根据给定的一个用户的搜索数据预测哪个hotel_cluster会被预定。根据描述总共大概有100个集群。
每个集群的个数,有点groupBy的意思,统计每一个类的个数。
in[1]:train["hotel_cluster"].value_counts()

out[1]:
91 1043720
41 772743
48 754033
64 704734
65 670960
5 620194
...
53 134812
88 107784
27 105040
74 48355
 

三、训练、测试集的划分

"no bias" 查证

最为重要的就是,划分要保证 ”no bias“。

所以,要保证:测试的用户id是训练用户id的一个子集,用到了set。

test_ids = set(test.user_id.unique())
train_ids = set(train.user_id.unique()) # 确保test中的id是train中的子集
intersection_count = len(test_ids & train_ids)
intersection_count == len(test_ids) out:
True

随机抽取行

理想情况下,我们想要一个足够小的数据集可以让我们能够非常快的迭代不同的方法而且仍然能够代表整个训练数据集。

 
/* implement */
 
 
 
 
 

[Kaggle] How to handle big data?的更多相关文章

  1. [Dart] Capture and Handle Data Sequences with Streams in Dart

    Streams represent a sequence of asynchronous events. Each event is either a data event, also called ...

  2. data cleaning

    Cleaning data in Python   Table of Contents Set up environments Data analysis packages in Python Cle ...

  3. [Machine Learning with Python] My First Data Preprocessing Pipeline with Titanic Dataset

    The Dataset was acquired from https://www.kaggle.com/c/titanic For data preprocessing, I firstly def ...

  4. 【菜鸟学习jquery源码】数据缓存与data()

    前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ...

  5. 转:jQuery.data

    原文地址:http://www.it165.net/pro/html/201404/11922.html 内存泄露 首先看看什么是内存泄露,这里直接拿来Aaron中的这部分来说明什么是内存泄露,内存泄 ...

  6. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 创建复杂数据模型

    Creating a complex data model 创建复杂数据模型 8 of 9 people found this helpful The Contoso University sampl ...

  7. HDU 4286 Data Handler 双向链表/Splay

    Data Handler Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid= ...

  8. 读jQuery源码 jQuery.data

    var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g; function internalData( elem, n ...

  9. Kaggle Challenge简要介绍

    https://en.wikipedia.org/wiki/Kaggle 以下内容,直接摘自维基百科,主要起到一个记录的作用,提醒自己有时间关注关注这个竞赛. Kaggle is a platform ...

随机推荐

  1. 八:MVC初始化数据库

    生成数据库策略: CreateDatabaseIfNotExists:方法会在没有数据库时创建一个,这是默认行为. DropCreateDatabaseIfModelChanges:如果我们在在模型改 ...

  2. C/C++代码规范

    零.前言 笔者最近在看开源代码,看到代码格式各自参差不齐,感觉像是各家各有所长.因此打算写一篇关于C/C++代码规范文章,请各位参考,并践踏批评. 一.文件排版 1. 包含头文件 • 先系统头文件,后 ...

  3. linux(1)

    Linux/Unix操作系统 OS 系统软件 用户.应用程序 <-OS-> 硬件:CPU Memory Disk 外设管理软件测试方向: 被测系统主要的操作系统,监控系统资源.使用系统常用 ...

  4. 16-SQLServer强制走索引

    一.注意点 1.使用with(index(索引名称))来使SQL强制走索引. 二.示例截图 1.创建非聚集索引 2.不使用with,不走索引的截图 3.使用with,强制走索引的截图

  5. SPI使用笔记ADS1259+AD5676

    SPI的通信速率通常比较快.目前用到的ADS1259芯片,可以达到2-4MHz,可能可以更加快.一般spi都是从慢速开始调试,但是具体到某个芯片,应该核对芯片时序图,比如ti的ds1259,数据手册上 ...

  6. Rendering in UE4(Gnomon School UE4 大师课笔记)

    Rendering in UE4 Presented at the Gnomon School of VFX in January 2018, part two of the class offers ...

  7. zabbix添加监控项以及常用的键值

      zabbix自身提供了丰富的监控项,下面以“cpu空闲值”为例介绍zabbix如何添加新的监控项 1.创建主机群组 配置——主机群组——创建主机群组 2.创建主机 配置——主机——创建主机 3.添 ...

  8. 【SaltStack官方版】—— returners——返回器

    ETURNERS 返回器 By default the return values of the commands sent to the Salt minions are returned to t ...

  9. 多线程:Thread类的Join()方法

    多线程:Thread类的Join()方法 http://blog.163.com/hc_ranxu/blog/static/3672318220095284513678/ 当我们在线程B中调用Thre ...

  10. [Luogu] 维护序列

    https://www.luogu.org/problemnew/show/P2023 线段树双懒标记下放 #include <bits/stdc++.h> using namespace ...