機器學習溫和指南

【編者按】機器學習是現在人工智能領域中進展最大的方面,更多的初學者開始進入了這個領域。在這篇文章中,機器學習與NLP專家、MonkeyLearn聯合創始人&CEO Raúl Garreta面向初學者大致歸納使用機器學習過程當中的重要概念,應用程序和挑戰,旨在讓讀者可以繼續探尋機器學習知識。算法

機器學習是人工智能的一個分支,它經過構建算法讓計算機學習,而且在數據集上使用這些算法來完成任務,而不須要進行明確編碼。數據庫

明白了嗎?咱們可讓機器去學習如何作事情!當我第一次聽到它的時候,讓我很是興奮。那意味着咱們能夠對計算機進行編碼,讓它們本身去學習東西!編程

學習的能力是智能最重要的一個方面。將這種能力運用到機器上,應該是向讓計算機更智能邁出了一大步。事實上,機器學習是現在人工智能領域中進展最大的方面;如今它是個時髦的話題,而且使用機器學習也很是可能造就出更智能機器。網絡

這篇文章將會向初學者簡要介紹機器學習。我將大致歸納使用機器學習過程當中的重要概念,應用程序和挑戰。給出機器學習正式的詳盡的說明不是本文的宗旨,而是向讀者介紹一些初步概念,讓讀者可以繼續探尋機器學習知識。框架

機器學習真面目

好了,並非全部事物都和據說的那樣美好,機器學習也有它的侷限之處。咱們不能構建相似於《星際迷航》中的Data或者《2001太空漫遊》中的Hal 9000這樣的智能機器。可是,咱們擁有足夠的現實世界的應用程序,機器學習在此神奇般的起着做用。下面是一些實用機器學習應用中最多見的分類:機器學習

圖像處理

圖像處理的問題基本上都須要分析圖像獲取數據或是作一些轉換。下面是一些例子:編程語言

 

  1. 圖像標記,好比在Facebook中,算法能夠自動檢測照片中出現的你的或者你朋友的臉。基本上是機器學習算法從你手動標記的照片中學習。
  2. 光學字符識別(OCR),算法學會將手稿或者掃描文本轉換成數字化版本。該算法須要學會將手寫字符圖像轉換成相應的數字化字母。
  3. 自動駕駛汽車,讓汽車經過圖像處理來自動駕駛的機制之一。機器學習算法經過攝像機拍攝的每一幀圖像來學習哪裏是道路的邊緣,是否有停車標誌或者是否有車靠近。

 

文本分析

文本分析是咱們從文本文件,好比推特,郵件,聊天記錄,文檔等中提取或分類信息。下面是一些流行的例子:ide

 

  1. 垃圾郵件過濾,是最爲人知也是最經常使用的文本分類應用(給文本分類)之一。垃圾郵件過濾器學習如何基於內容和主題將郵件歸類爲垃圾郵件。
  2. 情感分析,文本分類的另外一個應用,該算法必須學會基於做者表達的情緒,來將一個觀點分類成積極、中立或者消極。
  3. 信息提取,從文本中,學會提取特定的信息或數據塊,好比,提取地址,實體,關鍵詞等。

 

數據挖掘

數據挖掘是用來從數據中發現某些模式或者作出預測。這個定義有點普通,不過你能夠理解成從海量數據庫表中挖掘有用的信息。每一行均可以是咱們的訓練實例,每一列均可以做爲一個特徵。咱們可能會感興趣用表中剩下的列來預測一條新的列,或者發現某種模式來對行進行分組。好比:工具

 

  1. 異常檢測:檢測異常值,例如信用卡欺詐檢測,你能夠從一個用戶日常的購物模式來檢測哪些購物方式是異常行爲。
  2. 關聯規則:好比,在超市或者電子商務網站,你能夠經過觀察哪些產品會一塊兒被購買來發現客戶的購買習慣。這些信息能夠用於營銷目的。
  3. 分組:好比,在SaaS平臺,能夠經過用戶行爲和資料來對用戶進行分組。
  4. 預測:從剩餘變量中預測出另外一個變量(數據庫中的一列)。好比,你能夠經過對現有客戶資料和信用評分這些信息來學習並預測新客戶的信用評分。

 

視頻遊戲與機器人

視頻遊戲和機器人是機器學習獲得應用的一個巨大領域。通常來講咱們有一個Agent(遊戲角色或機器人),它必須根據環境(視頻遊戲中的虛擬環境或者對於機器人來講的真實環境)來行動。機器學習可使這個Agent執行任務,好比移動到某個環境中而同時避開障礙或者敵人。在這些情形下一個最受歡迎的機器學習技術是強化學習,Agent經過學習環境的強化係數(若是Agent碰到了障礙物強化係數則爲負,若是達到目標則爲正)來執行任務。性能

好了,我如今知道什麼是機器學習了,可是它是如何工做的呢?

大約10年前我讀過的第一批關於機器學習書籍中有一本是Tom Mitchell寫的《機器學習》。這本書是1997年寫的,可是書中的整體概念在今天仍然有用。

在那本書中,我喜歡書中對機器學習的正式定義,以下:

對於某類任務T和性能度量P,若是一個計算機程序在T上以P衡量的性能隨着經驗E而自我完善,那麼咱們稱這個計算機程序在從經驗E學習。

好比,人工遊戲玩家要學會下國際象棋(任務T),能夠經過查看之前國際象棋比賽或與導師對弈(經驗E)來學習。它的性能P能夠用它與人類玩家對弈獲勝的比例來度量。

讓咱們用更多例子來闡述:

案例1:向系統中輸入一張圖片,系統須要判別圖片中是否有巴拉克·奧巴馬的臉(通常來講是相似於Facebook的圖像自動標記)。

案例2:向系統中輸入一條推文,系統判別這條推文是否帶有積極或消極情感。

案例3:向系統中輸入某人的一些信息,系統計算出此人償還信用卡貸款的機率。

在案例1中,系統任務是檢測巴拉克·奧巴馬的臉什麼時候在圖像中出現。能夠將他出如今哪些照片或不出如今哪些照片中的信息做爲經驗。系統的性能能夠用系統正確識別出奧巴馬臉的次數比例來度量。

在案例2中,系統任務是對一條推文進行情感分析。系統的經驗能夠是一組推文和與它們相對應的情緒。系統的性能能夠由系統對新推文情感分析正確的比例來度量。

在案例3中,系統任務是進行信用評分。系統能夠將一系列用戶資料和相對應的信用評分做爲經驗。能夠用平方偏差(預測和預期得分之間的差別)做爲性能度量。

爲了讓算法學習將輸入轉換成指望的輸出,你必須提供訓練實例或者訓練樣例,也就是Mitchell所定義的經驗E。一組訓練集是一系列實例的集合,它們將做爲樣例,機器學習算法從這些樣例中學習而且完成預期任務。很好理解,不是嗎?這就像你給小孩示範如何扔球同樣,你扔幾回球來教他如何作,而後經過觀看那些樣例,他開始學會本身扔球了。

每個訓練實例一般表示爲一組固定的屬性或特徵。特徵是用來表示每個實例的方式。例如,在案例1中,一張圖片能夠由每一個像素的灰度級別來表示。在案例2中,推文能夠用推文中出現的字詞來表示。在案例3中,信用記錄能夠用此人的年齡、薪水、職業等來表示。

計算和選擇合理的特徵來表示一個實例是使用機器學習的過程當中最重要的任務之一,在本文稍後部分咱們將討論這點。

機器學習算法的種類

在本節中咱們將討論兩大類機器學習算法:監督式學習和非監督式學習算法。這兩類算法的主要區別在於咱們提供給算法的訓練樣例,算法使用樣例的方式以及它們解決問題的類別。

監督式學習

監督式學習中,機器學習算法能夠看做是將特定輸入轉換成指望輸出的過程。

機器學習須要學會如何將全部可能輸入轉換成正確/指望輸出,因此每一個訓練樣例都有特定的輸入和指望輸出。

