機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

建立機器學習系統

An Overview of Building a Machine Learning System

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

前言叨B叨

前兩章對機器學習的背景以及應用場景做了比較詳細的闡述, 還介紹了一個關於機器學習演算法的基本概念。 從第三章起會圍繞機器學習的流程,演算法等詳細鋪開, 同學們請繫好安全帶。

觀眾朋友們,晚上好,今天是個好號,農曆不造初幾,歡迎收看新聞聯播節目,首先向您介紹這次新聞的主要內容:1。 機器學習中,NumPy, scikit-learn, 和 pandas是怎麼一回事2。 向量(Vectors):如何有效地處理大型資料集3。 訓練有監督機器學習模型的基本工作流程4。 梯度增強(Gradient boosting): 它一個通用的機器學習演算法下面是詳細報道:

1. NumPy, scikit-learn, 和潘大師(pandas)

Python是機器學習中使用最廣泛的程式語言之一。除了簡單易用之外,Python之所以非常流行因為它有許多hen很棒的機器學習庫。我們將用到三個最流行的庫: 首先,我們將使用numpy。NumPy是一個庫,利用它你可以處理大型資料集以及記憶體操作。它是免費的、開源的,而且在矽谷之類的IT行業應用相當廣泛。它是許多其他機器學習庫的基礎。接下來,我們將使用scikit-learn。scikit-learn是一個非常受歡迎的機器學習庫。

你可以把它看作是機器學習中的瑞士軍刀。它提供了許多最流行的機器學習演算法並且很容易使用。最後,我們還將使用pandas。pandas允許您將資料表示為一個可以用程式碼控制的虛擬電子表格。它有許多類似微軟Excel的功能,比如快速編輯和計算等等。它能夠輕鬆的處理CSV資料檔案。pandas的名字來自“panel data”一詞(和我們的大熊貓不搭噶哈),因為它把你的資料表示成一系列的面板,就像電子表格中的頁面一樣。

令人欣慰的是, 所有這些庫都完美地協同工作。NumPy提供資料載入和資料處理的基本工作,pandas則使得資料更容易清理及易於計算。 基於處理過的資料, 然後由scikit-learn提供實際的機器學習演算法來執行。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

2. 向量(Vectors):如何有效地處理大型資料集

在機器學習中,我們經常使用大資料陣列。由於機器學習的線性代數根(linear algebra roots),這些陣列有時被稱為單個數據列的向量和較大陣列的向量。讓我們看看如何在程式碼中使用向量。讓我們開啟vecotors pt1。py。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

這裡有一個簡單的陣列,或者向量,表示訓練資料集中每套房的面積。當我們訓練機器學習演算法時,我們經常需要在訓練資料集中的每一行應用相同的數學運算。例如,假設我們要將每個面積乘以0。3的權重。

完成這個事情最高效的方法是什麼?在傳統的程式設計中,標準的解決方案是每次一行遍歷陣列,一個for迴圈搞定。讓我們執行程式碼並檢查輸出。在控制檯中,我們可以看到它在得到最終結果之前對陣列進行了13次獨立的更新。這樣做是沒毛病的,但每次在陣列中一個元素上對每個元素進行乘法實際上效率很低。如今的CPU有能力並行批次操作。

這種能力稱為單指令、多資料或SIMD。而不是一次一個地遍歷每個陣列元素,CPU可以將陣列塊載入到記憶體中,並在一步中完成該塊上的所有乘法操作。這在處理大型陣列時速度會產生巨大的差異。讓我們來看看程式碼vecotors pt2。py。

我們不使用迴圈來處理陣列,而是使用一個數組庫,它知道如何並行處理資料。NumPy可以在記憶體中非常高效地建立陣列, 然後會自動並行化。

因此,我們不使用for迴圈,我們的程式碼看起來如下所示。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

首先我們建立的陣列作為NumPy陣列而不是作為一個正常的Python陣列。然後我們會將整個陣列乘以0。3。當我們告訴NumPy要把一個數組乘以一個單個的數字時,NumPy會將此操作分別應用於陣列中的每一個元素。讓我們來執行程式碼看看效果。

哪種方法更高效?相信群眾的眼睛是雪亮的。

但更重要的是,NumPy自動利用CPU的SIMD功能,增加並聯陣列塊。我們得到與使用for迴圈相同的結果,但我們不需要經歷這麼多步驟。你在陣列上需要做的大部分操作都可以並行完成。這包括簡單的操作比如加法,減法,乘法,和除法,甚至更復雜的操作,如正弦和餘弦。這就是所謂的向量化我們的程式碼。我們用可並行執行的向量操作代替迭代迴圈。這是非常重要的一點。

如果你發現自己為陣列寫了一個for迴圈,那麼你可能out了。相反,你應該使用numpy來操作整個陣列。

3. 訓練有監督機器學習模型的基本工作流程

讓我們瀏覽基本的工作流來訓練有監督的機器學習模型。不管使用哪種有監督的機器學習演算法,基本過程都是一樣的。我們將在課程的後面更詳細地介紹這個工作流的每一步,但是在深入瞭解細節之前,瞭解基本的工作流是非常有幫助的。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

使用機器學習的第一步是獲取資料。對於我們預測房屋價格的專案,我們將收集一年內所有在一個地區銷售的房屋的資料。對於每一個出售的房子,我們會盡可能多地收集,比如臥室的數量,房子的大小等等。下一步是清理和預處理資料。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

