最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

機器學(xué)習(xí)之PyTorch和Scikit-Learn第1章 賦予計算機學(xué)習(xí)數(shù)據(jù)的能力

2023-04-01 17:14 作者:AlanHou同學(xué)  | 我要投稿

在作者的心目中,機器學(xué)習(xí)這一解釋推理數(shù)據(jù)的應(yīng)用和算法科學(xué),是計算機科學(xué)中最令人振奮的領(lǐng)域!我們生活在數(shù)據(jù)多到泛濫的時代,使用機器學(xué)習(xí)領(lǐng)域的自學(xué)習(xí)算法 ,可以將數(shù)據(jù)轉(zhuǎn)換為知識。借助近些年來開發(fā)的眾多開源庫,我們迎來了進入機器學(xué)習(xí)領(lǐng)域最好的時代,可以學(xué)習(xí)利用強大的算法來一窺數(shù)據(jù)的模式并對未來事件進行預(yù)測。

本章中我們將學(xué)習(xí)機器學(xué)習(xí)的主要概念及其不同類型。伴隨著對相關(guān)術(shù)語的基礎(chǔ)介紹,我們?yōu)槌晒κ褂脵C器學(xué)習(xí)解決實際問題打好基礎(chǔ)。

本章中主要講解如下內(nèi)容:

  • 機器學(xué)習(xí)的主要概念

  • 機器學(xué)習(xí)的三種類型以及基本術(shù)語

  • 成功設(shè)計機器學(xué)習(xí)系統(tǒng)的組成部分

  • 安裝、配置Python進行數(shù)據(jù)分析和機器學(xué)習(xí)

構(gòu)建智能機器將數(shù)據(jù)轉(zhuǎn)化為知識

現(xiàn)代科技發(fā)展至今,有一種資源浩如煙海:大量的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。20世紀(jì)下半葉,機器學(xué)習(xí)演進為人工智能(AI)的子學(xué)科,包含自學(xué)習(xí)算法從數(shù)據(jù)中提取知識來進行預(yù)測。

機器學(xué)習(xí)沒有要求人工分析大量數(shù)據(jù)提取規(guī)則、構(gòu)建模塊,而是提供了眾多高效的方法從數(shù)據(jù)中捕獲知識進而提升預(yù)測模型的性能并通過數(shù)據(jù)驅(qū)動決策。

