2020年1月26日 星期日

[機器學習] SMOTE and undersamplimg

在醫學資訊學的領域裡面, 常常遇到一種很痛苦的情況, 就是想預測的事件佔訓練資料的比例太少, 舉例來說, 我們想用機器學習來預測某種罕見疾病的發生率, 可是大部分的臨床情形我們可能蒐集到幾百甚至幾千個符合條件的病人, 但是裡面只有十個病人有這個疾病, 這樣在使用機器學習來做預測的時候, 會遇到許多困難, 比如說要做cross validation的時候, 很容易某一個training set 完全沒有我們想預測的事件, 造成訓練結果不理想甚至有問題, 因此, 聰明的電腦科學家就想到一個辦法, 就是所謂的oversampling(過度取樣), 簡單來說就是把我們想預測的事件樣本把它增加, 來讓資料更容易訓練

其中有一個很有名的做法, 就是SMOTE(Synthetic Minority Over-sampling Technique), 其實這個方法早在2002年就有人提出來了(reference 1), 簡單來說, 就是選取相鄰的點, 然後再點跟點中間做內插, 內插得到的點, 就當作新的樣本, 用這樣來增加樣本數

paper 內其實pseudocode整理的非常好, 不過寫部落格就是要用自己的話說一次這樣記憶才會深刻XD, 因此還是來講解一下XD

pseudocode 我用中文稍微講解一下:

函數SMOTE(T,N,K)

輸入:  T:  minority class的個數
           N: 想拿多少比例出來做SMOTE
           K: 要找幾個相鄰的minority class的點來做SMOTE

輸出: T*(N/100)個點

演算法:

用白話來說就是先隨機分布樣本, 再把樣本裡面 T*(N/100)的樣本拿出來, 之後再針對每一個樣本, 針對其最接近的K個點, 取出其中一個點, 做內插, 內差的比例也是隨機決定的

其實這個算法還蠻簡單的, 不過作者再這篇文章裏面還有提到只做SMOTE可能還不夠好, 要改善majority class 跟 minority class的話, 還可以針對majority class 做undersampling, 也就是只取一部份的majority class來做預測

R語言裡面也有相關SMOTE套件, 有比較舊的DMwR, 還有比較新的SMOTEfamily

這裡簡單講一下 DMwR套件裡面的SMOTE 函數, 其實這個函數連undersampling都做了, 有幾個參數:

form: 拿來預測的formula, 其實簡單想就是拿來預測的分類
data: 拿來預測的資料
perc.over: minority class要增加幾倍, 舉例來說perc.over設為100,表示原本的minority class變成兩倍
k: 要看最近的幾個鄰居
prec.under: majority class要拿多少數量, 舉例來說perc.over設為100, 如果perc.under設為400,就會拿perc.over的四倍
learner: 可以不用設定, 也可以設成之後要拿來分類的演算法

reference:
1. Chawla, Nitesh V., et al. "SMOTE: synthetic minority over-sampling technique." Journal of artificial intelligence research 16 (2002): 321-357.
2. https://CRAN.R-project.org/package=DMwR 
3. https://cran.r-project.org/web/packages/smotefamily/smotefamily.pdf

2020年1月25日 星期六

[數學] 極限的概念

最近因為工作需要, 因此想開始看MIT OCW的微分方程單元, 常微分方程其實有一堆公式解, 憑著薄弱的印象還記的一些....., 不過才看沒幾個小節, 就覺得自己的觀念還是不夠扎實, 因此還是回來複習微積分, 一開始我先來看台大朱樺老師的, 先來整理極限概念

先從MIT OCW 的一個小概念開始, 自然數的指數函數, 大家都知道可以寫成$ f(x) = e^{x}$, 其中有兩個性質值得玩味:
1. $  \forall x \in R, f(x)>0 $
2. $ \displaystyle{\lim_{x \to -\infty}} f(x) = 0$

這邊引進了兩個概念, 第一個是極限的概念, 第二個是無限的概念, 到這邊如果觀念不清楚的話, 會一直想不懂為什麼第一個式子一定大於零, 第二個式子可以等於零

在這邊引用台大朱樺老師的講義, 裡面提到極限的直觀定義(白話來講: 就是比較沒那麼數學的定義), 就是我們可以把$ \displaystyle{\lim_{x \to a}} f(x) = L$, 理解成函數f(x)在a點附近有定義(但是在a點這個點不一定要有定義), 當我們很接近a點時, 函數f(x)的值會很接近L.

上述的定義可以看出一件事, 極限符號的等於其實不是真正等於, 而是很接近的意思

當然上面的講法還是不夠數學, 來看比較數學的定義, 一樣是引用台大朱樺老師的講義,

if f(x) is defined at some open interval including a,  $ \forall \epsilon>0, \exists  \delta >0,  if \;0< |x-a| < \delta, then \;|f(x)-L|<\epsilon$, then we can say $ \displaystyle{\lim_{x \to a}} f(x) = L$


上面的數學式子看起來很複雜, 其實白話翻譯跟前一個定義說的差不多, 可以理解成當我們想要找到一個很接近L的值的時候, 一定可以在函數上找到對應點來對應

數學這種東西, 不練習是學不會的, 以下來個簡單的小例題

例題練習:

prove $  \displaystyle{\lim_{x \to 3}} x^{2} = 9$

這個證明大部份人看到都不會太適應, 因為這是進入嚴謹數學的第一步, 首先我們來想看看要如何證明這個題目, 從定義出發, 對於每一個$\epsilon$, 我們至少要找到一個$\delta$, 來滿足條件, 反過來說, 如果我們從$\delta$出發, 可以對應到所有的$\epsilon$的話, 那就證明出來了, 證明方法如下:

$|x^{2}-9|=|x-3||x+3|$
我們取$\delta=1$, 則$|x-3|<1,  2<x<4,  4<|x+2|<6$
所以 $|x-3||x+3|< 6|x-3|$, if $\delta \leq 1$, 注意這裡是小於等於, 因為小於也會成立, 所以我們要怎麼選$\delta$, 才能保證涵蓋所有$\epsilon$呢? 其實不難, 不過第一個想到的人真的很厲害....

取法是$\delta = min(1, \dfrac{\epsilon}{6})$
我們可以分成兩個情況看,
第一個情況
$\min = 1$, 則$|x-3||x+3|< 6|x-3|$, 這是上面推導出來的
第二個情況
$\min = \dfrac{\epsilon}{6}<1$, 則$|x-3||x+3|< 6|x-3|$, 和上面的式子一樣

所以不論是哪一種情況, $|x-3||x+3|< 6|x-3| < 6\delta \leq 6* \dfrac{\epsilon}{6}=\epsilon$
QED.

回到一開始的例子, $ \displaystyle{\lim_{x \to -\infty}} f(x) = 0$, 表示當x足夠大,接近無限大的時候, f(x)會很接近0, 不過上面這段話用前面的定義是沒辦法推出來的, 極限在無限大或無線小時, 定義方式會稍有不同, 其實也就是把x的範圍改成大於或小於某個數,其他差不多

從一開始的定義裡面也可以看出來, 極限值只能有一個, 如果從左邊逼近跟從右邊逼近的值會不一樣的話, 則稱為極限值不存在

這樣講有點抽象, 舉例來幫助理解, $f(x) = \dfrac{|x|}{x}$, 求$ \displaystyle{\lim_{x \to 0}} f(x) = ?$, 簡單可以看出左極限和右極限的值不一樣, 一邊是1, 一邊是-1, 又依照原始定義, 區間內的點的對應值都會落在極限值附近, 所以極限值不存在(這是比較白話的講法, 比較數學的版本以後有機會再來補!)


