1. 程式人生 > >機器學習三要素之資料、模型、演算法

機器學習三要素之資料、模型、演算法

一般一個模型是通過如下過程獲得:

640?wx_fmt=jpeg

演算法通過在資料上進行運算產生模型

下面我們從資料,模型,演算法上來深入分析機器學習的過程。


資料

我們都知道,機器學習需要大量的資料來訓練模型,尤其是訓練神經網路。在進行機器學習時,資料集一般會被劃分為訓練集測試集,很多時候還會劃分出驗證集

資料集的劃分一般有三種方法:

  • 按一定比例劃分為訓練集和測試集

這種方法也稱為保留法。我們通常取8-2、7-3、6-4、5-5比例切分,直接將資料隨機劃分為訓練集和測試集,然後使用訓練集來生成模型,再用測試集來測試模型的正確率和誤差,以驗證模型的有效性。這種方法常見於決策樹、樸素貝葉斯分類器、線性迴歸和邏輯迴歸等任務中。

  • 交叉驗證法

交叉驗證一般採用k折交叉驗證,即k-fold cross validation,往往k取為10。在這種資料集劃分法中,我們將資料集劃分為k個子集,每個子集均做一次測試集,每次將其餘的作為訓練集。在交叉驗證時,我們重複訓練k次,每次選擇一個子集作為測試集,並將k次的平均交叉驗證的正確率作為最終的結果。

  • 訓練集、驗證集、測試集法

首先將資料集劃分為訓練集和測試集,由於模型的構建過程中也需要檢驗模型,檢驗模型的配置,以及訓練程度,過擬合還是欠擬合,所以會將訓練資料再劃分為兩個部分,一部分是用於訓練的訓練集,另一部分是進行檢驗的驗證集。驗證集可以重複使用,主要是用來輔助構建模型的。

訓練集用於訓練得到神經網路模型,然後用驗證集驗證模型的有效性,挑選獲得最佳效果的模型,直到我們得到一個滿意的模型為止。最後,當模型“通過”驗證集之後,我們再使用測試集測試模型的最終效果,評估模型的準確率,以及誤差等。測試集只在模型檢驗時使用,絕對不能根據測試集上的結果來調整網路引數配置,以及選擇訓練好的模型,否則會導致模型在測試集上過擬合。


模型

640?wx_fmt=jpeg

模型是機器學習的結果,這個學習過程,稱為訓練(Train)。一個已經訓練好的模型,可以被理解成一個函式: y=f(x)。我們把資料(對應其中的 x)輸入進去,得到輸出結果(對應其中的 y)。這個輸出結果可能是一個數值(迴歸),也可能是一個標籤(分類),但是這個模型是怎麼得到的呢?

一般構建一個模型,我們需要經歷以下步驟:

  • Step-1:資料準備。

    • Step-1.1 資料預處理:收集資料、清洗資料、標註資料。

    • Step-1.2 構建資料的向量空間模型(將文字、圖片、音訊、視訊等格式的資料轉換為向量)。

    • Step-1.3 將構建好向量空間模型的資料分為訓練集、驗證集和測試集

  • Step-2:訓練——將訓練集輸入給訓練程式,進行運算。訓練程式的核心是演算法,所有輸入的向量化資料都會按該訓練程式所依據的演算法進行運算。訓練程式輸出的結果,就是模型。

    • Step-2.1: 編寫訓練程式。

      • Step-2.1.1: 選擇模型型別;

      • Step-2.1.2: 選擇優化演算法;

      • Step-2.1.3: 根據模型型別和演算法編寫程式。

    • Step-2.2: 訓練 -> 獲得臨時模型。

    • Step-2.3: 在訓練集上執行臨時模型,獲得訓練集預測結果。

    • Step-2.4: 在驗證集上執行臨時模型,獲得驗證集預測結果。

    • Step-2.5: 綜合參照 Step-2.4 和 Step-2.5 的預測結果,改進模型。

    • Step-2.6: Step-2.2 到 Step-2.5 反覆迭代,直至獲得讓我們滿意,或者已經無法繼續優化的模型。

總之,模型獲取的過程就是:根據已經被指定的 f(x) 的具體形式——模型型別,結合訓練資料,計算出其中各個引數的具體取值的過程。

訓練過程需要依據某種演算法進行運算。下面就來看看演算法。


演算法

640?wx_fmt=jpeg

這裡我們以有監督學習為例,有監督學習的目標就是:讓訓練資料的所有 x 經過 f(x) 計算後,獲得的 y’ 與它們原本對應的 y 的差別儘量小。

我們需要用一個函式來描述 y’ 與 y 之間的差別,這個函式叫做損失函式(Loss Function)L(y, y’)= L(y, f(x))。

損失函式針對一個訓練資料,對於所有的訓練資料,我們用代價函式(Cost Function)來描述整體的損失。代價函式一般寫作:J(theta)——注意,代價函式的自變數不再是 y 和 f(x),而是變成了 theta,theta 表示 f(x) 中所有待定的引數(theta 也可以是一個向量,每個維度表示一個具體的引數)。至此,我們終於得到了一個關於我們真正要求取的變數(theta)的函式。而同時,既然 J(theta) 被成為代價函式,顧名思義,它的取值代表了整個模型付出的代價,這個代價自然是越小越好。

因此,我們也就有了學習的目標(也稱為目標函式):argmin J(theta)—— 最小化J(theta)。

能夠讓 J(theta) 達到最小的 theta,就是最好的 theta。當找到最好的 theta 之後,我們把它帶入到原 f(x),使得 f(x) 成為一個完整的 x 的函式,也就是最終的模型函式。怎麼能夠找到讓 J(theta) 最小的 theta 呢?這就需要用到優化演算法了。


具體的優化演算法有很多,比如:梯度下降法(Gradient Descent),共軛梯度法(Conjugate Gradient),牛頓法和擬牛頓法,模擬退火法(Simulated Annealing) 等等。其中最常用的是梯度下降法,我們下一節會專門講解梯度下降法。敬請期待......


【推薦閱讀】

Peter教你談情說AI | 01導讀

Peter教你談情說AI | 02什麼是機器學習


輕輕一掃  歡迎關注~

640?wx_fmt=jpeg

如果覺得好,請

轉發

轉發

轉發