閱讀631 返回首頁    go 阿裏雲 go 技術社區[雲棲]


一位缺覺的父親記錄了他雙胞胎寶寶的睡眠數據 並交給機器學習,結果……


0?wx_fmt=png 

◆ ◆ 

導讀


初為人父人母,最大的體會必須是:缺覺!喂奶換尿布,孩子一夜醒來好幾次,沒把小寶寶哄睡,卻把自己哄睡了,那時候你的內心一定是崩潰的。


國外一個缺覺的父親實在受夠了他的雙胞胎寶寶,聯合他的妻子,統計了兩個娃的睡眠及喂養時間數據等,用機器學習分析預測,總結並掌握兩個孩子的作息規律,科學的育兒方法讓他們伺候好孩子的同時,又將孩子對自己的睡眠影響降到最低,真是太機智了。技術咖拯救睡眠啊!


接下來就讓我們看看這對夫妻是如何收集數據、並利用機器學習分析數據的,或許年輕的我們可以學一手。


這樣看來機器學習和數據決策其實並沒有那麼高高在上,可能也可以幫我們解決一些生活中的有趣問題。


◆ ◆ 

前言

 

一個月前,我試著用A / B測試我們那對雙胞胎,看看怎樣不同的“治療”或輸入參數會造成較久的睡眠,當然這由我們自己來完成。我發現睡眠模式相當不穩定,並沒有找到促進睡眠相關的東西。隨著時間的推移,他們更大程度上傾向於自然醒。然而,現在他們已經四個月大了,他們已經開始普遍但是很少討論的睡眠顛倒(Sleep Regression)。我又一次發現自己渴望獲得更多的睡眠。我先前投的文章中確實有一個評論說,“無論多麼渴望睡更多,我都會努力去找,我能找到對於睡眠有用的東西嗎”?嘿嘿,我找到了。從此,我轉而關注另一項計算機科技:機器學習。


機器學習是一個計算機科學的領域,提供 “教”計算機或程序的方式,而不需要給他們一些分散的指令集。在正常編程中,我會讓計算機按順序執行一列命令,按邏輯基於輸入的方法來做決策,不過這些程序永遠都不會離開已定義好的軌跡。盡管這聽起來比它實際上運行的方式更像終結者(Terminator),但是機器學習可以接受人拿給的用於“學習”的數據,以此作為預測的基礎。雖然這在整個科技行業變得越來越流行,而AI主要被用於瀏覽購買行為和推薦,也許最有趣的是,分類和識別照片和畫作,這大多是穀歌在做。我沒有找到什麼例子用於做家長帶小孩。


多虧我的妻子是會計背景,還有我們的A型人格,我們詳細記錄了兩個男孩的進食和睡眠行為。還記得這個表格嗎?


0?wx_fmt=png


◆ ◆ 

“大數據”,毫不誇張的講


使用這些數據,我開始尋找輸入參數的最優組合,在這個例子中,我關注食物總消耗、最後喂食時間和最後喂量,來決定什麼情況會導致男孩的最久時間睡眠。最重要的是我可以讓計算機做艱苦的工作。另外,我們這組模式有兩倍的數據,因為很明顯我們有兩個男孩。


有幾個可用的巨大機器學習庫,他們跨編程語言。雖然我主要使用Java和Javascript工作,我選擇了Python庫sklearn,因為我熟悉Python以及這個靈活的腳本語言可以說是近乎完美的應用。有許多對這個庫和文檔極好的教程。


如果感興趣,你可以在github上找到我的代碼。


把我們從電子表格收集的數據導出來,我提取了過去一個月的數據點。因為嬰兒正經曆快速的成長發育變化,我覺得一個月的數據乘以2個嬰兒,是一種對近因效應較好的平衡,而且數據足夠用於做預測了。


0?wx_fmt=png


◆ ◆ 

放在一起進行編碼


我也得到了一些有趣的統計值,包括:平均每天我們喂食兩男孩(各)27.5盎司,通常讓他們在睡覺在7:25睡覺,睡前喂他們5.22盎司,它們平均睡9個小時。結果發現男孩75%的情況睡超過10小時。不賴的發現。但我知道我們還有一些工作可以改進。

 


