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