上一篇,[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. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)

    # -*- coding:utf-8 -*- china=u'我爱你,中国' #china=china.encode('utf8') file_txt = open("zhongguo.tx ...

  2. h5 特效

    地址:http://www.cnblogs.com/sun927/p/5842852.html 几个别人总结的css3炫酷效果,有需要直接拿来用即可,包括以下几个效果: 1.悬浮时放大 2.悬浮时转一 ...

  3. kotlin命令行交互式终端

    之前在http://www.cnblogs.com/webor2006/p/7532982.htmlKotlin的环境搭建篇提到过在开发Kotlin可以用最原始的挖掘机式的命令行去编译运行,这里学习一 ...

  4. Zookeeper与Kafka Kafka

    Zookeeper与Kafka Kafka Kafka SocketServer是基于Java NIO开发的,采用了Reactor的模式(已被大量实践证明非常高效,在Netty和Mina中广泛使用). ...

  5. String字符串反转

    new StringBuffer("abcde").reverse().toString(); 通过char数组进行转换 package com.test.reverse; pub ...

  6. 一文学会redis从零到入门

    本文参照视屏学习整理:https://www.bilibili.com/video/av16841549/?p=9 相关软件.资料: 基本条件:有虚拟机或相关linux系统,熟悉基本linux操作 本 ...

  7. [Cypress] Find Unstubbed Cypress Requests with Force 404

    Requests that aren't stubbed will hit our real backend. To ensure we've stubbed all our routes, we c ...

  8. 关于dll注入

    例如:     有一个游戏修改器:其中有一个按钮“自动打怪”:点击时游戏会实现相应的功能:     对于游戏程序来说,自动打怪操作本质上就是call调用一个函数:     但是修改器和游戏是两个独立的 ...

  9. Oracle查看锁表和解锁

    --注意权限问题 1.查看是否有被锁的表: select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a ...

  10. 解决Spring AOP Controller 不生效

    在spring-mvc.xml文件中,进行以下配置,就可以实现在Controller中, 方法一:最简单的,在spring-mvc.xml配置文件中,添加以下语句 spring-mvc.xml < ...