[Kaggle] How to handle big data?

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

这里再作一点进阶学习。git

 

 

写在前面


"行业特征" 的重要性

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

1、医学顶会 MICCAI

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

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

 

2、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等方向看看有没有合适的方法能够借鉴。我不是这方面的专家,就留给各位见仁见智了,欢迎分享。app

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

 

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

另外,在医学图像分析诊断预测里面,很是重要一点是模型的可解释性。就是你得解释清楚你这个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区域,感兴趣的同窗不妨试试看,很期待大家有新的发现。

 

4、行业知识的预处理

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

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

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

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

 

5、一些结论

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

所谓套路

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

1、最经常使用策略

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

2、特征工程的重要性

对大多数比赛来讲,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比赛

 

1、数据集

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

2、预测什么

根据给定的一个用户的搜索数据预测哪一个 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
 

3、训练、测试集的划分

"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 */
相关文章
相关标签/搜索