- Python神經網絡項目實戰
- (美)詹姆斯·洛伊
- 3045字
- 2022-12-20 18:56:28
1.1 什么是機器學習
雖然機器學習和人工智能這兩個詞經常被互換使用,但它們其實并不是完全一樣的。人工智能這個詞最早出現在20世紀50年代,它指的是機器模仿人類行為的能力。為此,研究人員和計算機科學家嘗試了很多方法。早期,人們主要利用的技術叫作符號人工智能。符號人工智能試圖將人類的知識聲明為一種計算機可以處理的形式。基于符號,人工智能誕生了專家系統。這種計算機系統可以模擬人類的決策,然而,符號人工智能最大的缺點是它依賴于人類專家的知識,并且為了解決特定的問題,這些規則和認知是被編程的。由于符號人工智能的能力所限,科學家對其越來越不抱有希望,因此人工智能作為一個科學領域,曾經經歷過一段時間的低谷(被稱為AI的冬天)。當符號人工智能在20世紀50年代占據舞臺中心的時候,人工智能的另外一個子領域——機器學習,正在后面悄悄地進步著。
機器學習指的是一類算法,這類算法可以使計算機能夠從數據中學習并對未來遇到的未知數據集做出預測。
然而,早期的人工智能研究人員并沒有特別關注機器學習,因為那時候的計算機算力不強,同時也沒有存儲海量數據的能力,而這些正是機器學習算法所必需的。后來人們發現,機器學習不能再被忽視了。21世紀初,得益于機器學習的發展,人工智能經歷了一輪復興。這輪復興的關鍵原因是計算機系統的成熟使其可以收集并存儲海量數據(大數據),同時處理器變得足夠快,能夠運行機器學習算法。人工智能迎來了它的春天。
1.1.1 機器學習算法
既然談到了什么是機器學習,那么我們需要明白機器學習算法是如何工作的。機器學習算法可以被大致分為兩類。
● 有監督學習:通過標記過的訓練數據,機器學習算法學習將輸入變量映射到目標變量的規則。例如,某監督學習算法學習預測是否會有降雨(目標變量),它的輸入是溫度、時間、季節大氣壓(輸入變量)等。
● 無監督學習:使用未經標記的訓練數據,機器學習算法學習數據的關聯規則。無監督學習最常見的使用案例是聚類分析。在聚類分析中,機器學習算法識別數據中隱藏的模式和類別,而此數據并沒有事先被明確標記過。
在本書中,我們專注于有監督學習算法。舉一個有監督學習的具體例子,請考慮如下問題。你是一個動物愛好者,同時也是一個機器學習愛好者,因此你希望創建一個有監督機器學習算法來判斷一個動物是友善的(友善的小狗)還是具有敵意的(危險的熊)。為了簡化問題,假設你收集了各品種的狗和熊的兩種測量特征——體重和速度。數據(訓練數據集)收集完成后,你將數據繪制在圖表中,同時標記每個動物是敵是友,如圖1-1所示。

圖1-1
結果很明顯,我們發現狗的體重較輕,速度一般也較快。而熊則更重一些,速度也更慢一些。如果我們在狗和熊之間畫一條線(即決策邊界),那么我們可以利用這條線進行預測,如圖1-2所示。一旦我們得到了某個新的動物的測量數據,就可以通過觀察它落在這條線的左側還是右側來進行預測。落在左側則是友善的,落在右側則是有敵意的。但是這個數據集的維度很少。如果可以收集成百上千的不同的測量維度呢?這樣的話,圖表可能會有100多維,通過人工的方式很難畫出這條決策邊界。不過,對于機器學習來說,這并不是什么難題,機器學習算法的任務就是優化決策邊界并以此分割數據集。在理想的情況下,我們希望算法能夠生成一條決策邊界,完美地分割數據集中的兩類數據(盡管,取決于不同的數據集,這件事并不總能成功)。

圖1-2
有了這條決策邊界,我們可以對新的未經標記的數據進行預測。如果新數據落在決策邊界的左側,我們將其歸類為友善的動物;反之,如果新數據落在決策邊界的右側,我們將其歸類為有敵意的動物。
對于上面這個簡單的例子,我們僅接收兩個輸入變量并將數據分為兩組。我們可以把這個問題泛化,有多個輸入并分為多個種類。
當然,我們對于機器學習算法的選擇會影響生成的決策邊界。一些流行的有監督機器學習包括如下幾種:
● 神經網絡(neural network);
● 線性回歸(linear regression);
● 對數概率回歸(logistic regression);
● 支持向量機(SVM);
● 決策樹(decision tree)。
數據集的屬性(例如圖像數據集和數值數據集)和要解決的問題決定了我們所選的機器學習算法。在本書中,我們專注于神經網絡。
1.1.2 機器學習工作流
我們已經探討了什么是機器學習。但是要如何開始機器學習呢?從宏觀的角度來看,機器學習項目就是將原始數據作為輸入并做出預測然后輸出。在達到這一目的之前,還有很多中間步驟需要完成。機器學習工作流可以用圖1-3來概括。