在人工國際象棋手的案例中,輸入能夠是特定的棋盤狀態,輸出則多是在這一狀態下最好的下棋方式。

根據輸出的不一樣,咱們又能夠把監督式學習分爲兩小類:

分類

當輸出值屬於離散和有限集合,那麼這就是一個分類問題。案例2能夠看做是一個分類問題,輸出是一個有限集合:積極,消極或者中立,咱們的訓練樣例是這樣的:

 

迴歸

當輸出是連續的數值,好比,機率,那麼這就是一個迴歸問題。案例3就是一個迴歸問題,由於結果是介於0到1的數字,它表明一我的償還債務的機率。在這個案例下,咱們的訓練樣例是這樣的:

 

監督式學習是機器學習算法中最受歡迎的一類。使用這種方法的缺陷是,對於每個訓練樣例,咱們都須要提供與之對應的正確輸出,在大多狀況下,這會耗費大量人力物力財力。好比,在情感分析案例中,若是咱們須要10000條訓練案例(推文),咱們須要對每一條推文都標記上正確的情感(積極,消極或者中立)。這將須要一組人來閱讀並標記每一條推文(很是耗時又無聊的工做)。這一般是機器學習算法最多見的瓶頸:收集正確標記的訓練數據。

非監督式學習

第二類機器學習算法叫作非監督式學習。在這種狀況下,訓練數據只須要輸入到算法中便可,不須要有與之對應的指望輸出。典型的用例就是發現訓練樣例之間隱藏的結構或者關係。典型的案例就是聚類算法,咱們學習找到類似實例或者一組實例(集羣)。好比咱們有一條新聞,咱們但願推薦一條類似的新聞。一些聚類算法好比K-means從輸入數據中來學習。

機器學習算法

好了,如今來說講數學和邏輯知識了。爲了將輸入轉換成指望輸出,咱們可使用不一樣的模型。機器學習並非惟一的算法,你可能據說過支持向量機,樸素貝葉斯,決策樹或者深度學習。那些是不一樣的機器學習算法,它們均可以解決一樣的問題:學習將輸入轉換成正確的輸出。

那些不一樣的機器學習算法使用不一樣的範式或技術來執行學習過程,並將它們所學知識表示出來。

在咱們講解每個算法以前,咱們要了解,最多見的原則是,機器學習算法試圖達到通常化。也就是說,它們試圖用最簡單的理論來解釋事物,這被稱爲奧卡姆剃刀原則。全部機器學習算法,無論它所使用的範式如何,都將嘗試建立最簡單的假設(作出最少假設的那個)來講明大部分的訓練實例。

有不少機器學習算法,不過咱們來簡要介紹下三種流行的算法:

支持向量機:該模型試圖構建一個超平面高維空間集,它試圖經過計算與最近實例最大距離來區分不一樣類的實例。這個概念直觀簡單,可是該模型有時候也會很是複雜和強大。事實上,對於某些領域支持向量機是你目前可使用的最好的機器算法之一。

機率模型:這類模型一般經過對問題進行機率分佈建模來預測正確的響應。這類算法中最流行的可能要屬樸素貝葉斯分類器了,它使用貝葉斯定理和特徵之間獨立性假設來構建分類器。這個模型的優點之一是即簡單又強大,並且不只會返回預測值還會返回預測值的肯定度,這是很是有用的。

深度學習:是基於大名鼎鼎的人工神經網絡模型的機器學習的新領域。神經網絡有着聯結的操做方式,它們試圖模仿(以很是簡單的方式)大腦的工做方式。基本上,它們由一組相互關聯的神經元(處理的基本單位)組成,這些神經元被組織成許多層。簡單來講,深度學習使用更深的層構建了新的結構,經過高層次抽象改進了算法,不只改進了學習方式,並且構建了自動錶示最重要特徵的結構。

機器學習中的重要方面

機器學習聽起來是個美妙的概念,它確實如此,可是機器學習中有一些過程並非那麼自動完成的。事實上,在設計解決方案時,不少時候須要人工操做。然而,這是獲得優良結果相當重要的一環。其中一些方面有:

