程序員學人工智能深度學習:如何設計數據科學算法的流程?

不同的學習系統通常都遵循相同的設計流程。它們首先獲取知識庫並從數據中選擇相關的可解釋特徵,然後遍歷一系列候選的學習算法並監測每一個算法的性能,最後對它進行評估,以衡量訓練過程是否成功。

本節將更詳細地敘述所有的設計步驟,如圖1.9所示。


程序員學人工智能深度學習:如何設計數據科學算法的流程?


圖1.9 模擬學習流程的框架

1.2.1 數據預處理

學習週期裡的數據預處理相當於算法的知識庫。為了使學習算法能夠對未知數據做出更精確的決策,用戶必須以最佳形式提供這種知識庫。因此,數據可能需要許多的清洗與預處理(轉換)。

1.數據清洗

大多數數據集都需要經歷這個步驟,在這個步驟裡需要去除數據中的錯誤、噪聲和冗餘。數據必須是準確、完整、可靠和無偏的,這是因為使用劣質的知識庫可能產生如下許多的問題。

  • 結論不精確、有偏。
  • 錯誤率增加。
  • 泛化能力降低,泛化能力是指模型在之前訓練中未使用過的未知數據上表現良好的能力。

2.數據預處理

在這個步驟裡,數據通過一些轉換而變得一致且具體。在數據預處理前有許多不同的轉換方法可供參考。

  • 重命名(重標記):這表示將類別的值轉換為數值,這是因為類別的值與某些學習算法一起使用是危險的,並且數字會在不同的值之間附加一個順序。
  • 改變尺度(歸一化):將連續的數值轉換或限制在某個範圍內,通常是[−1,1]或[0,1]。
  • 新特徵:從現有的特徵中合成新的特徵。比如,肥胖因子=體重/身高。

1.2.2 特徵選擇

樣本的解釋特徵性(輸入變量)可能是非常龐大的,比如用戶拿到一個輸入x=

程序員學人工智能深度學習:如何設計數據科學算法的流程?

,將它作為訓練樣本(觀察數據/示例),並且d非常大。這種情形的一個例子是文檔分類任務3,在這個任務裡用戶拿到10 000個不同的單詞,而輸入變量則是這些不同單詞的出現頻次。

這種數量巨大的輸入變量可能是有問題的,有時候甚至是災難性的,因為開發人員有很多的輸入變量,卻只有很少的訓練樣本來幫助他們進行學習。為了避免擁有大量輸入變量這個問題(維度災難),數據科學家用降維技術來選取輸入變量的一個子集。比如,在文本分類任務中,可以採用以下方法。

  • 提取相關的輸入(如互信息方法)。
  • 主成分分析(PCA)
  • 將相似的單詞分組(聚類),這裡用到了相似性度量。

1.2.3 模型選擇

利用降維技術選擇了一個合適的輸入變量子集後,接下來就是模型選擇了。選擇合適的輸入變量子集,將使得接下來的學習過程變得非常簡單。

在這個步驟裡,用戶試圖找到一個正確的模型來學習。

如果讀者之前有過數據科學方面的經驗,並曾經將學習方法應用到不同的領域和不同的數據當中,那麼這部分內容會相對比較簡單,因為這個步驟需要預先了解數據的樣貌,以及知道什麼樣的假設是適合數據的本質的,並基於此來選擇合適的學習方法。如果讀者沒有預備知識也沒有關係,因為讀者可以通過猜測和嘗試不同參數的不同模型,並選擇一個在測試集上表現最好的模型,來完成這個步驟。

此外,初始數據分析和數據可視化將會幫助你對數據的分佈形式與性質做出更好的猜測。

1.2.4 學習過程

學習指的是用戶用來選擇最佳模型參數的優化指標。有以下不同的優化指標可以選擇:

  • 均方誤差(MSE)
  • 最大似然(ML)準則;
  • 最大化後驗概率(MAP)

有些優化問題可能本身很難解決,但選擇正確的模型和誤差函數會使得情況有所改善。

1.2.5 評估模型

在這一步中,用戶嘗試測量模型在未知數據上的泛化誤差。既然用戶只有特定的數據而無法事先了解任何未知的數據,就可以通過在數據集裡隨機地選擇一部分作為測試集,並且在訓練過程中從不使用它,從而使得這部分數據充當未知的有效數據。有很多方法可用於評估所選模型的性能。

  • 簡單的留出(holdout)法,這種方法將數據簡單地分為訓練集和測試集。
  • 其他更復雜的方法,如基於交叉驗證和隨機降採樣的方法。

這一步的目的是比較在相同數據集上訓練出來的不同模型的預測性能,並選擇一個擁有最小的測試誤差的模型,這個模型將會在未知數據上表現出較好的泛化誤差。用戶也可以用統計方法判斷結果的顯著性,以得到泛化誤差更準確的信息。

程序員學人工智能深度學習:如何設計數據科學算法的流程?

本文摘自《深度學習案例精粹》

感興趣的讀者請轉發文章到朋友圈哦


分享到:


相關文章: