機器學習概覽

sigua心底的小聲音發表於2020-05-15
目錄
  • 機器學習概覽
  • learning from data
  • 什麼是機器學習
  • 機器學習型別
  • Supervised learning 監督學習
  • Unsupervised learning 無監督學習
  • Reinforcement learning 強化學習
  • 機器學習的過程
  • 如何衡量一個模型的好壞
  • Overfitting
  • Training, Testing, and Validation Sets
  • The Confusion Matrix
  • Accuracy Metrics
  • 基礎的資料分析
  • 過擬合overfittting和欠擬合underfitting
  • bias and variance
 
機器學習概覽
 
learning from data
 
在深入探討該主題之前,讓我們退後一步,思考一下真正的學習是什麼。我們需要為機器考慮的關鍵概念是learning from data。人類和其他動物可以通過學習經驗來調整我們的 行為。learning賦予我們生活的靈活性,我們可以調整適應新的情況,並學習新的技巧。人類學習的重要部分是remembering, adapting, and generalising:認識到上一次我們處於這種情況下(看到了此資料),我們嘗試了一些特定的動作(給出了此輸出)並且奏效了(正確),因此我們將再次嘗試,如果無法奏效,我們將嘗試其他操作。概括地說,最後一句話是關於識別不同情況之間的相似性,以便將在一個地方應用的東西可以在另一個地方使用。這就是learning有用的原因,我們可以在很多不同的地方使用我們的知識。
 
什麼是機器學習
 
於是,機器學習就是要使計算機修改或調整動作,讓這些動作變得更加準確,它的準確性是由所選動作與正確動作的相似程度來衡量。
本質是讓計算機learning from data
 
正式定義:
Machine Learning is about building systems that can learn from data. Learning means getting better at some task, given some performance measure.
 
機器學習型別
 
我們將learning寬鬆地定義為通過在某項任務上的練習變得更好。這就引出了兩個重要的問題:計算機如何知道是否在變好,如何知道如何改進?這些問題有幾種不同的可能答案,它們會產生不同型別的機器學習。現在,我們將考慮機器是否在學習: 我們可以告訴演算法問題的正確答案(帶標籤),以便下次可以正確解決;我們希望只需要告訴它一些正確的答案,然後它就可以“解決”如何為其他問題獲得正確的答案;或者,我們可以告訴它答案是否正確,而不是如何找到正確的答案,因此它必須搜尋正確的答案;我們根據答案的正確性給答案打分(概率),而不僅僅是“正確或錯誤”的答案;最後,我們可能沒有正確的答案,我們只希望演算法查詢具有共同點的輸入。
這些不同的答案為我們將要討論的不同演算法提供了分類。
 
Supervised learning 監督學習
 
監督學習提供了具有正確答案(targets/標籤)的示例訓練集,並且基於該訓練集,演算法可以概括為正確響應所有可能的輸入,這也稱為learning from exemplars
一些典型的監督學習演算法有:
  • k近鄰
  • 線性迴歸
  • 邏輯迴歸
  • SVM
  • 決策樹和隨機森林
  • 神經網路
 
Unsupervised learning 無監督學習
 
無監督學習未提供正確的響應,而是演算法嘗試識別輸入之間的相似性,以便將具有共同點的輸入歸類在一起。用於無監督學習的統計方法稱為密度估計(density estimation)。
一些重要的非監督學習方法:
  • 聚類
  • 視覺化和降維
  • 關聯性規則
 
Reinforcement learning 強化學習
 
強化學習這是在監督學習和無監督學習之間的某個地方。當答案錯誤時,系統會告知該演算法,但不會告訴你如何更正該演算法。它必須探索並嘗試各種可能性,直到找到正確的答案。強化學習有時被稱為與批評者一起學習,因為該監視器可以對答案進行評分,但不能提出改進建議。
機器學習的過程
  • 資料收集和準備: 通常很難收集,要麼是因為它需要進行很多測量,要確保它是乾淨的;它沒有重大錯誤,缺少資料等,需要考慮資料量。機器學習演算法需求大量的資料,最好沒有太多的噪音,但是增加了資料集的大小增加了計算成本,並且用足夠的資料達到了最佳效果而沒有過多的計算開銷通常是不可能的。
  • 特徵選擇: 這個始終需要事先了解問題和資料;演算法根據給定的資料集,選擇合適的演算法。
  • 引數和模型選擇:對於許多演算法,有一些引數可以必須手動設定,或者需要進行實驗才能確定適當的值。
  • 訓練給定資料集,演算法和引數: 訓練應該簡單地使用計算資源以建立資料模型以進行預測新資料的輸出。
  • 評估: 在部署系統之前,需要對其進行測試和評估以確保其效能, 對未經訓練的資料的準確性計算。
 
如何衡量一個模型的好壞
 
learning的目的是更好地預測輸出。知道演算法成功學習的唯一真實方法是將預測與已知的目標標籤進行比較,這是針對監督學習進行訓練的方式。這表明你可以做的一件事就是僅檢視演算法對訓練集train set造成的錯誤error。但是,我們希望演算法能推廣到訓練集中沒有看到的資料,並且顯然我們無法使用訓練集對其進行測試(因為資料已經被看見過了)。因此,我們還需要一些不同的資料(一個測試集test set)來對其進行測試。我們通過輸入測試集(input, target) 對到訓練好的網路中,並將預測的輸出與目標進行比較,不做權重或其他引數修改:我們使用它們來確定演算法的效能怎麼樣。這樣做唯一的問題是它減少了我們可用於訓練的資料量,但這是我們必須忍受的。
 
Overfitting
 
但實際情況要比上面的描述要複雜,我們可能還想要了解演算法在學習過程中的一般性: 我們需要確保進行足夠的訓練以使演算法有很好的一般性。實際上,過度訓練的危險與訓練不足中的危險一樣大。在大多數機器學習演算法中,可變性的數量是巨大的-對於神經網路,權重很多,並且每個權重都可以變化。因此我們需要小心:如果訓練時間太長,那麼我們將過度擬合資料,這意味著我們已經學習了資料中的噪聲和不準確性。因此,我們學習的模型太複雜了,無法推廣。
在學習過程中有兩個不同的點。在圖的左側,曲線很好地擬合了資料的總體趨勢(已將其推廣到基本的通用函式),但是訓練誤差不會接近於零。但是右圖,隨著網路的不斷學習,最終將產生一個更復雜的模型,該模型具有較低的訓練誤差(接近於零),這意味著它已經記住了訓練示例,包括其中的任何噪聲成分,因此已經過擬合訓練資料。
 
驗證集的出現
 
我們想在演算法過擬合之前停止學習過程,這意味著我們需要知道它在每個時間步上的推廣程度。我們不能為此使用訓練資料,因為它是用來訓練引數的,我們不會檢測到過度擬合;我們也不能使用測試資料,它是用來看模型效能的,我們將其儲存為最終測試。因此,我們需要用於此目的的第三組資料,稱為驗證集validation set,因為到目前為止我們正在使用它來驗證學習,這被稱為統計中的交叉驗證cross-validation。這是模型選擇model selection的一部分:為模型選擇正確的引數,以便儘可能地泛化。
 
Training, Testing, and Validation Sets
 
不同資料集的作用
 
現在,我們需要三組資料:
  • 訓練集train set: 用於實際訓練演算法的訓練集,把它拿來做函式擬合,使得模型好一點
  • 驗證集validation: 用於跟蹤演算法學習情況, 觀察函式好不好調整(改模型的時候依賴它),每次訓練完後把模型拿到它的上面去測試一下看看模型好不好,用於沒見過的資料,防止模型過擬合,雖然沒有訓練模型,但是改模型是依據模型的,對於模型來說,validation實際上是見過的,測試真正的效果應該給模型從來沒有見過的資料。
  • 測試集test set: 當我們的模型都能忍受兩個值的時候就定了,最後一步就是拿test來模型上作用看最終的看好壞(用過一次就不用第二次)。如果test資料上了效果還是不好,就要重新選擇這三個資料了,因為test資料集已經被見過了。
資料集劃分
 
每種演算法都需要一些合理量的資料去學習(精確度有所不同,但是演算法看到的資料越多,看到每種可能輸入型別的示例的可能性就越大,儘管更多的資料也會增加計算時間)。
 
平衡的分配
 
一般來說,資料劃分比例取決於你,如果有大量資料,通常執行2:1:1,否則進行3:1:1。拆分方式也很重要。如果你選擇前幾個作為訓練集,接下來選擇測試集,依此類推,那麼結果將是非常糟糕的,因為訓練沒有看到所有的類別。這可以通過以下方法解決:首先對資料進行隨機重新排序,或者將每個資料點隨機分配給一組資料,如下圖。
 
缺乏訓練資料
 
如果你確實缺乏訓練資料,那麼如果你有單獨的驗證集,可能會擔心演算法將無法得到充分訓練;那麼就可以執行leave-some-out, multi-fold cross-validation。這個想法如下圖所示。資料集被隨機分為K個子集,一個子集用作驗證集,而演算法對其他所有資料進行訓練。然後遺漏另一個子集,並在該子集上訓練一個新模型,並對所有不同的子集重複相同的過程。最後,測試並使用產生最小驗證誤差的模型。由於我們不得不訓練K個不同的模型,而不僅僅是一個模型,因此我們權衡了資料的執行時間。在最極端的情況下,存在留一法交叉驗證,該演算法僅對一項資料進行驗證,並對其餘所有資料進行訓練。
 
The Confusion Matrix
 
無論我們使用多少資料來測試訓練過的演算法,我們仍然需要確定結果是否良好。我們將在這裡介紹一種適用於分類問題的方法,稱為混淆矩陣。
混淆矩陣製作一個包含水平和垂直方向上所有可能類別的方矩陣,並沿著表格頂部列出這些類別作為預測輸出,然後在左側向下列出目標類別。
因此,例如矩陣(i,j)的元素告訴我們輸入的資料中,本來是i類的,結果演算法判別它呈j類的資料有多少個。演算法判斷對的資料是對角線上的任何內容。假設我們有三個類:C1,C2和C3。現在,我們計算次數,當類別是C1時候,演算法判別它是C1的次數,判別它是C2的次數,等等。直到填寫完表格:
 
該表告訴我們,對於這三個類,大多數示例已正確分類,但是C3類的兩個示例被錯誤分類為C1,依此類推。對於類少的時候,這是檢視輸出的好方法。如果只需要一個數字,則可以將對角線上的元素之和除以矩陣中所有元素的總和,這就是所謂的準確性accuracy,我們將看到它並不是評估機器學習演算法結果的唯一方法。
 
Accuracy Metrics
 
我們不僅可以測量準確性,還可以做更多分析結果的工作。如果考慮這些類的可能輸出,則可以將它們安排在這樣的簡單圖表中,ture positive是真實情況,predicted condition 是預測情況,condition positive是真實情況是真的,condition negative是真實情況是假的,predicted condition positive是預測情況是真的,predicted condition negative是預測情況是假的。
就像混淆矩陣一樣,此圖表的對角線上的輸入是正確的(預測情況和真實情況一致),而副對角線上的輸入則是錯誤的(預測情況和真實情況不一致)。
於是準確性定義:
準確性的問題在於,它無法告訴我們結果的所有資訊,因為它將四個數字變成一個。有一些互補的測量值可以幫助我們解釋分類器的效能,即 sensitivity 和 specificity 以及 precision 和 recall。接下來顯示它們的定義,然後進行一些解釋。
  • sensitivity(也稱為true positive rate)是正確的陽性樣本與分類為陽性的樣本之比。
  • specificity 是正確的陰性樣本與分類為陰性的樣本之比。
  • precision 是正確的陽性樣本與實際陽性樣本數量的比率,預測正確的值中,真正預測正確的是對少,準確率是多少。
  • recall 是分類為陽性的陽性樣本中正確陽性的樣本數量的比率,這與sensitivity相同。所有正的值中,實際找到它多少個。
如果再次檢視該圖表,你會發現 sensitivity 和 specificity 的分母是各列的和,而 precision 和 recall 的分母是第一列和第一行的和,因此錯過了一些在否定示例中的資訊。
總之,這些任何一個都提供了更多的資訊,而不僅僅是準確性。如果你考慮 precision 和 recall,你會發現它們在某種程度上是負相關的,因為如果 false positive 的數量增加,那麼 false negative 的數量通常會減少,反之亦然。可以將它們組合在一起以給出一個單獨的度量標準,即F1度量標準:
以及就false positive的數量而言
 
基礎的資料分析
 
如果資料是數字型別,可以提前做一個資料分析,以下幾個量是比較常見的:
  • 中位數: 資料從小到大排列,最中間的數字就是中位數。
  • 眾數: 資料中出現次數最多的數字。
  • 百分位數: 如果將一組資料從小到大排序,並計算相應的累計百分位,則某一百分位所對應資料的值就稱為這一百分位的百分位數。
  • 標準差,方差: 衡量資料的分佈均衡不均衡。
  • 資料的標準化normalization: 以前的資料差距大,通過標準化,將它們的差距縮小,這樣使得程式更好的計算,資料集和測試集都要標準化。
  • 異常值outline: 異常值的定義方法有很多,一種方法是比25%的1.5倍還小或75%的1.5倍(大太多了)還大,就是異常值。
過擬合overfittting和欠擬合underfitting
 
過擬合overfittting: 訓練資料上效果非常好,沒見過的資料就不行 。
欠擬合underfitting: 訓練資料上的效果都不怎麼行。
過擬合發生在相對於訓練資料的量和噪聲,模型過於複雜的情況。可能的解決辦法有:
  • 簡化模型,可以通過選擇一個引數更少的模型(比如線性模型,而不是高階多項式模型),減少訓練資料的 屬性數或限制模型
  • 收集更多的訓練資料(然而獲取額外的訓練資料並不是那麼輕易和廉價的)
  • 減小訓練資料的噪聲(錯誤測量引入的教噪聲,比如修改資料錯誤,去除異常值)
  • 限定一個模型讓它更簡單,正則化。
欠擬合發生在你的模型過於簡單的時候,可能解決的辦法有:
  • 選擇一個更復雜的模型,帶有更多的引數
  • 用更好的特徵訓練學習演算法(特徵工程)
  • 減小對模型的限制(比如減小正則化超引數)
機器學習重點解決的事情如何克服overfitting和underfitting。在統計學中,underfitting和overfittting是bias and variance。
 
bias and variance
 
bias: 隨著模型複雜度的上升,錯誤有一些變化。模型不夠完整,沒有把相關的特性挖掘出來。這種情況叫bias。
variance: 對訓練資料太過敏感,資料稍微一變就會產生錯誤。
上圖的意思:
  • 隨著模型的複雜度越來越高,overfitting的情況會越來越多(variance),underffting的情況越來越小。
  • 期望達到對於現有的資料比較好,對於預期的資料也比較好。
參考資料
  • Hands on TensorFlow
  • 統計學習方法
  • Machine learning: an algorithmic perspective
  • Learning from data
 

相關文章