reference:
1. 微分方程課程網址: https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/
2. 台大開放式課程, 朱樺老師講義(網址點此)
3. http://sites.science.oregonstate.edu/math/home/programs/undergrad/CalculusQuestStudyGuides/SandS/lHopital/define_limit.html
4. calculus, a complete course 7th edition
5. stewart's calculus, early transcendental, 6th edition

2020年1月19日 星期日

[遊記] 岡山登山 - 龍之口山

最近筆者去了岡山, 因為筆者平常很忙, 所以行程都是臨時隨便找的, 算是真正的自由行?

這次去的行程我猜一般台灣人不太會去, 因為我也是臨時google隨便亂找的XD, 因為筆者喜歡爬山, 因此找了一個位在岡山近郊"湯迫"(ゆば)的步道, 名字很霸氣, 叫做龍之口山, 交通方式也不難,  就在岡山車站前面的桃太郎大道搭車, 大概不用半小時就到登山口了. 這裡不得不感嘆日本人的細心, 小魯一上車就跟司機說我想去湯迫, 司機還一臉訝異, 特地跑來問我說, 到底去那麼郊外的地方幹嘛, 我就說我要去爬龍之口山, 司機還很好心的直接在我到登山口前面的站牌, 因為不是在湯迫站下車, 還要往前幾站XDDD

先來看登山口照片


登山口就在站牌旁邊, 開爬! 一開始爬不久, 就會遇到一個神社大門,
一直讓我想起之前玩電玩的時候, 那個在神社前面戰鬥的場景, 過癮!


剛開始比較陡, 可以看到步道上面還有些碎石, 不是很好走


步過過了一開始之後其實還蠻簡單的XDDDD, 感覺就是一般台灣郊山等級的步道, 不太困難, 沿路會有指標


不過悲劇的是, 到了某個有岔路的地方, 竟然指標只有一個(而且是指回原路的地方),可是有好幾個岔路啊, 這是只好先拍照, 然後選擇往上的步道



果然, 天公疼憨人? 一往上, 再走幾步路, 就到有指標的地方惹, 有兩條叉路,一條往山頂, 一條往神社, 我先往神社前進


一下子就到山頂的神社惹, 還聽到路上的阿伯跟神社工作人員說今天人怎麼這麼少XDDDD
                         

之後回頭, 繼續往山頂進攻, 山頂可以看到岡山市!!!!


下山有個小插曲, 就是發現下山有好幾條條路, 想走看看, 但是不太確定下山是不是有巴士可以搭乘, 於是就在山頂用破日文亂問, 結果日本人山友竟然帶我下山之外 還把我載到車站@@ 感動!

仔細想想, 日本真是個富足的國家, 不只是物質方面, 心靈也是, 願意幫助陌生山友, 真的令人感動!!!!

附上google map

2019年12月13日 星期五

[大腸直腸癌] 治療介紹

大腸直腸癌在飲食日漸西化的台灣, 可以說是一個常見的癌症, 這裡一樣也是參考知名醫學期刊Lancet的review以及NCCN guideline來做個整理

一. screening(篩檢):

目前台灣國健署補助五十歲到七十四歲的民眾, 兩年進行一次定量免疫法糞便潛血檢查

二. risk factor(危險因子):

1. 男性, 年齡增加
2. 生活習慣: 抽菸喝酒, 吃重組肉和紅肉,少吃蔬菜水果, 身體肥胖會增加大腸癌機率
3. 家族遺傳: hereditary colorectal cancer syndromes, positive family history
4. 藥物使用: aspirin, NSAID, menopausal hormone therapy, statin
5. 疾病: 糖尿病, 發炎性腸疾病

三. 致病機轉: 大腸直腸癌在致病機轉這方面研究的非常多

1. 病理上來看: 通常是由aberrant crypt(異常的隱窩), 變成polyp, 之後再變成癌症, 這個過程大概要十到十五年

2. 分子機轉: 這篇論文列出三種:

(1) adenoma-carcinoma pathway(70-90%)
(2) serrated neoplasia pathway(10-20%)
(3) Microsatellite instability(2-7%)

3.  left side v.s. right side colorectal cancer:

(1) right side colorectal cancer: cecum+ascending colon + transverse colon, 在胚胎學上為midgut的衍生物, 預後較差

(2) left side colorectal cancer: descending colon + sigmoid colon + rectum 在胚胎學上為hindgut的衍生物, 預後較好

四. 診斷:

1. colonscopy(大腸鏡): 做檢查看病兆以及做切片

五. 分期:

1. AJCC 8:

T 分期: 由侵犯深度決定
N 分期
M 分期

六. 治療:

1. 內視鏡切除: 針對比較小比較早期的腫瘤

2. 手術切除: 標準治療, 其治療準則被稱作complete mesocolic excision priciple, 不過取淋巴結的方式目前還沒有定論; 至於針對rectal cancer 的術式被稱為TME(total mesorectal excision)

3. 放射治療: 針對直腸癌, 前導性的放射治療(neoadjuvant CCRT or short course RT)是可以被考慮的, 目的是讓腫瘤變小, 讓之後手術比較好處理以及希望保護病人更多的腸道

4. 系統性治療: 這塊目前發展的很迅速

七. 直腸癌的放射治療:

因為小弟是放腫科的, 因此對於直腸癌的放射治療特別需要著墨XD, 目前有三種作法:

1. short course RT(25Gy/5Fr) -> 開刀
2. short course RT -> chemotherapy -> 開刀
3. neoadjuvant CCRT(45Gy/25Gr - 50.4Gy/28Fr) -> 開刀

=> 2021更新: 目前NCCN guideline 建議使用Total neoadjuvant therapy 的作法, 希望將本來在術後進行的化療移到手術前施打, 因此上面的作法已經有所更動, 有機會來寫一篇更新的!

reference:

1. Lancet. 2019 Oct 19;394(10207):1467-1480. doi: 10.1016/S0140-6736(19)32319-0.

2. https://www.hpa.gov.tw/Pages/Detail.aspx?nodeid=621&pid=1136

3. https://training.seer.cancer.gov/colorectal/anatomy/layers.html


2019年12月11日 星期三

[肝癌] 肝細胞癌治療


肝細胞癌(hepatic cellular carcinoma)在台灣來說是國病, 因為早期在B肝疫苗還沒有常規施打前,台灣B肝帶原者非常多, 所以肝細胞癌的人數也非常多, 當然, 造成肝細胞癌的原因很多,並非只有B 肝, C肝, 藥物, 酒精, 黃麴毒素...., 一大堆因子都可能導致肝細胞癌, 而且肝癌的治療其實很難懂, 好在筆者最近找到一篇NEJM review, 裡面整理得清楚明瞭, 因此筆者再搭配NCCN以及其他資源整理成下面這篇, 請各位看倌繼續看下去. 

一.  分子機轉:

可以簡單分成:

1.  proliferation class: 預後差的gene signature, TP53突變,chromosome instability; 和HBV感染有關, 臨床預後較差
2.  nonproliferation class: CTNNB1突變, 基因表現和正常的肝細胞差不多, immune exclusion; 和HCV感染和喝酒有關, 臨床預後較好

二. 篩檢(screening):

病人有肝硬化(liver cirrhosis) 或是 B肝帶原, 就應該接收常規篩檢, 篩檢方法為超音波 +/- AFP, 再看結果決定後續是要做其他檢查或是繼續追蹤.

NCCN 提到 AFP positive or 超音波量到的腫瘤大於1 cm, 就會考慮做腹部的電腦斷層或是核磁共振

三. 診斷: 影像上要確診是肝細胞癌(HCC), 有一個準則就是LI-RADS(Liver Imaging Report and Data System), 這裡參考的是2018的版本.

LIRADS 在前言裡特別提到這裏的影像診斷準則只適用於高風險病人(肝硬化 or B肝帶原 or 之前得過肝細胞癌), 其影像特徵有以下幾項:
1. arterial phase hyperenhancemant
2. observation size
3. enhancing capsule
4. nonperipheral washout
5. threshold growth: 在六個月內體積增大50%以上