我們開始使用的資料幾乎總是需要先處理一下,然後才能用於機器學習。我們將詳細介紹這一點,但基本思想是:將任何基於文字的資料轉換成數字,並選擇哪些資料最有用以包含在模型中。接下來,我們將獲取所有的資料,並對資料的順序進行亂序排列。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

我們希望確保資料是隨機的,這樣機器學習演算法就不會因為資料恰好符合某個特定的順序,而在不存在的模式上拾取資料。下一步,我們將得到經過處理的資料,並將其分成兩組,通常是第一組資料的70%行,第二組中的30%行。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

前70%的資料是我們用來訓練模型的。這稱為我們的訓練資料集。機器學習模型將僅基於此資料建立。最後30%的資料是我們的測試資料。這些資料將不用於訓練模型,而是用於檢查模型的準確性。同樣非常重要的是,我們也不用訓練資料來檢查模型的準確性。現在我們有了乾淨的、經過調整的、拆分的資料,我們已經準備好訓練機器學習模型了。但是每一個機器學習演算法都需要設定一些引數。這些引數將控制諸如模型如何學習模式和資料的速度以及模式的複雜程度。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

這些被稱為超引數(hyperparameters)設定。然後,透過訓練資料和期望輸出來訓練機器學習模型。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

當模型被訓練時,我們需要檢查它對測試資料集的準確性。這證明了該模型在新資料上是否有效,或者只適用於訓練資料。如果它能夠預測測試資料集的精確值,就意味著該模型已經可以使用了。如果它不能預測測試資料集的精確值,我們需要再試一次。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

我們可以改變我們給模型的訓練資料,或改變模型的引數直到我們得到我們想要的結果。

最後,一旦模型被訓練和評估,我們就可以使用它。我們可以對新資料進行反饋,這將給我們提供新的預測。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

4. 梯度增強(Gradient boosting): 一個通用的機器學習演算法

在本節中,我們將學習梯度增強演算法,這是一種強大的機器學習演算法,在許多不同種類的現實問題中都能起到很好的作用。它可以處理複雜的模式和線性模型無法處理的資料。梯度增強是一種整合學習演算法。整合學習演算法使用了許多簡單的機器學習模型,這些模型可以比任何單獨的模型本身更精確地解決問題。梯度提升的基本資料結構是一個決策樹。決策樹是一個模型,其中有分支決策點,並透過跟蹤樹的路徑確定最終值。

一個簡單的決策樹如下所示。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

這個決策樹有一個決策點。如果房子超過1000平方英尺,它預測房子應該增加額外的50000美元。如果是小的,那麼減少50000美元。為了建立更多的細微預測,我們可以向決策樹新增第二層,並有更多的決策點。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

現在這個模型有點精細了。真正的小房子還有50000美元的減少,而真正大的房子則增加了150000美元。

這是一個很好的開端,但要對各種戶型的價值進行建模,需要進一步增加模型的複雜性。有兩種方法可以使這個模型更加複雜。第一種方法是在決策樹中新增層和分支,直到它對資料集中的每一個單元進行建模。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

我們可能會得到一個決策樹,它有數百層,有成千上萬條分支路徑。事實證明,建立非常複雜的決策樹通常在實踐中不起作用。大的決策樹往往不能很好地利用新的資料。第二種方法是建立許多單獨的簡單決策樹,並將每個決策樹的輸出組合起來得到最終結果。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

這是集合方法。每一棵樹都會透過看問題的一個小方面來做出最後的回答。這有點像問你所有的朋友同樣的問題,並把他們所有的答案結合起來,拿出最好的最終答案。梯度增強有一個技巧,它不建立獨立建模資料的多個決策樹,而是建立相互建立的決策樹。每個新樹的目標是修復前面樹的最大錯誤。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

讓我們來看看這是如何在實際資料中工作的。這是一張房屋價格圖,根據每平方英尺的面積有多大。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

每一個藍點代表一個真正的房子。你可以看到,大小和價值之間存在著明顯的關係。粗略地說,較大的房子更貴。我們的目標是使用梯度增強來建立這種關係模型。在演算法的第一步,它將建立一個只有幾個分支的簡單決策樹。這條橙色線顯示了根據其大小和平方英尺分配給一所房子的決策樹的值。第一個決策樹非常簡單。1500平方英尺以下的房子價值不到10000美元,2200平方英尺以上的房子價值10000美元,而2700平方英尺以上的房子則價值10000美元。

第一個決策樹捕獲了一點模式,但在上下極端都不是很準確。它的小房子和低估值的大房子。現在,梯度增強演算法將新增第二個決策樹。但是當它建立第二棵樹時,它會特別地減少第一棵樹錯誤的地方。下面是第二個決策樹新增時的線條。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

您可以看到第二個決策樹增加了三個決策點。透過給小房子額外的價格處罰和大房子額外的刺激,這兩個決策樹組合做一個稍微好一點的整體工作的資料擬合。

讓我們結合這個過程並新增20個決策樹,每一個都改進以前樹的錯誤。現在我們有了一條很好地跟蹤資料的行。這是一個很好的模型,我們可以用來預測房價的平方米,但現在讓我們繼續75次迭代。

機器學習與人工智慧基礎:價值估算(第三章-建立機器學習系統)

現在,該行開始彎曲和扭曲,以跟蹤資料集中的特定離群值。這是過度擬合(overfitting)。我們讓我們的機器學習模型變得太複雜了,它開始模擬真正不存在的劇烈的價格波動。在以後的課程我們會談論過如何避免。

結語

如有錯誤請高手指正。

你的 關注-收藏-轉發 是我繼續分享的動力!