機器學(xué)習(xí)不僅在計算機科學(xué)研究中越來越重要,在日常生活中也發(fā)揮著越來越重要的作用。因為有了機器學(xué)習(xí),我們享受著健壯的垃圾郵件過濾器、便捷的文本和語音識別軟件、可行的網(wǎng)頁搜索引擎、優(yōu)秀電影推薦、移動支付、送餐時間預(yù)測等等。還有望在不久的將來迎來安全高效的自動駕駛技術(shù)。同時在醫(yī)療領(lǐng)域也取得了長足的進步,比如研究人員演示了通過深度學(xué)習(xí)模型可監(jiān)測出皮膚癌,精度可與人工相媲美(https://www.nature.com/articles/nature21056)。另一項由DeepMind研究人員實現(xiàn)的里程碑是使用深度學(xué)習(xí)來預(yù)測3D蛋白結(jié)構(gòu),甩出物理方式幾條街 (https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology)。精確的蛋白質(zhì)結(jié)構(gòu)預(yù)測在生物制藥研究中發(fā)揮中舉足輕重的作用,在醫(yī)療保健領(lǐng)域還有很多其它的機器學(xué)習(xí)應(yīng)用。比如,研究人員設(shè)計了一套系統(tǒng)提前4天預(yù)測新冠病人所需的氧氣來輔助醫(yī)院添置所需的資源 (https://ai.facebook.com/blog/new-ai-research-to-help-predict-covid-19-resource-needs-from-a-series-of-x-rays/)。如今另一個重要的話題是氣候變化,它是我們所面臨的巨大挑戰(zhàn)之一?,F(xiàn)在投入了很多資源來開發(fā)智能系統(tǒng) 應(yīng)對這一問題 (https://www.forbes.com/sites/robtoews/2021/06/20/these-are-the-startups-applying-ai-to-tackle-climate-change)。其中一種應(yīng)對氣候變化的方法是新興的精準(zhǔn)農(nóng)業(yè)。研究人員設(shè)計了基于計算機視覺的機器學(xué)習(xí)系統(tǒng)來將肥料的使用和浪費降至最低。

機器學(xué)習(xí)的三種類型

本節(jié)中我們來學(xué)習(xí)機器學(xué)習(xí)的三種類型:監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和強化學(xué)習(xí)。我們會學(xué)習(xí)三種類型的不同點,通過概念示例,我們會進一步了解它們所適用的實際領(lǐng)域:

圖1.1: 機器學(xué)習(xí)的三種類型

通過監(jiān)督學(xué)習(xí)預(yù)測未來

監(jiān)督學(xué)習(xí)的主要目的是通過打好標(biāo)簽的訓(xùn)練數(shù)據(jù)來對未來進行預(yù)測。這里的“監(jiān)督”是指訓(xùn)練樣例(輸入數(shù)據(jù))中期望的輸出信號(標(biāo)簽)是已知的。然后監(jiān)督學(xué)習(xí)生成輸入數(shù)據(jù)和標(biāo)簽關(guān)聯(lián)的模型。因此可以把監(jiān)督學(xué)習(xí)看成是“標(biāo)簽學(xué)習(xí)”。

圖1.2中總結(jié)了典型的監(jiān)督學(xué)習(xí)工作流,其中將帶標(biāo)簽的訓(xùn)練數(shù)據(jù)傳遞給機器學(xué)習(xí)算法來擬合出預(yù)測模型,以便對新的無標(biāo)簽數(shù)據(jù)進行預(yù)測:

圖1.2: 監(jiān)督學(xué)習(xí)流程

設(shè)想下垃圾郵件過濾的場景,我們可以使用監(jiān)督機器學(xué)習(xí)算法對一組打過標(biāo)簽的郵件來訓(xùn)練出一個能正確標(biāo)記出垃圾郵件和正常郵件的模型,進而預(yù)測新收到的郵件屬于哪一類。帶有離散分類標(biāo)簽的監(jiān)督學(xué)習(xí)任務(wù),比如我們所舉的垃圾郵件過濾的例子,也被稱為分類任務(wù)。監(jiān)督學(xué)習(xí)的另一個分支是回歸,其結(jié)果信號是一個連續(xù)值。

使用分類預(yù)測分類標(biāo)簽

分類是監(jiān)督學(xué)習(xí)的一個子類,目標(biāo)是根據(jù)過往觀察預(yù)測出新實例或數(shù)據(jù)點的分類標(biāo)簽。這些分類標(biāo)簽為離散的無序值,可以理解成數(shù)據(jù)點的分組成員。前述的垃圾郵件監(jiān)測就是典型的二元分類任務(wù),機器學(xué)習(xí)算法學(xué)習(xí)一組規(guī)則來分辨兩種可能的分類:垃圾郵件和正常郵件。

圖1.3中描述了30個訓(xùn)練樣例二元分類任務(wù)的概念,15個訓(xùn)練樣例標(biāo)記為A類,另外15個訓(xùn)練樣例標(biāo)記為B類。在這一場景中,數(shù)據(jù)集是二維的,即每個樣例有兩個關(guān)聯(lián)值:x1和x2。這時我們可以使用機器學(xué)習(xí)算法來學(xué)習(xí)一套規(guī)則-使用虛線標(biāo)記出的決策邊界-來分出兩類并根據(jù)新數(shù)據(jù)的x1和x2值將其劃為其中一類:

圖1.3:對新數(shù)據(jù)集進行分類

但分類標(biāo)簽不一定要是二元的。由監(jiān)督學(xué)習(xí)算法預(yù)測出的模型可將訓(xùn)練數(shù)據(jù)集中的任一分類標(biāo)簽分配給未標(biāo)記的新數(shù)據(jù)點或?qū)嵗?/p>

經(jīng)典的多元分類的例子是手寫文字識別。我們可以收集由不同字母組成的多個手寫樣例訓(xùn)練集。字母((“A,” “B,” “C,”等 )表示需要預(yù)測的不同無序分類或類標(biāo)簽。這時用戶通過輸入設(shè)備提供了新的手寫文字,預(yù)測模型就能預(yù)測出正確的字母,達到一定的準(zhǔn)確度。但如果數(shù)字0到9不在訓(xùn)練集中,機器學(xué)習(xí)系統(tǒng)就無法識別它們。

預(yù)測連續(xù)結(jié)果的回歸

在前面的小節(jié)中我們學(xué)習(xí)了分類任務(wù)是對實例分配分類、無序標(biāo)簽。監(jiān)督學(xué)習(xí)的第二種類型是對續(xù)結(jié)果的預(yù)測,也稱為回歸分析。在回歸分析中,會給定一些預(yù)測(解釋)變量和持續(xù)響應(yīng)變量(結(jié)果),然后通過這些變量間的關(guān)聯(lián)預(yù)測出結(jié)果。

在機器學(xué)習(xí)領(lǐng)域,預(yù)測變量通常稱為“特征”,響應(yīng)變量通常稱為“目標(biāo)變量”。在本書中我們會遵照這一慣例。

舉個例子,假設(shè)想要預(yù)測出學(xué)生的SAT數(shù)學(xué)成績。(SAT常被稱為“美國高考”。)如果學(xué)生在學(xué)習(xí)上花費的時間和最終分?jǐn)?shù)之間存在關(guān)聯(lián),我們就可以將其用作訓(xùn)練數(shù)據(jù),訓(xùn)練出一套模型來根據(jù)學(xué)習(xí)的時長預(yù)測備考學(xué)生未來的成績。