我該使用哪類機器學習算法?

監督式仍是非監督式?

你有標記的數據嗎?也就是輸入和對應的輸出。若是有,那麼你可使用監督式學習算法。若是沒有,那麼使用非監督式算法能夠解決問題。

分類,迴歸仍是聚類?

這主要取決於你想要解決什麼樣的問題。若是你想標記數據(用離散的選項來標記),分類多是正確的選擇。相反,若是你想選擇一個數字,好比說分數,迴歸則是你最佳的選擇。或者你想在電子商務網站上針對用戶目前瀏覽信息來推薦類似產品,那麼聚類則是你最好的選擇。

深度學習,SVM,樸素貝葉斯,決策樹···哪一個最好?

個人答案是:沒有最好的。顯然,深度學習和支持向量機已經證實,在不一樣應用中它們是最強大和最靈活的算法。但考慮到根據不一樣特定應用,一些機器學習算法可能比其餘算法更好。分析它們各自的優點而且使用它們!

特徵工程

特徵工程是咱們提取、選擇用來表示訓練樣例和實例的最重要的特徵供機器學習算法處理的過程。這個過程是機器學習(有時沒有給予足夠的讚譽和重視)中最重要的方面。

請注意:若是你不向算法提供有質量保證的特徵,結果會是糟糕的,即便你使用了此情形下最好的機器學習算法。這就像是你在黑暗中努力學習如何用肉眼閱讀,無論你有多聰明你都不能作到。

特徵提取

爲了向機器學習算法輸入數據,你一般須要將原始數據轉換成算法可以「理解」的東西。這個過程被稱做特徵提取。一般咱們將原始數據轉換成特徵向量。

在案例1中,咱們如何向機器學習算法輸入一張圖像呢?

一個直接的方式就是將圖像轉換成向量,每個成分是圖像中每個像素的灰度值。因此每個成分或者特徵,均可以用0到255的值表示,0表示黑色,255表示白色,1到254是不一樣程度的灰色。

這種方式可能可行,可是若是咱們提供更高層次的特徵可能會工做得更好:

 

  • 圖像包含人臉嗎?
  • 膚色是什麼?
  • 眼睛是什麼顏色的?
  • 臉上有毛髮嗎?

 

這些是更高層次特徵,它們向算法提供了更多的知識而不僅是每一個像素的灰度值(它們的計算能夠用其餘機器學習算法來完成)。經過提供更高層次特徵咱們就在「幫」機器學習算法獲得更好的學習信息來判斷個人或者其餘某我的的臉是否出如今一張圖像中。

若是咱們實施更好的特徵提取:

 

  • 咱們算法可以學習並獲得預期結果的可能性會更高。
  • 咱們可能不須要那麼多訓練樣例。
  • 這樣一來,咱們能夠顯著減小訓練模型所需的時間。

 

特徵選擇

有些時候(並非大多狀況下),咱們選擇向算法輸入的特徵可能並沒多大用處。好比,當對一條推文進行情感標記的時候,咱們可能將推文的長度,推文發表的時間等做爲特徵,這些特徵可能有用也可能沒有用,並且有自動的方法來識別它們是否有用。直觀地,特徵選擇算法經過技術手段對每條特徵打分,而後根據它們的分值返回最重要的那些特徵。

另外一個須要記住的要點是:避免使用海量特徵集。有些人可能嘗試添加全部可能的特徵到模型中讓算法來學習。但這不是個好主意,當咱們添加更多的特徵來表明實例時,空間的維度就增長了,使得矩陣更加稀疏。直觀地,由於咱們獲得更多的特徵,咱們必須有很是多的實例在表示每一個特徵的組合。這就是所謂的維度災難,隨着模型複雜度的增加,訓練樣例的數目須要以指數形式隨着增加,相信我,這將是棘手的問題。

訓練樣例

你必須向機器學習算法輸入訓練樣例。取決於你想要解決的問題,咱們將會使用到幾百,幾千,幾百萬甚至上億的訓練樣例。並且,保持樣例的質量也相當重要,若是你向算法中輸入了錯誤的樣例,獲得良好結果的可能性會下降。

收集大量的優質數據來訓練機器學習算法一般是一項耗費人力物力的工做。除非你已經有標記好的數據,不然你須要本身手動或者僱傭他人來標記數據。一些衆包平臺的工具嘗試解決這樣的問題,你能夠在這裏找到一些工具來完成任務。或者經過使用本身的機器學習模型生成的輔助程序也能夠將標記操做變得更高效。

訓練樣本的通常規則是:你收集了越是優質的訓練數據,你可能就可能獲得更好的訓練結果。

測試樣本和性能指標

在咱們訓練完一個機器學習模型以後,咱們須要測試它的性能。這是很是重要的,不然你不知道你的模型是否學會了東西!

這個概念很是簡單,咱們使用一個測試集,一個不包含在訓練集中的實例集合。基本上,咱們將輸入每一個測試樣本到模型中,而後觀察它是否會得出預期結果。在監督式學習分類的情形中,咱們只須要輸入每條測試數據,而後檢查模型輸出是否與預期同樣。若是咱們的模型正確得出了95%的測試樣本的結果,咱們說這個模型的準確率是95%。

須要牢記的是,訓練和測試數據集不能重合,這是測試模型泛化能力和預測能力的惟一途徑。你可能在你的訓練數據上可以獲得較高的準確率,但若是在單獨的測試集上則獲得較差的準確率。這就是過擬合,也就是算法對訓練樣本過分擬合致使糟糕的預測能力。一般避免過擬合的方法是使用較少特徵的,更簡單的模型,簡化模型,並使用更大更具表明性的訓練集。

準確率是最基本的指標,同時你也應該關注其餘的指標,好比精準度和召回率,這將會告訴你算法的在每個分類上(當使用監督式學習分類時)的性能如何。混淆矩陣是觀察分類算法在哪裏出現混淆預測的好工具。

對於迴歸和聚類問題,有其餘的指標來度量算法的性能。

性能

在實際應用中,若是你要實施解決方案,你必須創建一個強大和高性能的解決方案。在機器學習應用中,這會是一個複雜的任務。首先,你須要選擇機器學習框架,這不是項容易的工做,由於並非全部的編程語言都有相關的強大工具。Python和Scikit-learn是構建強大機器學習框架可使用的編程語言的良好例子。

選擇好框架以後,就要考慮性能問題了。取決於數據量,複雜度和設計的算法,運行訓練算法可能會耗費大量的計算時間和內存。你可能須要運行多個訓練算法直到獲得優良的結果。並且,一般你可能會用新實例來從新訓練模型來提升準確率。

爲了在使用時訓練大量模型並快速的到結果,咱們一般使用較大內存和多核處理器的機器來並行訓練模型。

這些大可能是實際問題,若是你想部署機器學習解決方案到實際應用中,考慮這些問題是很是重要的。

結束語

就是這樣,我簡要概述了什麼是機器學習。還有許多實際應用以及機器學習算法和概念本文沒有涉及,咱們將這留給讀者自行研究。

機器學習是很強大的,但訓練它也是艱難的,這篇文章中所說的訓練模型時可能出現的困難只是冰山一角。

一般具備計算機科學特別是機器學習的背景是取得優良結果所必須的。一我的可能會在步入正軌前由於諸多困難而失望。

這就是咱們建立MonkeyLearn的緣由,使用於文本分析的機器學習技術大衆化。避免從新發明輪子,讓每個軟件開發人員或企業家迅速得到實用的結果。如下是咱們主要的工做方面,抽象全部這些問題的最終用戶,從機器學習複雜度到實際擴展性來排序,獲得即插即用的機器學習。

原文連接:A Gentle Guide to Machine Learning(譯者/劉翔宇 審覈/趙屹華、朱正貴、李子健 責編/仲浩)

相關文章
相關標籤/搜索