上一篇,[Kaggle] How to kaggle?【方法导论】 html
这里再作一点进阶学习。git
Ref: Kaggle2017—1百万美金的肺癌检测竞赛的难点哪儿github
Medical image analysis是个很是有意义的研究方向,按道理属于Computer Vision,但因为没有像CV里面物体识别场景识别里标准化的数据库和评测方法,一直比较小众。算法
MICCAI是这个medical image analysis方向的顶会,目前并无被deep learning统治,常常看到mean-shift以及其余比较基础的图片处理的算法,深度学习在这方面应该有很大潜力。CV里扎堆的优秀同窗们不妨多看看这个方向,毕竟在某个疾病预测任务上能提高2%准确度比在Pascal VOC上费牛劲撸个0.5%提升有意义多了:)数据库
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。论文也放出来了,感兴趣的朋友能够读读:https://people.csail.mit.edu/khosla/papers/arxiv2016_Wang.pdf。网络结构大体以下图,思路挺简单。 dom
另外,在医学图像分析诊断预测里面,很是重要一点是模型的可解释性。就是你得解释清楚你这个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张图,真在起做用的可能只有五到六张,你一股脑丢给模型,它都不知道本身要干啥,搜索空间太大,这也就是我说的必须预处理。
Ref: 参加kaggle竞赛是怎样一种体验?
(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
hotel_cluster
会被预约。根据
描述总共大概有100个集群。
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“。
因此,要保证:测试的用户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
理想状况下,咱们想要一个足够小的数据集可让咱们可以很是快的迭代不一样的方法并且仍然可以表明整个训练数据集。