回歸算術(shù)平均

“回歸”一詞來自英國遺傳學(xué)習(xí)Francis Galton于1886年發(fā)表的論文《遺傳身高的平庸回歸》(Regression towards Mediocrity in Hereditary Stature)。Galton發(fā)現(xiàn)了人類的身高變化并沒有隨時間增加的生物現(xiàn)象。

他觀察到父母的身高并沒有傳遞給子女,而是子女身高回歸到一個平均水平。

圖1.4中描述了線性回歸的概念。給定特征變量x和目標(biāo)變量y,我們?yōu)閿?shù)據(jù)擬合出了一條最小化距離的直線,常稱為(數(shù)據(jù)點和擬合直線間的)均方距離。

這時我們可以使用通過數(shù)據(jù)學(xué)習(xí)的交點和斜線來預(yù)測出新數(shù)據(jù)的目標(biāo)變量:

圖1.4: 線性回歸示例

使用強化學(xué)習(xí)解決交互問題

另一種機器學(xué)習(xí)是強化學(xué)習(xí)。強化學(xué)習(xí)的目標(biāo)是開發(fā)出一套系統(tǒng)(agent)來根據(jù)與環(huán)境的交互提升提性能。因為當(dāng)前環(huán)境的狀態(tài)信息通常包含所謂的獎勵信號(reward signal),我們可以把強化學(xué)習(xí)看成是與監(jiān)督學(xué)習(xí)相關(guān)的領(lǐng)域。但在強化學(xué)習(xí)中,反饋不再是確定為事實的標(biāo)簽或值 ,而是由獎勵函數(shù)評價操作有多好的一個度量。通過與環(huán)境的交互,agent隨后可使用強化學(xué)習(xí)去學(xué)習(xí)一系列動作通過探索性試錯或刻意規(guī)劃來最大化獎勵。

著名的強化學(xué)習(xí)的例子是下棋程序。agent根據(jù)棋盤(環(huán)境)的狀態(tài)來決定一系列著數(shù),獎勵可定義為游戲結(jié)束時的贏棋或輸棋:

圖1.5:強化學(xué)習(xí)流程

強化學(xué)習(xí)有很多子類型。但通常的模式是由agent通過一系列與環(huán)境的交互學(xué)習(xí)嘗試最大化獎勵。每種狀態(tài)都可以關(guān)聯(lián)為正向或反向獎勵,獎勵可定義為完成一項整體目標(biāo),比如下棋游戲中的贏棋或輸棋。例如,下棋時每一著的結(jié)果都可看成是環(huán)境的不同狀態(tài)。

為進一步探討下棋的例子,我們把棋盤上的某一布置看成是導(dǎo)致贏棋可能性所關(guān)聯(lián)的一種狀態(tài),比如吃掉對方一顆棋子或?qū)④?。在下棋游戲中,獎勵(贏棋的正向獎勵或輸棋的負(fù)面獎勵)只有游戲結(jié)束時才能給出。而且最終的獎勵還取決于對手如何下。比如對手可能舍棄了車,最終卻記得了比賽。

總之,強化學(xué)習(xí)關(guān)心的是學(xué)習(xí)選擇一系列動作來最大化總獎勵,這種獎勵可通過立即采取行動或是延遲反饋來贏得。

發(fā)現(xiàn)無監(jiān)督學(xué)習(xí)的隱藏結(jié)構(gòu)

在監(jiān)督學(xué)習(xí)中,我們在訓(xùn)練模型前就知道了正確答案(標(biāo)簽或目標(biāo)變量),而在強化學(xué)習(xí)中,我們?yōu)閍gent所招待的具體動作定義了一種獎勵的度量。但在無監(jiān)督學(xué)習(xí)中,我們處理的是無標(biāo)簽數(shù)據(jù)或是未知結(jié)構(gòu)的數(shù)據(jù)。通過無監(jiān)督學(xué)習(xí)技術(shù),我們可以在沒有結(jié)果變量或獎勵函數(shù)的指引下探索出數(shù)據(jù)的結(jié)構(gòu),提取有用信息。

通過聚類找出子分組

聚類是一種解釋性數(shù)據(jù)分類或模式發(fā)現(xiàn)技術(shù),可在事前不知道分組成員的情況下將一堆信息組織為有用的分組(聚類)。在分析過程中產(chǎn)生的每個聚類都定義著一組對象,它們有某種相似性卻又與其它聚類中的對象存在區(qū)別,這也是為什么聚類有時也稱作無監(jiān)督分類。聚類對于信息結(jié)構(gòu)化以及從數(shù)據(jù)中提取有用信息是一項很好的技術(shù)。比如,營銷人員可根據(jù)客戶興趣發(fā)現(xiàn)分組,進而開發(fā)出不同的營銷策略。

圖1.6描繪了聚類如何用于將未打標(biāo)簽數(shù)據(jù)按特征x1和x2的相似性組織為三種不同的組或聚類(A, B及C,順序隨意):

圖1.6: 聚類的原理

通過降維壓縮數(shù)據(jù)

無監(jiān)督學(xué)習(xí)的另一個子領(lǐng)域是數(shù)據(jù)降維(dimensionality reduction)。通常我們所操作的是高維度數(shù)據(jù)-每次觀測都包含大量的度量,這對有限的存儲空間和機器學(xué)習(xí)算法的計算性能都構(gòu)成了極大挑戰(zhàn)。無監(jiān)督學(xué)習(xí)的數(shù)據(jù)降維常用于特征預(yù)處理,去除掉數(shù)據(jù)中的噪聲,這些噪聲可能會降低某些算法的預(yù)測性能。降維將數(shù)據(jù)壓縮為更小維度的子空間,同時又保留其相關(guān)信息。

有時,降維還可用于可視化數(shù)據(jù),比如,可將高維度的特征投射為一維、二維或三維特征空間,來可視化為2D或3D的散點圖或直方圖。圖1.7展示了使用非線性降維將三維瑞士卷壓縮為二維特征子空間:

圖1.7: 將三維降維為二維的示例

基本術(shù)語和符號簡介

前面我們討論了機器學(xué)習(xí)的三大分類:監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)和強化學(xué)習(xí),下面來學(xué)習(xí)本書中會用到一些基本術(shù)語。下面的一小節(jié)中包含用于表示數(shù)據(jù)集各方面的常用術(shù)語,以及可實現(xiàn)更精準(zhǔn)高效溝通的數(shù)學(xué)符號。

機器學(xué)習(xí)是一個非常大的領(lǐng)域并且還跨多學(xué)科,遲早一定會遇到表示相同概念的不同術(shù)語。第二個小節(jié)中收集了在機器學(xué)習(xí)文獻中最常用的術(shù)語,在閱讀機器學(xué)習(xí)刊物時會當(dāng)成手冊查閱。

本書中使用的符號和約定

圖1.8中為鳶尾花數(shù)據(jù)集的節(jié)選,這是機器中學(xué)習(xí)中的經(jīng)典案例(詳情請見https://archive.ics.uci.edu/ml/datasets/iris)。鳶尾花數(shù)據(jù)集為包含鳶尾花測量數(shù)量的150個數(shù)據(jù)樣本,分類三類(山鳶尾Setosa、變色鳶尾Versicolor和維吉尼亞鳶尾Virginica)。

這里每朵花的樣本數(shù)據(jù)占數(shù)據(jù)集的一行,單位為厘米的測量數(shù)據(jù)存放于列中,也被稱為數(shù)據(jù)集的特征:

圖1.8: 鳶尾花數(shù)據(jù)集

為保持記錄符號和實現(xiàn)簡單高效,我們會使用一些線性代數(shù)的基礎(chǔ)知識。在接下來的章節(jié)中,我們會使用矩陣標(biāo)記來表示數(shù)據(jù)。我們會遵循一個常見約定,在特征矩陣X中將每個樣本放在單獨一行中,而每個特征則放在單獨的列中。

鳶尾花數(shù)據(jù)集由150個樣本和4個特征組成,寫為150×4的矩陣,正式表示為

符號約定

本書中除特別說明,大部分時候會使用上標(biāo)i來表示第i個訓(xùn)練樣式,使用下標(biāo)?j?來來示訓(xùn)練數(shù)據(jù)集中的第?j?維。

我們會使用小寫粗體字母來表示向量 (

),大寫粗體字母來表示矩陣(

)。引用向量或矩陣中的某個元素,我們會使用斜體字母 (分別為x(n)?或

)。

例如

表示花瓣樣本150號的第一維,花萼長度。矩陣?X 中的每一行表示一個花瓣實例,可寫作一個4維行向量

?

而每個特征維度是一個150維的列向量

。例如:

類似地,可以將目標(biāo)變量(此處為類標(biāo)簽)表示為一個150維的列向量:

機器學(xué)習(xí)術(shù)語

機器學(xué)習(xí)涉及領(lǐng)域廣泛并且跨學(xué)科,因為它將不同研究領(lǐng)域的科學(xué)家匯聚一堂。有時一些術(shù)語和概念會被重新發(fā)現(xiàn)或重新定義,你可能本來很熟悉的東西使用了另一個名稱。為方便起見,下來的列表中,列出了在閱讀圖書和機器學(xué)習(xí)文獻時常用的術(shù)語及近義詞:

  • 訓(xùn)練樣例(Training example):表格中表示數(shù)據(jù)集的一行,與觀測(observation)、記錄(record)、實例(instance)或樣本(sample )為近義詞(在大部分上下文中,樣本指的是訓(xùn)練樣例的集合)。

  • 訓(xùn)練(Training):模型擬合,在參數(shù)模型中類似于參數(shù)估計( parameter estimation)。

  • 特征(Feature),縮寫為x:數(shù)據(jù)表或數(shù)據(jù)(設(shè)計)矩陣中的一列。近義詞有預(yù)測變量(predictor)、變量(variable)、輸入(input)、屬性(attribute)或協(xié)變量(covariate)。

  • 目標(biāo)(Target),縮寫為y:近義詞有結(jié)果(outcome)、輸出(output)、響應(yīng)變量(response variable)、因變量(dependent?variable)、(類)標(biāo)簽( (class) label)、真相(ground truth)。

  • 損失函數(shù)(Loss function):常用的近義詞有代價(cost?)函數(shù)。有時損失函數(shù)也稱為誤差(error?)函數(shù)。有某些文獻中,“損失”指的是為單個數(shù)據(jù)點測量的損失 ,代價用于測量對整個數(shù)據(jù)集計算損失(平均值或匯總)。

構(gòu)建機器學(xué)習(xí)系統(tǒng)路線圖

在前面的小節(jié),我們討論了機器學(xué)習(xí)的基本概念以及其三大類型。本節(jié)中,我們會討論機器學(xué)習(xí)系統(tǒng)與學(xué)習(xí)算法的其它重要部分。

圖1.9中展示了在預(yù)測模型中使用機器學(xué)習(xí)的典型工作流,這在后面的小節(jié)中會分別討論:

圖1.9: 預(yù)測模型工作流

預(yù)處理-使數(shù)據(jù)成形

我們先討論構(gòu)建機器學(xué)習(xí)系統(tǒng)的路線圖。原數(shù)據(jù)很少是按照學(xué)習(xí)模型最優(yōu)性能的格式。因此數(shù)據(jù)預(yù)處理就成為所有機器學(xué)習(xí)應(yīng)用中的重要步驟。

以前面一節(jié)中的鳶尾花數(shù)據(jù)集為例,可以把原數(shù)據(jù)看成是一組想要提取有用信息的花的圖片。有用的特征可能集中在花的顏色或高度、長度和寬度。

很多機器學(xué)習(xí)算法還要求選擇的特征與最優(yōu)性能處于同一量級,通常的實現(xiàn)方式是將特征轉(zhuǎn)化到 [0, 1] 范圍內(nèi)或是通過零平均值及單位方差所得到的標(biāo)準(zhǔn)正態(tài)分布,在后續(xù)章節(jié)中我們會學(xué)到。

某些選中的特征可能高度相關(guān),因此在某種程度上是冗余的。在這種情況下,可使用降維技術(shù)把特征壓縮為更低維度的子空間。對特征空間降維的優(yōu)勢是所需存儲空間更少,并且學(xué)習(xí)算法運行速度更快。在某些情況下,如果數(shù)據(jù)集包含大量不相關(guān)特殊(或噪聲)數(shù)據(jù)降維還能提升模型的預(yù)測性能,換句話說就是在數(shù)據(jù)集信噪比較低時。

要使機器學(xué)習(xí)算法不僅對訓(xùn)練數(shù)據(jù)集性能好而且對新數(shù)據(jù)也能產(chǎn)生很好的結(jié)果,我們需要隨機分割數(shù)據(jù)集為單獨的訓(xùn)練和測試數(shù)據(jù)集。我們使用訓(xùn)練數(shù)據(jù)集來訓(xùn)練和優(yōu)化我們的機器學(xué)習(xí)模型,但保留測試數(shù)據(jù)集到最后用于評估最終的模型。

訓(xùn)練和選擇預(yù)測模型

本章稍后我們會學(xué)到,為解不同的問題任務(wù)開發(fā)出了多種機器學(xué)習(xí)算法??赏ㄟ^David Wolpert著名的沒有免費午餐定理進行總結(jié),我們無法“免費”進行學(xué)習(xí)(《學(xué)習(xí)算法間缺少先驗差別》,D.H. Wolpert, 1996,《優(yōu)化沒有免費的午餐定理》D.H. Wolpert和W.G. Macready, 1997)。我們可以將這一概念關(guān)聯(lián)到另一個流行的格言:手里拿個錘子,看什么都像釘子 (Abraham Maslow, 1966)。比如,每個分類算法都有內(nèi)在的偏差(bias),如果不對任務(wù)做任何假定就沒有哪個分類模型優(yōu)先級更高。因此在實踐中,比較不同的學(xué)習(xí)算法來訓(xùn)練和選擇最佳效果的模型就非常重要了。但在比較不同模型之前,需要決定好測量性能的指標(biāo)。一個常見的指標(biāo)是分類準(zhǔn)確度,通過正確分類實例的比例來定義。

一個合理的問題是:如果不使用測試數(shù)據(jù)集來選擇模型,又將它保留用做模型評估,那么如何知道哪個模型對最終測試數(shù)據(jù)集和真實數(shù)據(jù)的效果更佳呢?要解決其中的問題,可以使用一些統(tǒng)稱為“交叉驗證”的技術(shù)。在交叉驗證中,我們將數(shù)據(jù)集進一步分為訓(xùn)練和驗證子集來評估模型的綜合性能。

最后,不能奢望軟件庫所提供的各種學(xué)習(xí)算法的默認(rèn)參數(shù)對你的具體問題任務(wù)就是最優(yōu)的。因此,在后續(xù)章節(jié)中我們會經(jīng)常使用超參數(shù)優(yōu)化技術(shù)來輔助我們優(yōu)化模型性能。

可以把這些超參數(shù)看作是數(shù)據(jù)中未學(xué)習(xí)到的參數(shù),但可用于提升性能的模型旋鈕(knobs)。在后續(xù)章節(jié)碰到實例案例時讀者就清楚了。

評估模型并預(yù)測未知數(shù)據(jù)實例

在選好了擬合訓(xùn)練數(shù)據(jù)集的模型后,我們可以使用測試數(shù)據(jù)集來評估其對未知數(shù)據(jù)的效果,進而評估出所謂的泛化誤差(generalization error)。如果對性能滿意,可以使用該模型來預(yù)測未來的新數(shù)據(jù)。值得注意的是前面所說的流程中的參數(shù),比如特征縮放和數(shù)據(jù)降維,只是通過訓(xùn)練數(shù)據(jù)集獲取的,之后會再次應(yīng)用這些參數(shù)來轉(zhuǎn)化測試數(shù)據(jù)集以及新的數(shù)據(jù)實例,否則測試數(shù)據(jù)所測量出的性能可能會過于樂觀。

使用Python來進行機器學(xué)習(xí)

Python是數(shù)據(jù)科學(xué)領(lǐng)域最著名的編程語言之一,借助非常活躍的開發(fā)者及開源社區(qū),開發(fā)出了大量有用的科學(xué)計算和機器學(xué)習(xí)庫。

雖然Python這類解釋性語言的性能,在執(zhí)行計算密集型任務(wù)時要遜于其它更底層的編程語言,但開發(fā)出了使用底層的Fortran和C所實現(xiàn)的NumPy和SciPy之類的擴展庫,可對多維數(shù)組執(zhí)行快速的向量化運算。

對于機器學(xué)習(xí)編程任務(wù),我們多會使用scikit-learn庫,它是當(dāng)前最流行、易用的開源機器學(xué)習(xí)庫之一。在后續(xù)的章節(jié)中,在聚焦于機器學(xué)習(xí)的一個分支深度學(xué)習(xí)時,我們會使用PyTorch庫的最新版本,它通過使用顯卡專門用于訓(xùn)練所謂的深度神經(jīng)網(wǎng)絡(luò)模型。

安裝Python及通過PyPI安裝Python包

三大操作系統(tǒng),Microsoft Windows、macOS和Linux,均可使用Python ,可通過Python官方網(wǎng)站https://www.python.org下載安裝包及文檔。

本書中的代碼示例使用Python 3.9編寫和測試,通常建議使用Python 3的最新穩(wěn)定版本。有些代碼同時兼容Python 2.7,但官方對Python 2.7的支持已于2019年終結(jié),大部分開源庫都不再支持Python 2.7 (https://python3statement.org),我們強烈建議使用Python 3.9或更新版本。

可以通過在終端(Windows下使用PowerShell )執(zhí)行如下命令來檢測Python版本:

python --version

python3 --version

本書中所使用的其它包可通過pip安裝程序來安裝,pip從Python 3.3開始就集成在于標(biāo)準(zhǔn)庫中,無需額外安裝。有關(guān)pip的更多信息請參見https://docs.python.org/3/installing/index.html。

在成功安裝Python之后,可以在終端中執(zhí)行pip 來安裝其它Python包:

pip install SomePackage

已安裝的包可通過--upgrade標(biāo)記來進行升級:

pip install SomePackage --upgrade

使用Anaconda Python發(fā)布和包管理器

針對科學(xué)計算強烈推薦安裝來自Continuum Analytics的開源包管理系統(tǒng)conda。conda免費并且采用了許可式的開源證書。其目標(biāo)是幫助在各操作系統(tǒng)中安裝數(shù)據(jù)科學(xué)、數(shù)學(xué)和工程的Python以及其版本管理。如果想使用conda,有好幾種選擇,分別是Anaconda、Miniconda和Miniforge:

  • Anaconda中預(yù)裝了很多科學(xué)計算包。可通過https://docs.anaconda.com/anaconda/install/下載安裝包,Anaconda的快速開始指南位于https://docs.anaconda.com/anaconda/user-guide/getting-started/。

  • Miniconda是Anaconda的簡化版(https://docs.conda.io/en/latest/miniconda.html)。和Anaconda基本一致,只是沒有預(yù)裝包,這深受很多人(包括作者在內(nèi))的喜愛。

  • Miniforge類似于Miniconda,但它是社區(qū)維護的,使用了與Miniconda及Anaconda不同的包倉庫 (conda-forge)。我們覺得Miniforge是Miniconda的一個很好的替代呂。下載及安裝指導(dǎo)位于GitHub倉庫https://github.com/conda-forge/miniforge。

在成功通過 Anaconda、Miniconda或Miniforge安裝好了conda后,可執(zhí)行如下命令安裝新的Python包:

conda install SomePackage

可使用以下命令升級已有的包:

conda update SomePackage

官方conda通道中所沒有的包可通過社區(qū)支持的conda-forge項目(https://conda-forge.org)來獲取,通過--channel conda-forge參數(shù)指定即可。例如:

conda install SomePackage --channel conda-forge

默認(rèn)conda通道和conda-forge都沒有的包可通過前面講過的pip 進行安裝。比如:

pip install SomePackage

科學(xué)計算、數(shù)據(jù)科學(xué)和機器學(xué)習(xí)包

本書的前半部分主要使用NumPy的多維數(shù)組來存儲和操作數(shù)據(jù)。有時會用到pandas,這是一個構(gòu)建于NumPy之上的庫,提供了一些更高階的操作工具可以更方便地處理表格數(shù)據(jù)。為提升學(xué)習(xí)體驗以及可視化量化數(shù)據(jù),這通常有利于進行理解,我們會使用自定義的Matplotlib庫。

本書中主要使用到的機器學(xué)習(xí)庫有 scikit-learn (第3到11章)。第12章 使用PyTorch做并行神經(jīng)網(wǎng)絡(luò)訓(xùn)練中會介紹用于深度學(xué)習(xí)的PyTorch庫。

在編寫本書時主要Python包的版本號參見下方的列表。理想情況下你所安裝的包的版本應(yīng)該要保持一致,這樣可保障示例代碼能正確運行:

  • NumPy 1.21.2

  • SciPy 1.7.0

  • Scikit-learn 1.0

  • Matplotlib 3.4.3

  • pandas 1.3.2

在安裝好這些包之后,可以通過在Python 中導(dǎo)入這些包并文章其__version__屬性來確認(rèn)版本,比如:

>>> import numpy >>> numpy.__version__ '1.21.2'

為方便起見,我們在本書的附屬代碼倉庫https://github.com/rasbt/machine-learning-book中添加了一個python-environment-check.py腳本,可通過執(zhí)行腳本來確認(rèn)Python的版本和包的版本。

某些章節(jié)會用到其它包,我們會提供相關(guān)的安裝信息。比如現(xiàn)在大可不必?fù)?dān)心PyTorch的安裝。第12章中會在需要的時候提供相應(yīng)的說明。

如果代碼與章節(jié)中的代碼完全一致時仍然出現(xiàn)錯誤,建議首先檢查底層包的版本,再進行調(diào)試或聯(lián)系作者。有時,新版本會引入向后不兼容的修改,可能導(dǎo)致錯誤。

如果不希望修改主Python安裝中包的版本,推薦使用虛擬環(huán)境來安裝本書中的包。如果使用Python卻沒有安裝conda管理器,可以使用venv?庫來新建虛擬環(huán)境。例如,可以通過如下兩條命令創(chuàng)建及激活虛擬環(huán)境:

python3 -m venv /Users/sebastian/Desktop/pyml-book source /Users/sebastian/Desktop/pyml-book/bin/activate

注意在每次打開新的終端或PowerShell時都需要激活虛擬環(huán)境??稍趆ttps://docs.python.org/3/library/venv.html中了解到更多有關(guān)venv?的信息。

如果使用Anaconda,可以通過如下命令創(chuàng)建和激活虛擬環(huán)境:

conda create -n pyml python=3.9 conda activate pyml

小結(jié)

本章中,我們從高層次探討了機器學(xué)習(xí)并熟悉了后續(xù)章節(jié)中會詳細學(xué)習(xí)的全景以及主要概念。我們學(xué)習(xí)到監(jiān)督學(xué)習(xí)由兩大子領(lǐng)域組成:分類和回歸。通過分類模型可以將對象分成不同類,通過回歸分析可預(yù)測目標(biāo)變量的連續(xù)結(jié)果。無監(jiān)督學(xué)習(xí)不僅為發(fā)現(xiàn)無標(biāo)簽數(shù)據(jù)的結(jié)構(gòu)提供了有用的技術(shù),還可用于特征預(yù)處理階段的數(shù)據(jù)壓縮。

我們簡單地過了一遍將機器學(xué)習(xí)應(yīng)用于問題任務(wù)的典型路線圖,可作為后續(xù)章節(jié)中更深入討論和隨手案例的基礎(chǔ)。最后我們配置了Python環(huán)境并安裝和更新了所需要的包,來做好實操機器學(xué)習(xí)的準(zhǔn)備。

本書的后面,隨時機器學(xué)習(xí)本身外,我們還會介紹預(yù)處理數(shù)據(jù)的各種技術(shù),這有助于得到各種機器學(xué)習(xí)算法的最佳性能。除了在本書中我們會廣泛講解分類算法外,還會探討回歸分析和聚類的各種技術(shù)。

前方的旅程可期,會涉及到機器學(xué)習(xí)廣泛領(lǐng)域中的多種強大技術(shù)。但我們會一步步地接近機器學(xué)習(xí),在本書的各章中層層遞進。下一章中我們會開始實現(xiàn)機器學(xué)習(xí)最早的聚類算法之一,為第3章 使用Scikit-Learn的機器學(xué)習(xí)分類器之旅的學(xué)習(xí)打下基礎(chǔ),在第3章中我們會講解更高級的機器學(xué)習(xí)算法并使用scikit-learn開源機器學(xué)習(xí)庫。

首發(fā)地址:https://alanhou.org/giving-computers-the-ability-to-learn-from-data/

機器學(xué)習(xí)之PyTorch和Scikit-Learn第1章 賦予計算機學(xué)習(xí)數(shù)據(jù)的能力的評論 (共 條)

分享到微博請遵守國家法律
左贡县| 宁河县| 龙井市| 独山县| 浦城县| 蓬莱市| 承德县| 阿荣旗| 涿鹿县| 大英县| 吉安县| 阳朔县| 湖口县| 永修县| 武宁县| 连云港市| 安国市| 涟源市| 保定市| 陕西省| 灯塔市| 宁陕县| 秦皇岛市| 神木县| 清涧县| 太仆寺旗| 类乌齐县| 波密县| 马鞍山市| 古丈县| 丹凤县| 崇左市| 陈巴尔虎旗| 咸丰县| 喀喇| 娄底市| 松滋市| 麟游县| 青川县| 漠河县| 吐鲁番市|