機器學習流程

語言: CN / TW / HK

人工智能的浪潮正在席捲全球,諸多詞彙時刻縈繞在我們耳邊:人工智能(Artificial Intelligence)、機器學習(Machine Learning)、深度學習(Deep Learning)。人工智能是我們想要達成的目標,而機器學習是想要達成目標的手段,希望機器通過學習方式,他跟人一樣聰明。深度學習則是是機器學習的其中一種方法。簡而言之就是:機器學習是一種實現人工智能的方法,深度學習是一種實現機器學習的技術。

機器學習可以更快且自動的產生模型,以分析更大,更復雜的數據,而且傳輸更加迅速,結果更加精準——甚至是在非常大的規模中。在現實中無人類干涉時,高價值的預測可以產生更好的決定,和更明智的行為。本文主要對傳統機器學習進行簡單的介紹,對機器學習的基本流程進行簡單的梳理。

一、機器學習

機器學習最基本的做法,是使用算法來解析數據、從中學習,然後對真實世界中的事件做出決策和預測。與傳統的為解決特定任務、硬編碼的軟件程序不同,機器學習是用大量的數據來“訓練”,通過各種算法從數據中學習如何完成任務。

這裏有三個重要的信息:

  1. 機器學習是模擬、延伸和擴展人的智能的一條路徑,所以是人工智能的一個子集;
  2. “機器學習”是要基於大量數據的,也就是説它的“智能”是用大量數據喂出來的;
  3. 正是因為要處理海量數據,所以大數據技術尤為重要;“機器學習”只是大數據技術上的一個應用。 常用的10大機器學習算法有:決策樹、隨機森林、邏輯迴歸、SVM、樸素貝葉斯、K最近鄰算法、K均值算法、Adaboost算法、神經網絡、馬爾科夫。

二、機器學習相關技術

機器學習可以主要分為:

  • 監督學習
  • 半監督學習
  • 無監督學習
  • 強化學習

2.1、監督學習

定義:根據已有的數據集,知道輸入和輸出結果之間的關係。根據這種已知的關係,訓練得到一個最優的模型。 也就是説,在監督學習中訓練數據既有特徵(feature)有標籤(label),通過訓練,讓機器可以自己找到特徵和標籤之間的聯繫,在面對只有特徵沒有標籤的數據時,可以判斷出標籤。 通俗一點,可以把機器學習理解為我們教機器如何做事情。

監督學習分為:

  • 迴歸問題(Regression)
  • 分類問題(classification)

經典的算法:支持向量機、線性判別、決策樹、樸素貝葉斯

2.1.1、迴歸問題

迴歸問題是針對於連續型變量的。 迴歸通俗一點就是,對已經存在的點(訓練數據)進行分析,擬合出適當的函數模型$y=f(x)$,這裏y就是數據的標籤,而對於一個新的自變量x,通過這個函數模型得到標籤y。

2.1.2、分類問題

迴歸問題Regression和分類問題Classification的差別就是我們要機器輸出的東西的類型是不一樣。在迴歸問題中機器輸出的是一個數值,在分類問題裏面機器輸出的是類別,和迴歸最大的區別在於,分類是針對離散型的,輸出的結果是有限的

其中分類問題分為兩種:

  • 二分類,輸出是或否。例如判斷腫瘤為良性還是惡性
  • 多分類,在多個選項中選擇正確的類別。例如輸入一張圖片判讀是貓是狗還是豬 簡單來説分類就是,要通過分析輸入的特徵向量,對於一個新的向量得到其標籤。

2.2、半監督學習

傳統的機器學習技術分為兩類,一類是無監督學習,一類是監督學習。

無監督學習只利用未標記的樣本集,而監督學習則只利用標記的樣本集進行學習。

但在很多實際問題中,只有少量的帶有標記的數據,因為對數據進行標記的代價有時很高,比如在生物學中,對某種蛋白質的結構分析或者功能鑑定,可能會花上生物學家很多年的工作,而大量的未標記的數據卻很容易得到。這就促使能同時利用標記樣本和未標記樣本的半監督學習技術迅速發展起來。簡而言之,半監督學習就是去減少標籤(label) 的用量。

半監督學習是歸納式的,生成的模型可用做更廣泛的樣本

2.3、無監督學習

定義: 我們不知道數據集中數據、特徵之間的關係,而是要根據聚類或一定的模型得到數據之間的關係。 可以這麼説,比起監督學習,無監督學習更像是自學,讓機器學會自己做事情,是沒有標籤(label)的。

無監督學習使我們能夠在幾乎不知道或根本不知道結果應該是什麼樣子的情況下解決問題。我們可以從不需要知道變量影響的數據中得到結構。我們可以根據數據中變量之間的關係對數據進行聚類,從而得到這種結構。在無監督學習中,沒有基於預測結果的反饋。

經典算法:聚類K-means算法(K均值算法),主成分分析

2.4、強化學習

定義: 強化學習是機器學習的一個重要分支,是多學科多領域交叉的一個產物,它的本質是解決 decision making 問題,即自動進行決策,並且可以做連續決策。

它主要包含四個元素:agent,環境狀態,行動,獎勵

強化學習的目標就是獲得最多的累計獎勵。

強化學習和監督式學習的區別

  1. 監督式學習就好比在學習的時候有老師在指導老師怎麼是對的怎麼是錯的,但在很多實際問題中,例如:西洋棋、圍棋有幾千萬種博弈方式的情況,不可能有一個老師知道所有可能的結果。然而強化學習會在沒有任何標籤的情況下,通過先嚐試做出一些行為得到一個結果,通過這個結果是對還是錯的反饋,調整之前的行為,就這樣不斷的調整,算法能夠學習到在什麼樣的情況下選擇什麼樣的行為可以得到最好的結果。
  2. 兩種學習方式都會學習出輸入到輸出的一個映射,監督式學習出的是之間的關係,可以告訴算法什麼樣的輸入對應着什麼樣的輸出,強化學習出的是給機器的反饋,即用來判斷這個行為是好是壞。
  3. 另外強化學習的結果反饋有延時,有時候可能需要走了很多步以後才知道以前的某一步的選擇是好還是壞,而監督學習做了比較壞的選擇會立刻反饋給算法。而且強化學習面對的輸入總是在變化,每當算法做出一個行為,它影響下一次決策的輸入,而監督學習的輸入是獨立同分布的。
  4. 通過強化學習,一個 agent 可以在探索和開發(exploration and exploitation)之間做權衡,並且選擇一個最大的回報。exploration 會嘗試很多不同的事情,看它們是否比以前嘗試過的更好。exploitation 會嘗試過去經驗中最有效的行為。一般的監督學習算法不考慮這種平衡。 強化學習和非監督式學習的區別:

非監督式不是學習輸入到輸出的映射,而是模式。例如在向用户推薦新聞文章的任務中,非監督式會找到用户先前已經閲讀過類似的文章並向他們推薦其一。而強化學習將通過向用户先推薦少量的新聞,並不斷獲得來自用户的反饋,最後構建用户可能會喜歡的文章的“知識圖”。

主要算法和分類

從強化學習的幾個元素的角度劃分的話,方法主要有下面幾類:

  • Policy based, 關注點是找到最優策略。
  • Value based, 關注點是找到最優獎勵總和。
  • Action based, 關注點是每一步的最優行動。

三、機器學習的基本流程

3.1、基本流程的簡單描述

一個基本的機器學習流程簡單來説主要分為五大步驟:問題轉化、數據的收集與處理、模型的訓練與調整、上線模型、監控

未命名錶單.png

  • 問題轉化:將實際問題轉化為機器學習問題

  • 數據的採集與處理:採集我們需要的數據,並對數據進行數據清洗等處理工作

  • 模型的訓練與調整:選擇合適的模型,使用處理好的數據進行模型訓練

  • 上線模型:將訓練好的的模型部署到線上

  • 監控:監控模型的性能,得到新的數據,然後重新進行數據收集與處理,對模型進行新的訓練和調整,以應對新的用户行為變化

3.2、基本流程的複雜描述

QQ截圖20211109161513.png

  1. 數據源:

機器學習的第一個步驟就是收集數據,這一步非常重要,因為收集到的數據的質量和數量將直接決定預測模型是否能夠建好。我們可以將收集的數據去重複、標準化、錯誤修正等等,保存成數據庫文件或者csv格式文件,為下一步數據的加載做準備。

  1. 分析:

這一步驟主要是數據發現,比如找出每列的最大、最小值、平均值、方差、中位數、三分位數、四分位數、某些特定值(比如零值)所佔比例或者分佈規律等等都要有一個大致的瞭解。瞭解這些最好的辦法就是可視化,谷歌的開源項目facets可以很方便的實現。另一方面要確定自變量$(x_1...x_n)$和因變量$y$,找出因變量和自變量的相關性,確定相關係數。

  1. 特徵選擇:

特徵的好壞很大程度上決定了分類器的效果。將上一步驟確定的自變量進行篩選,篩選可以手工選擇或者模型選擇,選擇合適的特徵,然後對變量進行命名以便更好的標記。命名文件要存下來,在預測階段的時候會用到。

  1. 向量化:

向量化是對特徵提取結果的再加工,目的是增強特徵的表示能力,防止模型過於複雜和學習困難,比如對連續的特徵值進行離散化,label值映射成枚舉值,用數字進行標識。這一階段將產生一個很重要的文件:label和枚舉值對應關係,在預測階段的同樣會用到。

  1. 拆分數據集:

需要將數據分為兩部分。用於訓練模型的第一部分將是數據集的大部分。第二部分將用於評估我們訓練有素的模型的表現。通常以8:2或者7:3進行數據劃分。不能直接使用訓練數據來進行評估,因為模型只能記住“問題”。

  1. 訓練:

進行模型訓練之前,要確定合適的算法,比如線性迴歸、決策樹、隨機森林、邏輯迴歸、梯度提升、SVM等等。選擇算法的時候最佳方法是測試各種不同的算法,然後通過交叉驗證選擇最好的一個。但是,如果只是為問題尋找一個“足夠好”的算法,或者一個起點,也是有一些還不錯的一般準則的,比如如果訓練集很小,那麼高偏差/低方差分類器(如樸素貝葉斯分類器)要優於低偏差/高方差分類器(如k近鄰分類器),因為後者容易過擬合。然而,隨着訓練集的增大,低偏差/高方差分類器將開始勝出(它們具有較低的漸近誤差),因為高偏差分類器不足以提供準確的模型。

  1. 評估:

訓練完成之後,通過拆分出來的訓練的數據來對模型進行評估,通過真實數據和預測數據進行對比,來判定模型的好壞。不同任務模型下的評價指標如下:

QQ截圖20211109165332.png

完成評估後,如果想進一步改善訓練,我們可以通過調整模型的參數來實現,然後重複訓練和評估的過程。

  1. 文件整理:

模型訓練完之後,要整理出四類文件,確保模型能夠正確運行,四類文件分別為:Model文件、Lable編碼文件、元數據文件(算法,參數和結果)、變量文件(自變量名稱列表、因變量名稱列表)。

  1. 接口封裝:

通過封裝封裝服務接口,實現對模型的調用,以便返回預測結果。

  1. 上線:

將訓練好的的模型部署到線上。

參考鏈接:

  • http://blog.csdn.net/qq_27567859/article/details/79666969

  • http://zhuanlan.zhihu.com/p/117238854

  • http://www.jianshu.com/p/afa0facbe625