聊聊機器學習的套路

超人汪小建發表於2018-11-15

前言

這裡說說機器學習問題分析的一般性過程,儘管存在各種各樣的機器學習問題,但大體上的步驟及最佳實踐都有一定的套路。

理解問題

首先得理解要解決的是什麼問題,比如

  • 業務上要解決什麼問題
  • 該問題涉及到的資訊管道有哪些
  • 如何採集資料,資料來源在哪
  • 資料是完整的嗎,資料刻度最小是多少
  • 資料是定期釋出的還是實時獲取的
  • 確定影響模型的有價值因素
  • 工作量

以上等等等等。

ETL處理

待收集的資料可能是表格資料、一串實時資料,N維矩陣或其他型別資料,同時也可能是多種儲存介質,通過ETL處理將混合的資料來源轉成我們需要的格式,生成結構化資料型別。

資料預處理

對於收集的資料,可能存在缺陷,比如空值、異常值或資料產生器本身引起的偏差。這些缺陷可能導致模型效果不佳,同時為了優化更快收斂,需要做資料標準化處理,所以需要進行資料預處理。

比如缺失值可以簡單設為0、列平均值、中值、最高頻率值、甚至是穩健演算法和knn等等。

比如標準化資料集,使資料集正態分佈,平均值為0標準差為1。而且還達到了特徵縮放效果。

模型定義

機器學習主要就是模型問題,我們通過機器學習來對現實進行抽象建模,以解決現實問題。所以機器學習主要工作就是使用哪種模型來建模,儘管各種大大小小模型一大堆,但大體上也有些套路。

  • 要完成的任務是預測結果還是對資料進行分類,前者是迴歸問題,後者是分類問題。
  • 對於分類問題,如果需要資料標記,則是監督學習,否則是非監督學習,使用聚類技術。
  • 資料是否為連續的,是的話考慮序列模型,比如自迴歸和RNN之類的。
  • 儘量使用簡單模型,如果能用比如用單變數或多變數的線性迴歸或邏輯迴歸。
  • 簡單模型解決不了的情況,可通過多層神經網路解決,比如複雜的非線性。
  • 使用了多少個維度的變數,將作用大的特徵提取出來,並把不重要的特徵去掉,比如用PCA降維。
  • 不是監督也不是非監督?考慮強化學習?

損失函式

損失函式用於衡量模型質量,它可以度量模型預測值與實際期望之間的差距,選擇不合適的函式可能會影響模型的準確性,甚至影響收斂速度。

模型訓練

資料準備好了,模型定義好了,就可以開始訓練模型。訓練中涉及幾個關鍵術語:迭代,表示模型計算和調整的一次過程;批,資料集每次以一批為單位輸入到模型中;epoch,每當整個資料集被處理完稱為一個epoch。

另外,訓練模型前先調整模型的初始權重,以便能更快更好地收斂。不能初始化為0,否則將導致學習失敗。一般可以使用標準化技術將權重初始化。

資料集分割

一般將整個資料集分成三組,比例是7:2:1,第一組為訓練集,用於調整模型引數;第二種為驗證集,用於比較多個模型直接的表現;第三組為測試集,用於測試訓練得到的模型準確性。

模型效果

模型訓練完後要看效果如何,要看看泛化的能力。

對於迴歸問題,可以通過下面幾個指標來了解擬合效果。

  • 平均絕對誤差
  • 中值絕對誤差
  • 均方誤差等等

對於分類問題,可以通過下面幾個指標來了解分類效果。

  • 準確性
  • 精確率
  • 召回率
  • F值
  • 混淆矩陣

對於聚類問題,可以通過下面幾個指標來了解聚類效果。

  • 輪廓係數
  • 同質性
  • 完整性
  • V度量

-------------推薦閱讀------------

我的開源專案彙總(機器&深度學習、NLP、網路IO、AIML、mysql協議、chatbot)

為什麼寫《Tomcat核心設計剖析》

我的2017文章彙總——機器學習篇

我的2017文章彙總——Java及中介軟體

我的2017文章彙總——深度學習篇

我的2017文章彙總——JDK原始碼篇

我的2017文章彙總——自然語言處理篇

我的2017文章彙總——Java併發篇


跟我交流,向我提問:

聊聊機器學習的套路

歡迎關注:

聊聊機器學習的套路

相關文章