上一篇,[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
理想狀況下,咱們想要一個足夠小的數據集可讓咱們可以很是快的迭代不一樣的方法並且仍然可以表明整個訓練數據集。