• 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      統計分析

      [SAS] Ma…

      2026-09-08

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

  • SAS
    • SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22

Wenwu's blog
wenwu's blog
  • 請我喝珍奶

Popular Posts

[R]散佈圖...

2019-12-31

[SAS]L...

2020-06-10

[SAS][...

2019-07-08

[R]Log...

2019-10-31

[SAS] ...

2020-01-22

[SAS]線...

2020-02-26

[SAS]存...

2019-12-18

[SAS]迴...

2020-02-28
閱讀筆記

[閱讀心得#1]原子習慣

by wenwu 2020-11-03

每天都進步1%,一年後你會進步37倍
每天都退步1%,一年後你會弱化到趨近於0 
你的一點小改變,將會產生複利效應,如滾雪球般,帶來豐碩的人生成果

原子習慣是最近的暢銷書,還來不及買一本回家,就從朋友身上得到一本(真是太感謝了

書裡提到很多非常實用的習慣養成,這本書非常值得買回去一看再看

以下擷取書中我喜歡的內容和大家分享

原子習慣


書中提到習慣的四階段模型:

提示、渴望、回應、獎賞

簡單的心理學方法,使四個步驟會誘使你養成習慣


提示 : 讓提示顯而易見

生活中有很多微不足道的習慣我們無法察覺:像是手機響了,我們自然而然會接電話。上完廁所,我們自然會關燈。

做完(目前的習慣)之後,我會執行(新的習慣。)

關鍵在於把想要的行為跟每天已經在做的事情綁在一起,就很容易養成新的習慣。比如,吃完晚餐,將直接將碗盤放進洗衣機。
如果要讓提示顯而易見,可以將新行為放入例行事務中。像是早上整理床鋪後放一本書在床頭,這樣晚上時就會有一本書在床上等你


渴望 : 讓習慣有吸引力

極度容易養成習慣的行為─吃垃圾食物、打電動、瀏覽社群媒體─都與較高濃度的多巴胺有關。我們必須讓習慣變得有吸引力,因為一開始激勵我們採取行動的,是對獎賞的預期。

運用誘惑綑綁,將[想要]的行為與[需要]的行為配對。

比如你很想看netflix,卻一整個禮拜沒有運動,可以逼自己只能在跑步機上追劇,這樣就會使你增加跑步的慾望。

另外,我們的生活圈會深深影響我們的習慣。最有效的方法就是加入一個把你想要的行為視為常態的文化之中。


回應 : 讓行動輕而易舉

很多時候我們都知道建立習慣的好處,卻遲遲無法開始。我們可能一直停在”規劃”的階段,卻一直沒有”行動”。

書中的例子提到,要精通一項習慣,關鍵是由重複開始,而非完美。
習慣的養成取決於頻率,而非時間
只要一直重複一個習慣,所有人都能夠變成專家。

創照出一個讓正確的事情盡可能輕而易舉的環境。
在看youtube或netflix時,最難停下的原因就是自動撥放系統,有時候我們連一個手指頭都不用動,新的一集又開始,就越來越難停止。
假若要想成習慣,為了以後方便,把環境預備好。
比如: 每次洗完澡後就清理浴室,事先準備好運動服裝,好在下班後直接去運動。
或者運用[兩分鐘法則],[每晚的就寢閱讀]變成[讀一頁],[做30分鐘瑜珈]變成[拿出瑜珈墊],並且可以階段性的改變習慣。
成為晨型人,第一階段,每天晚上十點前到家。第二階段,每天晚上十點前關掉所有電子裝置。第三階段,每晚十點前躺到床上(閱讀或更另一半聊天)。第四階段,每天晚上十點前熄燈。第五階段,每天清晨六點起床。


獎賞:讓獎賞令人滿足

第四步驟是我最喜歡的步驟,也就是讓習慣變成一種獎賞,讓獎賞令人滿足。當我們得到獎賞後就更容易養成習慣。
像是: 使薄荷口味的牙膏,讓刷牙後有口氣清新的感覺,創造正面的刷牙經驗。帶來獎賞的行為會被重複,帶來懲罰的行為會被避免。

如何每天堅持好習慣,最好的方法就是紀錄。習慣追蹤器幫我們養成習慣。
習慣追蹤器:

  1. 好處一,習慣追蹤顯而易見。
  2. 好處二,習慣追蹤有吸引力。
  3. 好處三,習慣追蹤令人滿足。

習慣追蹤器會幫助我們持續追蹤習慣,但是不是讓我們被這些紀錄而綁住。
[當測量成了目標,就不再是個好的測量方式]測量只有在引導你、祝你看清全局,而不是消耗你心神的時候,才對你有用。


如果喜歡這本書真的很值得買回家收藏。我今天就練習看完一本書買上寫閱讀心得,好好養成讀書且有輸出的生活
原子習慣

2020-11-03 0 comment
0 FacebookTwitterPinterestEmail
SAS

[SAS]傾向分數配對(Propensity score matching)

by wenwu 2020-10-28

[SAS]傾向分數配對(Propensity score matching)

在做研究時,我們目標通常是比較實驗組和對照組,想知道兩者的差別或比較兩者的存活表現。
但是為了降低研究的偏差,我們希望兩組的差異不會影響我們的實驗結果,所以可以用傾向分數配對(propensity score matching)對干擾因子做適當的配對,使其影響降到最低。傾向分數配對能夠有效讓兩組的共變項更為均勻,使所有干擾因子都能控制的差不多。

今天就簡單介紹傾向分數配對(propensity score matching),以及如何在SAS上應用


傾向分數配對(Propensity score matching)的特色

傾向分數主要目的是讓治療組與非治療組在干擾變項(X)的分布大致相同。干擾變項,即治療與否受到哪些變數影響。通常會考慮常見的干擾因子,像是年齡、性別、共病症等等,可將這些視為解釋變項。

  1. 傾向分數分析的目的 : 降低混淆效果
  2. 主要有四種應用方法: 1. 配對,2.加權,3.分層,4.統計控制
  3. 傾向分數配對(propensity score matching): 經由將傾向分數相近的治療組與控制組配對起來,營造類似隨機試驗的環境(不包含未測量到的混淆因子)
  • 優點:
  1. 相較於分層分析與統計控制,PSM更能有效使兩組的共變項更均勻
  2. 很直覺的提供像隨機試驗那樣的報告。i.e.透明化呈現兩組的基本特性在表格中。
  • 劣勢: 
    由於PSM會剔除相當人數的治療組與許多控制組(一般控制組人數較多)
    會導致
  1. 由於損失許多人數的控制組,無法將結果推論到整個群體
  2. 由於人數下降,因此統計檢定力(Power)下降。i.e.會得到較不顯著之結果
  • 考慮、技術細節:
  1. 配對演算法的設定(optinal,greedy nearest neighbor matching)
  2. 是否容許配對後的置換
  3. 將資料排序予以隨機化

SAS example

接下來要進入SAS的實作。
首先,需要使用SAS提供的macro: %OneToManyMTCH,下載之後macro在附錄,可以直接複製貼上使用
檔案裡有很詳細的介紹,包含配對前後的卡方值比較等等….

而這個PSM是base on Logistic regression的,使用logistic regression可以幫我們依據每一位病人的變項,計算每一個病人的機率值(P)
使用logistic regression,可以幫我們得到P值,%OneToManyMTCH會依據這些P值,幫我們做傾向分數配對

所以在跑logistic regression,可以挑選需要配對的變項。比如: 我們希望下面五個變項使用配對,就必須寫在logistic regression上面(age_gp comorbidity_gp grade_gp diag_yr stage),而surgery就是我們的實驗組和對照組(01資料),下面的程式最重要的就是這一行

output out=P prob=prob;

在logistic regression上面加這一句,就會幫你計算每一個病人的機率值(Prob),並且存在 P

[SAS]Logistic regression 羅吉斯迴歸 複習

proc logistic data=X;
class
AGE_GP(param=ref ref='1.< 40')
COMORBIDITY_GP (param=ref ref='3.>=2')
GRADE_GP(param=ref ref='3 and 4')
DIAG_YR(param=ref ref='2004')
STAGE(param=ref ref='3')
;
model Surgery(event='1')=
AGE
COMORBIDITY_GP
GRADE_GP
DIAG_YR
STAGE
;                                             
output out=P prob=prob;
run;

可以發現跟平常跑的logistic regression 不太一樣,在work.P 可以發現每一位病人都有P值

最後跑%OneToManyMTCH的macro
第一個work是P檔案的位置
第二個P就是經過logistic regression後所計算的P值
第三個Surgery就是我們的實驗組和對照組(01資料)
第四個ID是病人的ID,幫助程式識別
第五個MM1,就是最後分類完要存檔的位置
第六個1,是設定要1:N的傾向分數配對,這裡設定是1:1,可以自己選擇

%OneToManyMTCH(work,P,Surgery, ID, MM1,1);

最後在MM1 就能看到程式所幫你挑好的新實驗組和對照組了

照理來說,經過傾向分數配對之後,兩個組別應該就不會有顯著性差異了,大家可以做一下卡方檢定檢查。當然也可以挑選需要控制的變數於logistic regression,這幾個變項在配對前有顯著性差異,在配對後就不太會有這個問題了

2020-10-28 0 comment
1 FacebookTwitterPinterestEmail
統計分析

健保資料庫介紹

by wenwu 2020-10-16

健保資料庫介紹

工作快一年半了,主要的工作內容都與健保資料庫離不開關係
今天想要依照我所使用健保資料庫的經驗與大家介紹

主要也是本身的記憶力太差,若是離開這份工作後,也就講不出健保資料的介紹了,所以趁著記憶猶、最有心得的時候來分享


如果想要知道健保資料庫提供什麼樣的資料的話,可以直接到衛服部統計處查詢,,網站中提供最完整的資料項目以及明細,但是今天不一一介紹每一個變項
今天分享的內容主要從我的經驗為主,分享的大綱如下:

  • 如何使用健保資料庫
  • 資料庫介紹
  • 資料使用實例分享
  • 使用健保資料庫的優缺點

如何使用健保資料庫

健保在台灣的普及率非常高,所以台灣的健保資料庫收集的也非常完全。
但是要如何取得這份資料呢? 是每一個人都能夠使用嗎?

首先,我們要知道資料的來源是來自衛服部統計處的資料科學中心。大約有八十幾個資料能夠使用(待會會介紹)。
當然資料不是隨便的人都能使用的,也不是在網路上的open data 可以給大家下載,使用資料是需要申請。
而且資料也不是申請之後就可以帶回家使用,需要在衛服部所屬的資料科學中心才能進行分析。

大多申請的案件是衛服部的計畫或是碩博士論文。其中申請流程包誇通過IRB(人體試驗委員會)核可等等相關的流程。

提供IRB核可後,可以向衛服部提出申請。在申請的過程中,需要填寫勾選表(也就是需要的欄位),填寫每個欄位需要申請的原因。初審過後繳費,並且等待資料處理。

簡短了介紹申請資料庫的流程,但申請是非常花時間的。記得今年在四月左右處理IRB文件,接續處理申請計畫書與研究計畫。五月中時將填寫好的文件送到衛服部,一來一往更改後大約四週後通過初審,再過四週後通過複審,進行繳費。流程大約花費兩個多月的時間。當然不是申請完就能夠馬上使用資料,資料處裡可能再花上2.5個月的時間。

所以前前後後從申請IRB到能夠使用資料,大約也要半年的時間,目前預計這個月底我可以使用新的資料。

剛剛有提到使用資料需要在衛服部所屬的資料科學中心才能進行分析。
進去資料中心是不能帶任何電子產品的,不能攜帶手機、USB、電腦等相關用品,必須兩手空空只帶頭腦進去,進行一切的分析。而且必須是國人才能進入加值中心。

當然,攜出資料也有相關的規定,不能攜帶小於三的統計結果等等。所以可以看得出來這份工作是蠻需要專業的,進去後只能靠自己一個人分析,有時間限制與專業的考驗。


資料庫介紹

再來就是介紹有甚麼資料可以使用了,但是這邊不一一贅述,資料庫有八十幾份資料可以選擇(一開始就需要依照資料檔與欄位選擇,並且計算費用)如果想知道有哪些資料可以到衛服部的統計處查看

最常用的資料庫為健保資料庫與癌症登記檔:

健保資料庫可以分為三個部分:

  1. 費用檔 
    全民健保處方及治療明細檔_門急診
    全民健保處方及治療明細檔_住院
    全民健保處方及治療明細檔_藥局
    全民健保承保檔
  2. 醫令檔
    全民健保處方及治療醫令明細檔_門急診
    全民健保處方及治療醫令明細檔_住院
    全民健保處方及治療醫令明細檔_藥局
  3. 基本資料檔
    醫事機構現況檔
    醫院醫療服務量檔
    醫事機構基本資料檔

整個健保資料庫的核心在於費用檔,它紀錄了就診病患、醫師、疾病、時間、院所,以及費用的相關資訊。
費用檔不但明列了就診的總費用,還記錄了根據不同檢查、診療,處置等項目。其中也包誇時間相關的變項:就診日期、申報日期、住院日期和急慢性病床天數。並且也記錄的病患就診的原因。

相較於費用檔,醫令檔所紀錄的變數相對簡單。除了串連費用檔所須變數外,就只有醫令類別、醫令代碼、醫令單價、醫令數量,以及總金額等變數。
但是醫令檔的數量大過費用檔。

整個健保資料庫最龐雜的應屬基本資料檔。基本資料檔共包括了六個和醫療院所相關,兩個和就診醫師相關,以及兩個和就診病人相關的十個檔案。


癌症登記檔

  1. 長表 Long Form (LF)
    子宮頸癌、乳癌、口腔癌、肺癌、肝癌、結直腸癌、攝護腺癌、胃癌、食道癌、膀胱癌、鼻咽癌、主唾液腺癌、子宮體癌、卵巢癌和血液腫瘤
    95年以前共有65個欄位,96年後共有95個欄位
  2. 短表 Short Form (SF)
    95年以前共有20個欄位,96年後共有33個欄位
  3. TCDB

癌症登記檔主要是由長表LF、短表SF以及TCDB組成。最常使用且最完整的為長表LF,總共收錄15種癌症,表示這十五種癌症的完整資料都在長表中。
而短表與TCDB的資料就沒有長表這麼齊全。

以下為長表的變項,其中紅色的部分是短表的變項,表示黑色這些項目短表都沒有。

在分析資料時時常會使用癌症的期別、TNM的期別,都無法使用。
所以若是想要分析的資料不是長表收錄的十五種癌症,就會發現有很多需要的資料卻沒有欄位。


資料使用實例分享

可以使用資料之後,你會發現無法馬上分析。因為資料都分散在各個檔案中,無法連結。

各個檔案中都有能夠連結的對照鑑值,像是連結醫療機構資料檔會使用Hosp_ID,醫令檔連結明細檔使用的對照鑑值有六項: FEE_YM、APPL_TYPE、APPL_DATE、CASE_TYPE、SEQ_NO、HOSP_ID,需要這些關鍵鑑值才能夠串聯這些檔案。


因為無法在網路上分享我目前分析過的資料,但是可以簡單敘述一下:

在做數據分析、統計檢定時,最重要的就是要篩選樣本。事實上篩選樣本的過程也是最花時間的,整理資料+資料串檔+篩選樣本可能就會花上80%的時間。

假設現在有興趣的是某個癌症(例如:乳癌),需要先篩選符合的病人(ICD : C50) ,另外可能因為病人的某種症狀會影響研究結果,所以在篩選樣本時也會先排除(比如希望能排除已經有癌症的病患 等等) 
(非常輕描淡寫的形容……)

接下來也要注意要使用的變項,比方性別、年齡、癌症期別、是否做過化學治療、放射線治療、賀爾蒙治療等等。
有時候變項並不是直接出現在資料庫中,有時候我們想知道病人的共病症分數(Charlson comorbidity index; CCI),就需要寫程式將計算每一位的CCI index。

接下來就可以進行分析了!


使用健保資料庫的優缺點

台灣有99.9%人使用健保,所以健保資料庫非常接近全台的醫療狀況。
健保資料庫的第一個優點就是 : 量大、並且貼近台灣的醫療情況

我們來看看下面一張圖,這是A組(紅色虛線)和B組(藍色實線)的五年overall survival 。
光用眼睛看,你覺得哪一個存活比較好呢?

若是光看圖的話,兩組的存活非常接近,可能分不出區別。

但是這兩組存活的 log-rank test的 p-value<0.0001,表示兩組是有顯著差異的,A組(紅色虛線)的存活好於B組,並且是有統計上的差異。

這就是使用健保資料庫的好處,當差異很小時,我們的統計檢驗是很重要的。因為資料庫的數據龐大,即使兩組的結果非常靠近,也能有統計上的顯著差異。


再來要提到缺點,在全國醫院的努力下,台灣擁有如此健全的資料庫
但是可能有些人(先說不是我)覺得資料不夠一致,這樣的資料需要經過太多人的手,定義上不夠完全,一定會有些出入

也就是所謂的 Garbage in, Garbage out

這我也曉得,當收集資料的質量不好時,當然無法有可信的研究結果

但是在健保資料庫上是有方法可以解決的,當我們的樣本夠多,就能夠進行篩選。比方再篩選樣本時挑選已經有癌症的病患或是各種會影響實驗結果的項目。所以…

只要做好正確的篩選,當我們能夠收集到足夠的樣本,就能幫助我們得到正確的研究結果。

健保資料庫是非常有利用價值的,就取決於你如何使用它。

2020-10-16 0 comment
0 FacebookTwitterPinterestEmail
機器學習

CNN的應用 What can CNN do? (Part3)

by wenwu 2020-09-02

CNN的應用 What can CNN do? (Part3)

今日的課程來自於: https://youtu.be/5BJDJd-dzzg (54分-79分)

前兩篇中分別介紹了 CNN如何使用、CNN是如何運作的
今天要來介紹幾種CNN的應用方法


Deep Dream

Deep Dream就是,如果你給machine一張image,他會在這image加上他看到的東西,將圖片丟到CNN裡面去,然後你把某一個convolution layer裡面的filter或 fully connected layer 裡的某一個 hidden layer 的output (vector)拿出來,把裡面的值調大(正的調大,負的調小),然後把它作為新的image的目標

調整好之後,然後用gradient descent 的方法找一張image X,讓他通過這個hidden layer後的output 就是你調整的target,這麼做的目的就是,讓CNN誇大化他看到的東西 — make CNN exaggerates what is sees

也就是說,如果某個filter有被activate,那你讓他被activate的更劇烈,CNN可能本來看到了某一樣東西,那現在你就讓他看起來更像原來看到的東西,這就是所謂的誇大化

將上面的image 拿去做Deep Dream 的話,你看到的結果就會像下面這個樣子

你會發現,圖片中有一些念獸,要仔細看才看得到,比方像右側的熊,他原本只是一個石頭,對機器來說,它在看這張圖片時,本來就覺得像一隻熊,所以你更強化這件事,讓他看起來真的就變成了一隻熊,這就是deep dream


Deep Style

Deep Dream還有一個進階的版本,就叫做Deep Style,如果今天你input 一張image,Deep Style 做的事情就是讓machine去修改這張圖,讓他有另外一張圖的風格,如下圖所示:

具體的做法參考reference: A Neural Algorithm of Artistic Style

可以發現將image餵給機器之後,出現了一張像吶喊的照片
Deep Style 的思路如下: 你把原本的image丟給CNN,得到CNN filter的 output,代表這樣image裡面有甚麼樣的content,然後你把吶喊也丟到CNN裡面得到filter的output
注意! 我們並不在乎一個filter output的value到底是什麼,一個單獨的數字並不能代表任何問題,我們真正在意的是,filter和filter的output之間的correlation,這個correlation代表一張image的style

接下來你就再用一個CNN去找一張image,這張image的content像左邊的圖片,比如這張的image的filter output的value像左邊的圖片;同時,讓這張image的style像右邊的圖片,所謂的style像右邊的圖片是說,這張image output的filter之間的correlation像右邊這張圖片

最終你用gradient descent找一張image,同時可以maximize左邊的content和右邊的style,他的樣子就像上圖左下角所示


CNN 使用於AlphaGo | What does CNN do in Playing Go

CNN 不只可以處理影像,還可以應用於其他東西上,比如出名的alphaGo

想讓machine來下圍棋,不見得要使用CNN,其實一般typical的neural network也可以幫我們做到這件事情

你只要learn一個network,也就是找一個function,他的input是棋盤當前的局勢,output是你下一步落子的位置,這樣其實就可以讓machine學會下圍棋了,所以用fully connected 的 feedforward network 也可以做到讓machine下圍棋這件事情

也就是說,你只要告訴她input是一個19*19的vector,vector的每一個dimension對應到棋盤上的某一個位置,如果有一個黑子就是1,如果有一個白子的話就是-1,沒有東西就是0。所以你若把棋盤描述成一個19*19的vector,丟到fully connected的feedforward network裡,output也是19*19個dimension,每一個dimension對應到棋盤上的一個位置,那machine就可以學習下圍棋了

但實際上,如果我們使用CNN的話,可以得到更好的performance,我們之前舉的例子都是把CNN應用在圖片上面,也就是input一個matrix,而棋盤也可以表達成一個19*19的matrix,那對CNN來說,就直接把他當成一個image來對待,然後再output下一步要落子的位置,具體的training process是這樣子的:

Why CNN for Playing Go

自從AlphaGo用了CNN之後,大家都覺得CNN很厲害,所以有時候如果你沒有用CNN處理問題,人家可能來問你,你怎麼沒有用CNN,他可能不知道CNN是什麼,但是他就會問你為甚麼沒有用CNN,CNN不是比較強嗎?

什麼時候可以用CNN呢? 你的image該有哪些特性,也是CNN(part 1)提到的三點:

  1. Some patterns are much smaller than the whole image
  2. The same patterns appear in different regions
  3. Subsampling the pixels will not change the object

CNN能夠用在AlphaGo上,因為圍棋有一些特性和圖像處裡是很相似的

在property 1, 有一些pattern是比整張image要小的,在圍棋上,可能也有同樣的現象。我們只需要偵測一部分就能知道是否白子處於被吃的狀態,我們不需要看一整張棋盤,這跟image有著同樣的性質;在AlphaGo裡面,他第一個layer其實就是用5*5的filter,顯然做這個設計的人,覺得圍棋上最基本的patten可能都是在5*5的範圍內可以被偵測出來

在property 2,同樣的pattern可能會出現在不同的region,在圍棋上可能也有這個現象,像這個叫吃的pattern。所以你可以用同一個detector,來處理這些在不同位置的pattern

所以對圍棋來說,他在第一個observation和第二個observaion是有image的特性的,但是沒有辦法想通的,就是第三點Max pooling

Max pooling for AlphaGo? — read alpha-go paper

我們可以對一個image做subsampling,拿掉奇數行、偶數列的pixel,把image變成原本的1/4也不會影像你看這個圖的樣子,基於這個觀察才有Max pooling這個layer;但是對圍棋來說,好像不適合作max pooling

我們來看AlphaGo的paper,他只說使用了CNN,卻沒有在正文裡面仔細苗訴他的CNN架構,但是在附錄中,其實是有描述neural network structure的,如下圖所示

他是這樣說的,input是一個19*19*48的image,其中19*19是棋盤的格局,對AlphaGo來說,每一個位置都用48個value來描述,因為加上了domain knowledge,他不只是描述某位置有沒有白子或黑子,他還會觀察這個位置是不是處於被吃得狀況等等

先用一個hidden layer對 image做 zero padding,也就是把原來19*19的image外圍捕0,讓她變成一張23*23的image,然後使用k個5*5的filter對該image做convolution,stride設為1,activation function 用的是ReLU,得到的output是21*21的image;接下來使用k個3*3的filter,stride=1,activation function 還是使用ReLU,……

你會發現這個AlphaGo的network structure 一直在用convolution,其實根本就沒有使用Max pooling,原因並不是疏失了甚麼,而是根據圍棋的特性,本來就不需要Maz pooling

Neural Network 架構的設計,是應用之道,存乎一心


More Application — Speech、Text

Speech

CNN不只可以應用在圍棋上,也可以使用於語音處裡,我們把一段聲音表示成spectrogram,spectrogram的橫軸是時間,縱軸是這段時間裡聲音的頻率

下圖是一段”你好”的音頻,偏紅色代表這段時間裡該頻率的energy是比較大的,也就對應著”你”和”好”這兩個字,也就是說spectrogram用顏色來描述某一個時刻不同頻率的能量

我們也可以讓機器把這個spectrogram當作一張image,然後讓CNN來判讀,input這張image對應著甚麼樣的聲音信號,那通常用來判斷結果的單位,比如phoneme,就是類似音標這樣的單位

這邊比較神奇的地方就是,當我們把一段spectrogram當作image丟到CNN裡面的時候,在語音上,我們通常只考慮在frequency(頻率)方向上移動的filter,我們的filter就像上圖這樣,是長方形的,他的寬跟image的寬是一樣的,並且filter只在Frequency即縱座標上移動,而不再時間的序列上移動

這是因為在語音裡面,CNN的output後面都還會在接別的東西,比如LSTM之類,他們都已經有考慮typical 的 information,所以你在CNN裡面再考慮一次時間的information其實沒什麼特別的幫助,但是為甚麼在音頻上的filter有幫助呢?

我們用CNN的目的是為了用同一個filter把相同的patten給detect 出來,在聲音訊號上,男女說同樣畫看起來這個spectrogram是非常不一樣的,但只是一個頻率的shift(位移)而已,其實pattern是相同的,比如pattern是spectrogram變化的情形,男女的聲音片化情況可能是一樣的,他的差別可能只是所在的範圍不同而已,所以filter在frequency的direction上移動是有效的

所以,這又是另一個例子,當你把CNN用在一個Application的時候呢,你永遠要想一想Application的特性是甚麼,根據這個特性你再去design network的structure,才會真正在理解的基礎上去解決問題


Text

CNN也可以用在文字處理上,假設你的input是一個word sequence,你要做的事情是讓machine偵測這個word sequence代表的意思是positive的還是negative的

首先你把這個word sequence裡面的每一個word都用一個vector來表示,vector代表的這個word本身的semantic(語意),那如果兩個word本身含意越接近的話,他們的vector在高維的空間上就越接近,這個東西就叫做word embedding

把一個sentence裡面所有word的vector牌再一起,它就變成了一張image,你把CNN套用這個image上,那filter的樣子就是上圖的藍色matrix,他的高和image的高是一樣的,然後把filter沿著句子裡詞彙的順序來移動,每一個filter移動完成之後都會得到一個由內積結果組成的vector,不同的filter就會得到不同的vector,接下來做max pooling,然後把max pooling的結果丟到fully connected layer裡面,你就會得到最後的output

與語音處理不同的是,在文字處理上,filter只在時間的序列(按照word的順序)上移動,而不在這個embedding的dimension上移動;因為在word embedding裡面,不同dimension是independent的,他們是互相獨立的,不會出現有兩個相同的pattern的情況,所以在這個方向上面移動的filter是沒有意義的

所以這又是另外一個例子,雖然大家覺得CNN很powerful,你可以用在各種不同的地方,但是當你應用到一個新的task的時候,你要想一想這個新的task在設計CNN架構的時候,到底要怎麼做


Conclusion

本篇的重點在於CNN 的theory base,也就是What is CNN? What does CNN do? Why CNN? 總結起來就是三個preperty,兩個架構和一個理念,這也是用CNN的基礎:

三個Property:

Some patterns are much smaller than the whole image (property1)

The same patterns appear in different regions (property2)

Subsampling the pixels will not change the object (property3)

兩個架構:

Convolution 架構: 針對 property 1 和 property 2

Max pooling 架構: 針對 property 3

一個理念:

針對不同的application要設計符合他特性的network structure,而不是生硬套用,這就是CNN架構的設計理念: 應用之道,存乎一心

2020-09-02 0 comment
0 FacebookTwitterPinterestEmail
統計分析

成本效益分析(Cost-benefit analysis)

by wenwu 2020-08-27

成本效益分析(Cost-benefit analysis)
成本效益分析用於醫療科技中

成本效果分析(Cost-effectiveness analysis, CEA)

成本效果分析同時考量成本及效果,常用於醫療之經濟評估方法。故成本常使用於醫療費用,效果單位為自然單位(natural units),例如可增加的存活年分、血壓、血糖等生理數值。

通常以”可以延長或拯救一年壽命之花費”來表示醫療成本。拯救一年生命年數之成本計算為,一年的醫療實際花費/拯救的生命年數。

若是從數個成本及效果不盡相同,但是值得施行的方案中,選擇一個最佳的方案,不論被評估的方案性質為何,只要效果測量的自然單位(ex: 可增加的存活年)是相同的,均可採行此方法。


遞增成本效果比值(Incremental cost-effectiveness ratio, ICER)

遞增成本效果比值(ICER)為成本效果分析(CEA)的主要統計指標,用於總結醫療保健干預措施的成本效益。成本效果分析(CEA)為單個方案的評估,而比較兩個方案間的成果與效果比值,可使用遞增成本效果比值(ICER)進行比較。
遞增成本效果比值(ICER)的公式如下:

C1 和 E1 分別表示實驗組的成本(Cost)及效果(Effect),而C0 和 E0 分別表示對照組的成本(Cost)及效果(Effect)。成本通常以貨幣單位來描述,而效果可以根據健康狀況或其他感興趣的結果進行衡量。

ICER 可以良好的表達成本效果,因為在同一個區間中,可以同時比較兩組人的增加成本以及增加效果。因此可以比較在某區間中,增加的花費及效果。(例如: 增加一年的存活,需要增加多少費用。)

其中,ACER(平均成本效果比值)將每個成本除以其效能,ACER因在決策上容易產生誤導,並不建議將ACER作為成本效益分析的指標。

因此為了利於不同研究間的結果比較,成本效用分析及成本效果分析仍應以遞增成本效果比值(ICER)為主要的成本效益分析指標


Example

圖中的X軸表示: Effect(E)效果(成功治療的病例數),Y軸表示: Cost(C)成本。

PPM DOTS in hospital 的成本與效果分別為(E=300, C=600000)
DOTS in community health center 的成本與效果分別為(E=200, C=200000)
可以發現,兩種方法的費用差了40萬,治癒的病例數差了100位。若我們使用ICER來表達的話:

ICER= (600000–200000)/(300–200)=4000

表示每增加一位成功治療的話,需要增加4000的成本。

而圖中提到ACER(Average cost-effectiveness ratio)則是分別計算兩組在每個成功治療的人的成本比值

ACER(PPM)=600000/300=2000
ACER(DOTS)=200000/200=1000

表示在PPM的方法中,每成功治療一個人需要花費2000元。
而DOTS表示,每成功治療一個人需要花費1000元。


Conclusion

或許你覺得有點奇怪,為什麼ICER告訴我 “每增加一位成功治療的話,需要增加4000的成本。” 但是看到ACER(PPM)=2000,治療一個人使用2000就好了啊,為甚麼要增加4000塊才能增加一位成功治療。

這是因為這裡ACER只單計算成功治療一位患者的花費,我們不知道背後兩種方法每一分錢使用的差異在哪裡? 
但是使用ICER比較這兩種方法,我們可以知道的是,如果我們希望從原本的DOTS方式改成PPM的方式,若增加4000的成本可以增加一位成功治療的患者。

2020-08-27 0 comment
1 FacebookTwitterPinterestEmail
機器學習

Deep-learning 是一個黑盒子? CNN是如何運作的呢? (part2)

by wenwu 2020-08-20

Deep-learning 是一個黑盒子? CNN是如何運作的呢? (part2)

今日的課程來自於: https://youtu.be/5BJDJd-dzzg (33-54分)

What does CNN learn?

What is intelligent?

今天我們要來分析CNN是如何運作的?

我們都知道如果若是有一個模型,他的方法我們可以輕易知道她如何運作的話,那我們自然也不會覺得這個方法 “intelleigent” 了! 
大家都說deep learning 就是一個黑盒子,我們根本就無法知道訓練的東西為甚麼是這樣子,有些人甚至無法相信他。但是其實我們還是可以分析的,今天就來看一下要如何分析CNN,看他到底學了甚麼?

今天本篇會提到三點,分別從 filter 、neuron 和output 來解釋。


就如前一篇提到的 Convolutional Neural network 卷積神經網路 的CNN的架構,重複數次的 Concolution和max pooling,再做Flatten 和 Fully connected network。

第一層的Convolution 的filter是比較容易的,在上一篇的講解提到,這一個3*3 matrix 的filter就是要在這3*3=9 個pixel內,找到特定的patten 。
接下來第二層的filter就開始很難解釋了,因為她的input是做完 convoluion 在做Max pooling 的結果,因此filter考慮的範圍並不是3*3的pixel,而是一個3*3*25的cubic,所以我們很難知道他是怎麼運作的。

那我們先來看filter如何運作


What does filter do?

我們要怎麼分析一個 filter 在做什麼呢? 我們可以這樣做:

我們知道在第二個convolution layer裡面的50個filter,每一個filter的output就是一個11*11的matrix, 假設我們把第 k 個filter的output拿出來,如下圖表示,這個matrix裡的每一個element,我們叫他a_ij^k,上標k表示這是第k個filter,下標i j 表示matrix 里第i個row和第j個column。

接下來定義a^k 叫做degree of the activation of the k-th filter,這個值表示現在的第k個filter,他有多被activate,有多被”啟動”(活躍),值觀來說就是描述現在input的東西跟第k個filter有多接近,他對filter的激活程度有多少,a^k的計算方式如下:

也就是說,我們input一張image,然後把這個filter和image進行捲積所output的11*11的值都加起來,當作現在這個filter被activate的程度

接下來我們要做的事情是這樣的,我們想要知道第 k 個filter的作用是什麼,那我們就找一張image,希望這張image可以讓第k個filter被activate的程度最大 ; 也就是現在要找一張image X ,它可以讓我們定義的activation的degree a^k最大,即:

之前我們求minimize用的是gradient descent,那現在我們求Maximum用gradient ascent(梯度上升法)就可以做到這件事了

仔細一想這個方法蠻奇妙的,因為我們現在是把input x做為要找的參數,他對去用gradient descent 或ascent 進行update,原來在train CNN時,input 是固定的,model的參數是要用gradient descent 去找出來的;但是現在相反,這個task裡面的model的參數是固定的,我們要用gradient ascent 去update 這個 X,讓他可以使degree of activation最大

上圖就是得到的結果,基本上幾個filter就可以分別找到幾張使對應的activation最大的圖,這裡只有12張作展示。

這些image 上有一個公同特徵,就是裡面都是依些反覆出現的某種texture(紋路)。像第三張布滿了小小的斜條紋,表示第三個filter就是detect圖上有沒有斜條紋。如果整張image上布滿這種斜條紋的話,這個時候他會最興奮,他的degree of activation 會最大,也就是filter的activation程度最大,相對應的output值也會達到最大

因此每個filter的工作就是去detect每一種patten,detect某一種線條,上圖所示的filter所detect的就是不同角度的線條,所以今天input有不同線條的話,某一個filter會去找到讓它興奮度最高的匹配对象,這個時候它的output就是最大的


What does neuron do?

第二個要討論neuron是怎麼運作的。

我們做完convolution 和 max pooling 之後,會將結果用Flatten展開,然後丟到Fully connected 的neural network 裡面去,之前已經搞清楚filter是作什麼的,那我們也想知道每一個neuron是作什麼的,所以就對剛才的做法如法炮製

我們定義第j個neuron的output就是a_ij,接下來用gradient ascent 的方法去找一張image X,把他丟到neural network裡面就可以讓 a_j的值被maximize,即:

找到的結果如上圖所示,這裡只有9張image作為展示,會發現這九張圖和之前的情況不一樣,剛才在filter上發現是紋路的東西;但是在做完Flatten以后,每一個neuron不再是只看整張圖的一小部分,它現在的工作是看整張圖,所以對每一個neuron來說,讓它最興奮的、activation最大的image,不再是texture,而是一個完整的圖形


What about output?

接下來我們來討論CNN的output,由於是手寫辨識的demo,因此這裡的ouptut就是10 維,我們把某一維拿出來,然後同樣去找一張image X ,使這個維度的output值最大,即

你可以想像說,既然現在每一個output的每一個dimension就對應到一個數字,那如果我們去找一張image X,它可以讓對應的數字1的那個output layer 的neuron 的 output值最大,那張紙image顯然應該看起來會像是數字1,你甚至可以期待,搞不好這個方法就可以讓machine自動畫出數字

但實際上,我們得到的結果是這樣子,如下圖所示

上面的圖片對應為0-8,你會發現這些圖片看起來一點都不像數字,就像是電視機壞掉的樣子。為了證實這個程序有沒有Bug,這裡做了一個實驗,就是把上述得到的圖片真的做testing data 丟到CNN裡面,結果classify的結果確實還是認為這些image就對到0-8

所以今天這個neural network,它所學到的東西跟我們人類一班的想像認知是不一樣的

那我們有沒有辦法,讓上面這個圖看起來更像數字呢? 想法是這樣,我們知道一張圖是不是一個數字,它會有一些基本的假設,比如這些image,你不知道他是什麼數字,你也會認為它顯然就不是一個digit,因為人類手寫出來的東西就不是長這樣子的,所以我們要對這個 X 做一些 regularization,我們要對找出來的X做一些constraint(限制約束),我們應該告訴 machine說,雖然有一些X 可以讓你的Y 很大,但他們不是數字

那我們應該加上什麼樣的constraint 呢? 最簡單的想法是說,畫圖的時候,白色代表有墨水的地方,而對一個digit 來說,整張 image 上塗白的區域是有限的,像上面整張都白白的一定不會是數字

假設image裡的每一個pixel都用x_ij表示,我們把所有pixel值取絕對值並求和,也就是之前提到 L1的regularization,再用y^i減去這一項,得到

這次我們希望再找一個input X,它可以讓y^i 最大的同時,也讓L1的regularization 越小越好,也就是說我們希望找出來的image,大部分的地方都是沒有塗色的

加上這個constraint以後,得到的結果會像下圖右側所示一樣,已經隱約有一點數字的樣子了

如果再加上一些額外的constraint ,比如你希望相鄰的pixel是同樣的顏色,你應該就可以得到更好的結果


今天就用三個方面 filter 、neuron 和output 來解釋CNN是如何運作的,下一篇會介紹CNN的一些應用

2020-08-20 0 comment
0 FacebookTwitterPinterestEmail
Load More Posts

近期文章

  • [SAS] Macro Language 2: 內建macro,使用 SQL/DATA step 建立Macro variable
  • [SAS] Macro Language 基礎內容
  • ccClub 讀書會推薦,免費學python
  • [閱讀心得 #21]你願意,人生就會值得
  • 理想生活,該長怎麼樣子?

近期留言

  • 「S kevin」於〈[SAS] Macro Language 2: 內建macro,使用 SQL/DATA step 建立Macro variable〉發佈留言
  • 「S kevin」於〈[SAS] Macro Language 基礎內容〉發佈留言
  • 「peter」於〈多益330 → 多益785 多益成績棕色到藍色證書〉發佈留言
  • 「wenwu」於〈[SAS]存活分析(2) COX regression model〉發佈留言
  • 「joey53111」於〈Statistical Programmer在CRO工作一年的心得〉發佈留言

免費訂閱

不定期更新文章,點一下追蹤就能夠收到最新文章!

一起加入其他 20 位訂閱者的行列

Statistics

  • 20,096
  • 729,842
  • 74
R 線上課程參考

@2019 - All Right Reserved. Designed and Developed by PenciDesign

Wenwu's blog
  • 文章總列表
  • 統計分析
    • R SAS All
      R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      統計分析

      [SAS] Ma…

      2026-09-08

      統計分析

      [SAS] Ma…

      2026-01-21

      統計分析

      什麼是meta-…

      2024-11-05

      統計分析

      Test-ret…

      2024-06-07

  • SAS
    • SAS

      [SAS] Ma…

      2026-09-08

      SAS

      [SAS] Ma…

      2026-01-21

      SAS

      [SAS]傾向分…

      2020-10-28

      SAS

      [SAS]Log…

      2020-06-10

      SAS

      [SAS]迴歸分…

      2020-02-28

  • R
    • R

      [R]散佈圖與相…

      2019-12-31

      R

      [R]Logis…

      2019-10-31

      R

      [SAS][R]…

      2019-09-27

      R

      [R]Chi-s…

      2019-09-19

      R

      [SAS][R]…

      2019-07-08

  • 機器學習
    • 機器學習

      Unsuperv…

      2021-07-22

      機器學習

      Unsuperv…

      2021-07-12

      機器學習

      Unsuperv…

      2021-05-20

      機器學習

      Unsuperv…

      2021-05-12

      機器學習

      Matrix F…

      2021-04-30

  • 閱讀筆記
    • 閱讀筆記

      [閱讀心得 #2…

      2025-02-05

      閱讀筆記

      [閱讀心得#20…

      2024-10-25

      閱讀筆記

      [閱讀心得#19…

      2024-08-16

      閱讀筆記

      [閱讀心得#18…

      2024-05-10

      閱讀筆記

      [閱讀心得#17…

      2022-01-22