總喂食

最後喂食時間

最後喂食量

睡眠時間(小時)

次數

62

62

62

62

均值

27.491935

7.455645

5.225806

9.084677

標準差

2.001008

0.331181

0.857357

1.726092

最小值

24.000000

6.750000

2.000000

3.500000

25%

26.000000

7.250000

5.000000

8.000000

50%

27.000000

7.375000

5.000000

9.000000

75%

29.000000

7.687500

6.000000

10.187500

最大值

32.000000

8.500000

7.000000

13.500000


采用這些數據,我能夠畫出對於睡眠時間的每個參數。


你可以看出數據間已經沒有很強的相關性,至少多數不存在線性關係。最具線性特征的關係,還有很多離群點的,要屬總進食量和睡眠小時之間的關係了。奇怪的是嬰兒吃得多反而睡得少了。


有許多不同類型的機器學習算法。這些主要分為線性和非線性兩種類型。我用了六種使用相當廣泛的算法運行這組數據,看看每個能到的準確程度。以下是結果。

 

Logistic Regression: 0.303333 (0.211056)

Linear Discriminant Analysis: 0.376667 (0.157797)

K Neighbors Classifier: 0.286667 (0.073333)

Decision Tree Classifier: 0.356667 (0.196667)

GaussianNB: 0.183333 (0.076376)

Support Vector  Machine: 0.410000 (0.200028)

注:每種算法的準確程度,括號中的為標準差,或者采用一個形象的圖表

0?wx_fmt=png


在這裏你可以看到,支持向量機算法在這些數據上完成的明顯最好,雖然變化範圍較寬,均值並不比其他的算法強很多。這些方法用於預測甚至沒有一個超過50%的(均值)。這完全是由於數據的偽隨機性質。即使有這樣的結果,我決定繼續嚐試,希望能深入有更多新奇的發現。


采用支持向量機,我用輸入的數據訓練算法。用了這個,當我們哄孩子們上床,基於一天的食物量,以及睡前前最後一餐的量,我現在就可以預測出他們能睡多久。例如,給他們28盎司,哄他們7點上床,最後一餐喂6盎司,將造成一個比較差的8小時的睡眠。


◆ ◆ 

結論


用目前訓練出的算法,某種程度上,我可以預測將會得到多久的睡眠。更重要的是,我可以從箱型圖(Box Plot)中,6種流行的算法性能趨線,看出他們的表現。並且試著優化,明白怎樣類型的行為可以造成更久的睡眠。一種反常規的現象是,早些躺下,吃更少的食物,實際上一整天的睡眠時間卻增加了。這可能是由於很多因素導致的,但我的理論是,吃得少那補充的就少,胃收縮的也就減少,因此睡眠也就更安穩。有多少次你是狼吞虎咽,然後奇怪的是在半夜餓醒了?


很不幸,正如用A/B測試一樣,沒有一種個體輸入對睡眠似乎是直接的。我想如果真的有人已經發現了,能掙數百萬。綜上所述,機器學習可以找到變量之間一些像這些的趨勢和關聯,從而得到比A/B測驗或者“試誤法”(trial and error)更好、更準確的結果,仍然結果還差得很遠呢。從這組數據集,最多可以得到41%的預測準確率。這意味著結果往往是錯誤的。由於頻繁的發育變化,還有男孩之間的差異,很難在他們之間應用數據。再次申明,樣本量大一點是有幫助的,但我們打算很快要三胞胎。


盡管如此,這些結果總比沒有好,幫助論證了機器學習和數據科學領域的許諾。比起依據直覺,我更喜歡靠數據來決策,和這些證實我猜測的數據,隻會讓我對我們的育兒方法感覺更好。

原文發布時間為:2016-11-04


本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號

最後更新:2017-06-01 12:32:12

  上一篇:go  獨家幹貨|基於大數據的人體組織微結構的解析與構建
  下一篇:go  數學之美:兩點之間最快的路徑