機器學習是使數據具有意義的算法的應用和科學,也是計算機科學中最令人興奮的領域!在數據豐沛的時代,計算機可以通過自我學習獲得算法把數據轉化為知識。近年來涌現(xiàn)出了許多強大的機器學習開源軟件庫,現(xiàn)在是進入該領域的最佳時機,掌握強大的算法可以從數據中發(fā)現(xiàn)模式并預測未來。
本文將主要涵蓋下述幾個方面:
機器學習的基本概念
三種類型的機器學習及基本術語
成功設計機器學習系統(tǒng)的基石
為數據分析和機器學習安裝和配置Python
一、構建把數據轉換為知識的智能機器
在當今的科技時代,大量結構化和非結構化數據是我們的豐富資源。機器學習在二十世紀下半葉演變?yōu)?span>人工智能(AI)的一個分支,它涉及從數據中通過自我學習獲得算法以進行預測。
機器學習并不需要先在大量的數據中進行人工分析,然后提取規(guī)則并建立模型,而是提供了一種更有效的方法來捕獲數據中的知識,逐步提高預測模型的性能,以完成數據驅動的決策。
機器學習不僅在計算機科學研究中越來越重要,在日常生活中也發(fā)揮出越來越大的作用。歸功于機器學習,今天才會有強大的垃圾郵件過濾、方便的文本和語音識別、可靠的網絡搜索引擎、具有挑戰(zhàn)性的下棋程序,并有希望在不久的將來可以享受安全和高效的自動駕駛。
二、三種不同類型的機器學習
本文將討論有監(jiān)督、無監(jiān)督和強化三種不同類型的機器學習,分析它們之間的根本差別,并用概念性的例子開發(fā)一個可以解決實際問題的應用:
1. 用有監(jiān)督學習預測未來
有監(jiān)督學習的主要目標是從有標簽的訓練數據中學習模型,以便對未知或未來的數據做出預測?!氨O(jiān)督”一詞指的是已經知道樣本所需要的輸出信號或標簽。
以垃圾郵件過濾為例,可以采用有監(jiān)督的機器學習算法,基于打過標簽的電子郵件語料庫來訓練模型,然后用模型來預測新郵件是否屬于垃圾郵件。帶有離散分類標簽的有監(jiān)督學習也被稱為分類任務,例如上述的垃圾郵件過濾。有監(jiān)督學習的另一個子類被稱為回歸,其結果信號是連續(xù)的數值。
預測標簽的分類
分類是有監(jiān)督學習的一個分支,其目的是根據過去的觀測結果來預測新樣本的分類標簽。這些分類標簽是離散的無序值,可以理解為樣本組成員的關系。前面提到的郵件垃圾檢測就是典型的二元分類任務,機器學習算法學習規(guī)則以區(qū)分垃圾和非垃圾郵件。
但是,數據集的分類并非都是二元的。有監(jiān)督學習算法經過學習得到的預測模型可以將訓練集中出現(xiàn)過的標簽分配給尚未標記的新樣本。
多元分類任務的典型例子是識別手寫字符。首先,收集包含字母表中所有字母的多個手寫示例形成訓練集。然后,當用戶通過輸入設備提供一個新的手寫字符時,預測模型能夠準確地將其識別為字母表中的正確字母。
然而,如果0~9之間的數字不是訓練集的一部分,那么機器學習系統(tǒng)將無法正確地識別。
下圖將通過30個訓練樣本闡述二元分類任務的概念,其中15個標簽為陰性(-),另外15個標簽為陽性(+)。該數據集為二元,意味著每個樣本都與x1或x2的值相關?,F(xiàn)在,可以通過機器學習算法來形成一組規(guī)則,用一條斷線來代表決策邊界以區(qū)分兩類數據,并根據x1和x2的值為新數據分類。
預測連續(xù)結果的回歸
上一節(jié)學習到分類任務是為樣本分配無序的分類標簽。第二類有監(jiān)督學習是對連續(xù)結果的預測,也稱為回歸分析?;貧w分析包括一些預測(解釋)變量和一個連續(xù)的響應變量(結果或目標),試圖尋找那些能夠預測結果的變量之間的關系。
以預測學生SAT數學成績?yōu)槔?。假設學習時間與考試成績相關,可以用該關系訓練數據學習建模,用將來打算參加該項考試學生的學習時間來預測其考試成績。
1886年,弗朗西斯·高爾頓在其論文《回歸平均的遺傳身高》中首次提到回歸一詞。高爾頓描述了一種生物學現(xiàn)象,即種群身高的變化不會隨時間的推移而增加。他觀察到父母的身高不會遺傳給自己的孩子,相反,孩子的身高會回歸種群的均值。
下圖說明了線性回歸的概念。給定預測變量x和響應變量y,對數據進行線性擬合,謀求樣本點和擬合線之間的平均距離最?。ň嚯x方差)。現(xiàn)在可以用從該數據中學習到的截距和斜率來預測新數據的結果變量:
2. 用強化學習解決交互問題
另一種機器學習是強化學習。強化學習的目標是開發(fā)系統(tǒng)或代理,通過它們與環(huán)境的交互來提高其預測性能。當前環(huán)境狀態(tài)的信息通常包含所謂的獎勵信號,可以把強化學習看作是與有監(jiān)督學習相關的領域。
然而強化學習的反饋并非標定過的正確標簽或數值,而是獎勵函數對行動的度量。代理可以與環(huán)境交互完成強化學習,通過探索性的試錯或深思熟慮的規(guī)劃來最大化這種獎勵。
強化學習的常見例子是國際象棋。代理根據棋盤的狀態(tài)或環(huán)境來決定一系列的行動,獎勵為比賽結果的輸贏:
強化學習有許多不同的子類。然而,大邏輯是強化學習代理試圖通過一系列與環(huán)境的交互來最大化獎勵。每種狀態(tài)都可以與正面或負面的獎勵相關聯(lián),獎勵可以定義為完成一個總目標,如贏棋或輸棋。例如,國際象棋每步的結果都可以認為是一種不同的環(huán)境狀態(tài)。
為進一步探索國際象棋的案例,觀察一下棋盤上與正面事件相關聯(lián)的某些位置,比如吃掉對手或威脅皇后的棋子。棋盤上的其他位置與負面事件相關聯(lián),例如在接下來的回合中輸給對手一個棋子。
實際上并不是每個回合都會有棋子被吃掉,強化學習涉及根據即時或延遲反饋來最大化獎勵,從而學習一系列的走法。
本文對強化學習做了基本概述,請注意強化學習應用已超出了本文的范圍,我們主要關注分類、回歸分析和聚類。
3. 用無監(jiān)督學習發(fā)現(xiàn)隱藏結構
在有監(jiān)督學習中訓練模型時,事先知道正確的答案;在強化學習過程中,定義了代理對特定動作的獎勵。然而,無監(jiān)督學習處理的是無標簽或結構未知的數據。使用無監(jiān)督學習技術,可以在沒有已知結果變量或獎勵函數的指導下,探索數據結構以提取有意義的信息。
3.1 尋找聚類的子集
聚類是探索性的數據分析技術,可以在事先不了解組員的情況下,將信息分成有意義的組群。為在分析過程中出現(xiàn)的每個群定義一組對象,它們之間都具有一定程度的相似性,但與其他群中對象的差異性更大,這就是為什么聚類有時也被稱為無監(jiān)督分類。
聚類是構造信息和從數據中導出有意義關系的一種有用的技術。例如,它允許營銷人員根據自己的興趣發(fā)現(xiàn)客戶群,以便制訂不同的市場營銷計劃。
下圖解釋了如何應用聚類把無標簽數據根據x1和x2的相似性分成三組:
3.2 通過降維壓縮數據
無監(jiān)督學習的另一個子類是降維。高維數據的每個觀察通常都伴隨著大量測量數據,這對有限的存儲空間和機器學習算法的計算性能提出了挑戰(zhàn)。無監(jiān)督降維是特征預處理中數據去噪的一種常用方法,它也降低了某些算法對預測性能的要求,并在保留大部分相關信息的同時將數據壓縮到較小維數的子空間上。
降維有時有利于數據的可視化。例如,為了通過二維或三維散點圖或直方圖實現(xiàn)數據的可視化,可以把高維特征數據集投影到一、二或三維特征空間。下圖展示了一個采用非線性降維將三維瑞士卷壓縮成新的二維特征子空間的實例:
三、構建機器學習系統(tǒng)的路線圖
前文討論了機器學習的基本概念及其三種不同類型。本文將討論伴隨算法的機器學習系統(tǒng)的其他重要部分。下圖展示了在預測建模中使用機器學習的典型工作流程,將在以下的幾個小節(jié)中詳細討論:
1. 預處理——整理數據
讓我們從討論構建機器學習系統(tǒng)的路線圖開始。原始數據很少以能滿足學習算法最佳性能所需要的理想形式出現(xiàn)。因此,數據的預處理是任何機器學習應用中最關鍵的步驟之一。
以鳶尾花數據集為例,可以把原始數據看成是一系列的花朵圖像,要從中提取有意義的特征。有意義的特征可能是顏色、色調、強度、高度、長度和寬度。
▲描述鳶尾屬植物數據集的摘要,這是機器學習領域的典型案例,該數據集包含了對Setosa, Versicolor and Virginica三種不同鳶尾屬植物 150多朵鳶尾花的測量結果,數據集中每行代表一朵花的樣本數據,每種花的數據以厘米為單位按列存儲,被稱之為特征數據集
許多機器學習算法也要求所選擇特征的測量結果具有相同的單位,以獲得最佳性能,通常通過把特征數據變換為[0, 1]的取值范圍或者均值和單位方差為0的標準正態(tài)分布來實現(xiàn)。
某些選定的特征可能是高度相關的,因此在某種程度上是多余的。在這種情況下,降維技術對于將特征壓縮到低維子空間非常有價值。降低特征空間維數的優(yōu)點是減少存儲空間,提高算法運行的速度。在某些情況下,如果數據集包含大量不相關的特征或噪聲,即數據集具有較低的信噪比,那么降維也可以提高模型預測的性能。
為了確定機器學習算法不僅能在訓練集上表現(xiàn)良好,對新數據也有很好的適應性,我們希望將數據集隨機分成單獨的訓練集和測試集。用訓練集來訓練和優(yōu)化機器學習模型,同時把測試集保留到最后用以評估最終的模型。
2. 訓練和選擇預測模型
從戴維·沃爾珀特著名的“天下沒有免費的午餐定理”,可以得出的重要結論是學習不是“免費”的(戴維·沃爾珀特1996年的論文《在學習算法之間沒有先驗差別》以及戴維·沃爾珀特和W. G.麥克里迪1997年的論文《算法優(yōu)化沒有免費的午餐定理》)。
直觀地說,可以把這個概念與亞伯拉罕·馬斯洛的說法聯(lián)系起來:“我想這是一種誘惑,如果你擁有的唯一工具就是一把錘子,那會把所有的東西都當作釘子來對待?!?/p>
例如,每個分類算法都有其固有的偏差,如果不對任務做任何假設,沒有哪個分類模型更優(yōu)越。在實踐中,至少要比較幾種不同的算法,以便訓練和選擇性能最好的模型。
但在比較不同模型之前,首先必須確定性能度量的指標。一個常用的度量標準是分類準確度,其定義為正確分類樣本占所有分類樣本的百分比。
有人可能會問:如果不用測試集進行模型選擇,而將其留做最終的模型評估,那么如何知道哪個模型在最終測試集和真實數據上表現(xiàn)良好?
為了解決嵌套在這個問題中的問題,可以采用不同的交叉檢驗技術,將訓練集進一步分裂為訓練集和驗證集,以評估模型的泛化性能。最后,也不能期望軟件庫所提供的不同學習算法的參數默認值對特定問題是最優(yōu)的。
直觀地說,可以把那些超參數看作是從數據中學習不到的,更像模型的旋鈕那樣,可以來回旋轉以改善模型的性能。
3. 評估模型和預測新樣本數據
在選擇了適合訓練集的模型之后,可以用測試集來評估它在新數據上的性能,以評估泛化誤差。如果對模型的性能感到滿意,那么就可以用它來預測未來的新數據。
需要注意的是前面提到的諸如特征尺度和降維這樣的性能測量參數,僅是從訓練集獲得的,而相同的參數會被進一步轉換成測試集,以及任何新的數據樣本。否則,對測試數據的性能評估可能會過于樂觀。
四、用Python進行機器學習
Python是數據科學中最常用的編程語言,其優(yōu)秀的開發(fā)人員和開源社區(qū)為其提供了大量有價值的附加軟件。
像Python這樣的解釋型語言,盡管對計算密集型任務而言,其性能不如低級的編程語言,但是已經在Fortran和C基礎上研發(fā)出像NumPy和SciPy這樣的擴展軟件庫,可以實現(xiàn)快速矢量化的多維陣列操作。
機器學習編程主要用scikit-learn,這是目前最為常用和可訪問的開源機器學習庫。
1. 從Python包索引安裝Python和其他包
Python可用于微軟Windows、蘋果MacOS和開源Linux所有三大操作系統(tǒng),可以從Python官網下載安裝程序及文檔:
建議使用最新的Python 3,盡管大部分的代碼示例也可以與Python 2.7.13或更新版兼容。如果決定使用Python 2.7來執(zhí)行這些代碼示例,那么請確保了解這兩個版本之間的主要差異。從下述網站可以找到專門比較Python 3.5和Python 2.7之間差異的優(yōu)秀總結文章。
附加軟件包可以通過pip程序安裝,該程序從Python 3.3起就一直是標準庫的一部分。可以在這里發(fā)現(xiàn)更多關于pip的信息。
在成功地安裝Python后,可以在終端上執(zhí)行pip命令來安裝Python的附加包:
pip install SomePackage
對已經安裝的包可以通過- - upgrade選項完成升級:
pip install SomePackage --upgrade
2. 采用Anaconda Python和軟件包管理器
高度推薦由Continuum Analytics發(fā)行的Anaconda作為Python的科學計算軟件包。免費的Anaconda既可用于商業(yè),也可供企業(yè)使用。該軟件包括數據科學、數學、工程在內的所有基本包,并把它們捆綁在用戶友好的跨平臺版本中。
下載Anaconda的快速啟動指南:
在成功地安裝了Anaconda之后,可以執(zhí)行下述命令安裝Python包:
conda install SomePackage
已經安裝過的包可以通過執(zhí)行下述命令升級:
conda update SomePackage