前言
這裡說說機器學習問題分析的一般性過程,儘管存在各種各樣的機器學習問題,但大體上的步驟及最佳實踐都有一定的套路。
理解問題
首先得理解要解決的是什麼問題,比如
- 業務上要解決什麼問題
- 該問題涉及到的資訊管道有哪些
- 如何採集資料,資料來源在哪
- 資料是完整的嗎,資料刻度最小是多少
- 資料是定期釋出的還是實時獲取的
- 確定影響模型的有價值因素
- 工作量
以上等等等等。
ETL處理
待收集的資料可能是表格資料、一串實時資料,N維矩陣或其他型別資料,同時也可能是多種儲存介質,通過ETL處理將混合的資料來源轉成我們需要的格式,生成結構化資料型別。
資料預處理
對於收集的資料,可能存在缺陷,比如空值、異常值或資料產生器本身引起的偏差。這些缺陷可能導致模型效果不佳,同時為了優化更快收斂,需要做資料標準化處理,所以需要進行資料預處理。
比如缺失值可以簡單設為0、列平均值、中值、最高頻率值、甚至是穩健演算法和knn等等。
比如標準化資料集,使資料集正態分佈,平均值為0標準差為1。而且還達到了特徵縮放效果。
模型定義
機器學習主要就是模型問題,我們通過機器學習來對現實進行抽象建模,以解決現實問題。所以機器學習主要工作就是使用哪種模型來建模,儘管各種大大小小模型一大堆,但大體上也有些套路。
- 要完成的任務是預測結果還是對資料進行分類,前者是迴歸問題,後者是分類問題。
- 對於分類問題,如果需要資料標記,則是監督學習,否則是非監督學習,使用聚類技術。
- 資料是否為連續的,是的話考慮序列模型,比如自迴歸和RNN之類的。
- 儘量使用簡單模型,如果能用比如用單變數或多變數的線性迴歸或邏輯迴歸。
- 簡單模型解決不了的情況,可通過多層神經網路解決,比如複雜的非線性。
- 使用了多少個維度的變數,將作用大的特徵提取出來,並把不重要的特徵去掉,比如用PCA降維。
- 不是監督也不是非監督?考慮強化學習?
損失函式
損失函式用於衡量模型質量,它可以度量模型預測值與實際期望之間的差距,選擇不合適的函式可能會影響模型的準確性,甚至影響收斂速度。
模型訓練
資料準備好了,模型定義好了,就可以開始訓練模型。訓練中涉及幾個關鍵術語:迭代,表示模型計算和調整的一次過程;批,資料集每次以一批為單位輸入到模型中;epoch,每當整個資料集被處理完稱為一個epoch。
另外,訓練模型前先調整模型的初始權重,以便能更快更好地收斂。不能初始化為0,否則將導致學習失敗。一般可以使用標準化技術將權重初始化。
資料集分割
一般將整個資料集分成三組,比例是7:2:1,第一組為訓練集,用於調整模型引數;第二種為驗證集,用於比較多個模型直接的表現;第三組為測試集,用於測試訓練得到的模型準確性。
模型效果
模型訓練完後要看效果如何,要看看泛化的能力。
對於迴歸問題,可以通過下面幾個指標來了解擬合效果。
- 平均絕對誤差
- 中值絕對誤差
- 均方誤差等等
對於分類問題,可以通過下面幾個指標來了解分類效果。
- 準確性
- 精確率
- 召回率
- F值
- 混淆矩陣
對於聚類問題,可以通過下面幾個指標來了解聚類效果。
- 輪廓係數
- 同質性
- 完整性
- V度量
-------------推薦閱讀------------
我的開源專案彙總(機器&深度學習、NLP、網路IO、AIML、mysql協議、chatbot)
跟我交流,向我提問:
歡迎關注: