1. 程式人生 > >人工智慧第一課:使用分類演算法預測糖尿病

人工智慧第一課:使用分類演算法預測糖尿病

原文連結:https://mp.weixin.qq.com/s/nXFVTorYOm5LjRV5Cic2_w

如果你不能用資料表示你所知,那麼說明你對它所知不多;如果你對它所知不多,那麼你就無法控制它;如果你無法控制它,那麼就只能靠運氣了。

—— 陳希章

 

 

不久前,我開始正兒八經地系統地學習人工智慧,並且發起了一個結對學習的活動,目前已經有將近20位同學一起結對,詳情請參考下面文章的說明—— 約你六個月時間一起學習實踐人工智慧 。

 

目前仍接受報名,但我會對人數總量做一定的控制,並且各位在加入之前必須想清楚自己能否真的花時間堅持下去,一定時間沒有學習進度的會被請出群。

 

我之前承諾大家,會將在學習過程中的筆記分享出來。這是第一篇,也是我完成第一門課《Introduction to Artificial Intelligence》第一單元《Machine Learning》的一些心得。

 

我寫的筆記,只是學習過程中的一些記錄,或者一些思考,很有可能會有很多地方有錯誤,歡迎大家指出,幫助我提高。

 

 

這門課是人工智慧入門,它的內容分為四個部分:機器學習概述,語音和通訊,計算機視覺,對話平臺。

 

 

本節介紹了機器學習的基本概念,主要應用場景,並著重通過以Azure Machine Learning Studio為載體,講解了匯入資料、建立和訓練、驗證模型,釋出成Web Service的全過程,通過完成本節學習,你可以對Machine Learning有些基本概念,而課後的練習是一個完整的範例,你可以瞭解如何通過分類演算法建立模型來實現糖尿病的預測。(它分別使用了邏輯迴歸和決策樹演算法做比較,並最終選擇了決策樹作為最優解)。

 

機器學習的定義,有興趣可以參考維基百科的說明:https://zh.wikipedia.org/wiki/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0

 

機器學習是人工智慧的一個分支。人工智慧的研究歷史有著一條從以"推理"為重點,到以"知識"為重點,再到以"學習"為重點的自然、清晰的脈絡。顯然,機器學習是實現人工智慧的一個途徑,即以機器學習為手段解決人工智慧中的問題。機器學習在近30多年已發展為一門多領域交叉學科,涉及概率論、統計學、逼近論、凸分析、計算複雜性理論等多門學科。機器學習理論主要是設計和分析一些讓計算機可以自動"學習"的演算法。機器學習演算法是一類從資料中自動分析獲得規律,並利用規律對未知資料進行預測的演算法。因為學習演算法中涉及了大量的統計學理論,機器學習與推斷統計學聯絡尤為密切,也被稱為統計學習理論。演算法設計方面,機器學習理論關注可以實現的,行之有效的學習演算法。很多推論問題屬於無程式可循難度,所以部分的機器學習研究是開發容易處理的近似演算法。

 

看了這麼一大段的介紹,其實還是會比較暈。其實最簡單理解的話,機器學習最重要的研究目標就是從大量的資料中找出來一些規律,並且能利用該規律進行預測。

 

經過這麼多年的發展,解決絕大部分問題的演算法都已經存在了,我們現在很多時候要做的是收集和準備資料(包括清洗和整理),然後根據業務領域經驗建模,並且選擇不同的演算法去訓練模型、驗證模型,發現和逼近最好的預測模型。下圖是目前Azure Machine Learning 中支援的演算法列表。

 

 

機器學習根據其原理分為

 

  1. 監督學習
  2. 無監督學習
  3. 半監督學習

     

     

    監督學習與非監督學習的根本區別在於訓練集資料是否需要人為地進行標記。典型的監督學習演算法包括迴歸和分類,而典型的無監督學習演算法是聚類。半監督學習是介於兩者之間的。

     

    而關於迴歸(Regression)和分類(Classification),又有一些明顯的區別,我傾向於採納下面知乎網友的回答。

     

     

    那麼,回到我們這堂課的命題:通過機器學習來預測某個病人是否為糖尿病(及其概率),這是一個定性問題,它的預測是離散的,而不是連續的,所以這是一個分類的任務。

     

    假設我們手工有15000個病例樣本,分別記錄了他們的血糖,血壓,年齡等資訊,以及他們是否確診為糖尿病的資料。(這個Diabetic欄位非常重要,而這其實也就是需要人工標記的關鍵資訊)

     

     

    另外,還有一份資料是病人和醫生的對照表,在本課程學習和作業中,雖然並不是必須的,但這符合真實場景的需要。

     

     

    對於人工智慧和機器學習而言,相比較看起來很酷炫的建模、訓練、驗證,其實很重要的工作都是在收集資料,有好的資料才會有真正有價值的人工智慧。而收集資料中最關鍵的一個工作是定義哪些資料需要收集,例如上述例子,為什麼我們去分析糖尿病時需要選擇這些資料,而不是其他的。這裡面其實已經有一個建模的過程,而這部分是電腦科學無法實現的,它所依賴的是自然科學和專家經驗。

     

    如果只是做這種預測,那麼我要說,其實我在十幾年前就已經能做出來了,那時候我記得"人工智慧(Artificial Intelligence)"或"機器學習(Machine Learning)"並沒有現在這麼流行,人們更熱衷於討論"商業智慧(Business Intelligence)"和"資料探勘(Data Mining)",我對SQL Server 的BI 和Data Mining還算有一些研究,所以做這種預測還是比較輕鬆的。

     

    今時不同往日,SQL Server仍然還有這些能力。但真正的大資料時代,我們可能還需要雲端的解決方案。微軟的Azure Machine Learning 解決方案就是其中之一,而Azure Machine Learning Studio會提供你需要的一切。

     

     

    下圖是我建立好的Training experiment (用來做訓練的實驗)

     

     

    作為一個強大的Machine Learning的工具,它預設了上百個元件,並且可以隨時對資料進行視覺化分析。

     

     

    對於迴歸和分類演算法,通常我們會在進行資料連線,規範化處理後,對資料集進行拆分,一部分(通常70%)用於訓練模型,另一部分(通常30%)用於驗證模型。如下圖所示:

     

     

    在最後一步是驗證模型,通常我們會選擇多個演算法比對其輸出結果。如下圖所知這種輸出,Accuracy 越高,則表示準確性越高,可信度也就越高。

     

     

    模型訓練好之後,接下來就是怎麼用於預測了。你可以通過建立一個Predictive experiment來實現這個需求。請注意,它其實跟之前的Training experiment看起來很像,只不過你仔細看的話,會發現input處不一樣,而且中間的一些元件,它是引用到了Training experiment中的。

     

     

    你可以一鍵將其釋出為一個Web Service,以便支援客戶端呼叫。

     

     

    下圖是在Excel中通過一個Add-in進行預測分析的效果(支援批量對資料集進行預測)

     

     

    下圖是我通過Python呼叫REST API進行預測的範例

     

     

    歡迎大家關注我的《人工智慧學習筆記》,請關注本公眾號,並掃描下面二維碼收藏本系列文章。