圖1-3
機器學習工作流的輸入始終是數據。數據可以有不同的來源,格式也可以不同。例如,如果我們在做一個基于計算機視覺的項目,它的輸入可能是圖像。對于其他大多數的機器學習項目,數據會以表格的形式呈現,類似電子表格。對于某些項目而言,收集數據是非常重要的第一個步驟。在本書中,假設所有的數據已經提供,我們可以專注于機器學習。
下一步是處理數據。原始數據通常非常雜亂、易錯并且可能不適合我們選擇的機器學習算法。如果數據有多個來源,我們還需要將多個數據集合并為一個數據集。機器學習模型為了進行學習,通常需要一個數值化的數據集。如果原始數據集中有多個類別變量(例如性別、國家、星期等),則需要對這些變量進行數值編碼。我們會在本章后面的部分學習如何去做。對于特定的機器學習算法,數據換算和標準化也是必要的。這么做的邏輯是,如果某些變量的范圍遠大于另外一些變量,那么機器學習算法會錯誤地重點關注這些變量。
現實中的數據集往往非常雜亂,你會發現有些數據集是不完整的,同時行或列中有些數據是缺失的。處理缺失數據有相應的方法,每種方法都有它的優點和缺點。最簡單的方法是丟棄含有缺失數據的行或列。但是這個方法可能并不適用于所有情況,因為這樣做的話最后可能數據集的一大部分都被丟棄了。我們也可以用變量的均值來替換這些丟失的數據(如果變量恰巧是數值形式的話)。這個方法更加理想,因為它保護了我們的數據集。但是,使用均值來替換缺失數據會影響到數據集的分布,這可能會對我們的機器學習模型產生負面的影響。另外一個辦法是基于存在的數據來預測缺失的數據。但是使用這個方法的時候要小心,因為這樣會增加數據集的誤差。
最后是數據預處理,我們必須將數據集分成訓練數據集和驗證數據集兩部分。我們的機器學習模型僅僅利用訓練數據集來訓練和擬合。當我們對模型的性能感到滿意之后,我們會通過訓練數據集來評估模型。注意我們的模型不曾利用測試數據集訓練過,這就保證了我們對模型性能的評估是不含偏差的,這樣能夠反映模型在真實項目上的表現。
當數據處理完成之后,我們會進行探索性數據分析(EDA),EDA是一個利用數據可視化來洞察數據的過程。EDA允許我們創建新的特征(成為特征工程)并且將領域知識加到機器學習模型中。
最后,我們來到了機器學習的核心部分。在數據處理和探索性數據分析完成后,我們開始建模。正如之前提到的,有一些機器學習算法可供我們選擇,并且我們要基于所要解決的問題的特點來選擇機器學習算法。在本書中,我們專注于神經網絡。在建模過程中,超參數的調優是一個必要的步驟,合適的超參數可以明顯提高模型的性能。在后面的章節中,我們會探索神經網絡的一些超參數。一旦模型訓練完成,我們便可以利用測試數據集對模型的性能進行評估。
可以看到機器學習工作流包含了很多中間步驟,每個步驟都會對模型的整體性能產生影響。使用Python進行機器學習最大的優勢在于機器學習工作的全部流程都可以通過利用一些開源的Python函數庫來完成。在本書中,我們可以學到Python在機器學習工作流的每一步中的相應經驗,因為我們會利用Python從頭開始構建一個完整且復雜的神經網絡項目。
- Monkey Game Development:Beginner's Guide
- C語言程序設計案例教程(第2版)
- Getting Started with ResearchKit
- Learning ArcGIS Pro
- Python Data Analysis(Second Edition)
- 名師講壇:Java微服務架構實戰(SpringBoot+SpringCloud+Docker+RabbitMQ)
- 正則表達式經典實例(第2版)
- C++ 從入門到項目實踐(超值版)
- 快速念咒:MySQL入門指南與進階實戰
- Android程序設計基礎
- Instant Nancy Web Development
- Unity 2D Game Development Cookbook
- Android Studio Cookbook
- 數據分析與挖掘算法:Python實戰
- 從零開始學Python大數據與量化交易