聊聊機器學習的套路

前言

這裏說說機器學習問題分析的通常性過程,儘管存在各類各樣的機器學習問題,但大致上的步驟及最佳實踐都有必定的套路。mysql

理解問題

首先得理解要解決的是什麼問題,好比算法

  • 業務上要解決什麼問題
  • 該問題涉及到的信息管道有哪些
  • 如何採集數據,數據源在哪
  • 數據是完整的嗎,數據刻度最小是多少
  • 數據是按期發佈的仍是實時獲取的
  • 肯定影響模型的有價值因素
  • 工做量

以上等等等等。sql

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併發篇


跟我交流,向我提問:

歡迎關注:

相關文章
相關標籤/搜索