左上: 超音波; 右上: pre-contrast phase; 左下: arterial phase; 右下: venous phase
P.S 一般triphasic CT 分成 arterial phase, venous portal phase, delayed phase; HCC的影像學診斷 特徵為arterial phase hyperenhancemant; venous portal phase early washout, 如上圖
                               (圖片取自109第二次醫師國考醫學五)

四. 分期(staging):

1. BCLC stage: (這個分期在台灣目前癌症登記是用不同的版本,可以見連結:點此, 不過下面的表還是舊版的)


Stage
   肝腫瘤
 肝功能
  ECOG
0    very early stage
     1, <=2cm
Child-pugh A
   0
1        early stage
     1顆, > 2cm
  2-3顆,<= 3cm
Child-pugh A-B
   0
2  intermediate stage
    >3顆 or >=2顆(any>3cm)
Child-pugh A-B
   0
3    advanced stage
侵犯portal vein
Or 肝外轉移
Child-pugh A-B
  1-2
4     terminal stage

Child-pugh C
  3-4

五. 治療:

1. 肝細胞癌治療最重要的就是如果病人可以接受治癒性治療的話(例如切除,移植, 或是比較小粒的肝腫瘤用ablation(消融)), 就盡量接收治癒性治療

2. 其他局部治療選項包括對較大的腫瘤做ablation(消融), arterially directed therapy(TAE, TACE, Yi-90), or 放射治療, => 目的是為了治療無法治癒或是為了讓腫瘤縮小,讓之後有機會做治癒性治療

3. systemic treatment: 有些病人做過上述1,2提到的治療後疾病仍然繼續惡化或是一開始就無法做上述提到的治療, 則會考慮給系統性藥物

(1) First line: atezolizumab + bevacizumab (NCCN guideline2021目前最推薦的用法, 不過需要病人是child-pugh A), Sorafenib, Lenvatinib

(2) second line: Regorafenib or Carbozantinib or Ramucirumab or Immunotherapy or Sorafenib(after Lenvatinib), Lenvatinib

p.s. 最近還有一篇台灣之光, 發表在ESMO 2019, 由台大癌醫鄭安理教授所主持的phase III 研究, atezolizumab + bevacizumab v.s. sorafenib, 針對不能開刀的HCC, 發現OS和PFS都明顯改善(連結在此), 後來更新的結果, 2020年發表在nejm(連結)

六. 放射治療相關:

身為放腫科醫師, 最在乎的就是放射治療, 放射治療在肝癌可以用傳統的劑量(conventional fraction size:1.8-2.0Gy) or 立體定位放射治療(SBRT),如果要用SBRT的話, 最好搭配4DCT

七. 解剖構造: 其實應該寫在最前面, 不過實在懶得改XD, 可以參考radioassistant網站(連結點此), 學習所謂的Couniad classificaiton, 臨床上非常重要! 另外就是腹部相關的正常結構在RTOG有圖譜(連結點此

reference:

1. Longo, D. L. (2019). Augusto Villanueva, MD, Ph. D. N Engl J Med, 380, 1450-62.
2. https://www.acr.org/-/media/ACR/Files/RADS/LI-RADS/LI-RADS-2018-Core.pdf?la=en
3. http://tcr.cph.ntu.edu.tw/main.phpPage=SA3&KeyID=10064915995d1457ab1125f
4. NCCN guildeline
5. https://www.esmo.org/Press-Office/Press-Releases/ESMO-Asia-Congress-2019-IMbrave150-atezolizumab-bevacizumab-hepatocellular-carcinoma-HCC-Cheng
6. 考選部網站
7.  Brehmer, Katharina, et al. "Triple arterial phase CT of the liver with radiation dose equivalent to that of single arterial phase CT: initial experience." Radiology 289.1 (2018): 111-118.
8.  http://www.radiologyassistant.nl/en/p4375bb8dc241d
9.  RTOG atlas