機(jī)器學(xué)習(xí)與人工智能基礎(chǔ):價(jià)值估算(第三章-建立機(jī)器學(xué)習(xí)系統(tǒng))

建立機(jī)器學(xué)習(xí)系統(tǒng)

An Overview of Building a Machine Learning System

前言叨B叨

前兩章對(duì)機(jī)器學(xué)習(xí)的背景以及應(yīng)用場(chǎng)景做了比較詳細(xì)的闡述, 還介紹了一個(gè)關(guān)于機(jī)器學(xué)習(xí)算法的基本概念. 從第三章起會(huì)圍繞機(jī)器學(xué)習(xí)的流程,算法等詳細(xì)鋪開(kāi), 同學(xué)們請(qǐng)系好安全帶.


觀眾朋友們,晚上好,

今天是個(gè)好號(hào),農(nóng)歷不造初幾,歡迎收看新聞聯(lián)播節(jié)目,

首先向您介紹這次新聞的主要內(nèi)容:

1.機(jī)器學(xué)習(xí)中,NumPy, scikit-learn, 和 pandas是怎么一回事

2.向量(Vectors):如何有效地處理大型數(shù)據(jù)集

3.訓(xùn)練有監(jiān)督機(jī)器學(xué)習(xí)模型的基本工作流程

?4.梯度增強(qiáng)(Gradient boosting): 它一個(gè)通用的機(jī)器學(xué)習(xí)算法

下面是詳細(xì)報(bào)道:


1. NumPy, scikit-learn, 和潘大師(pandas)

Python是機(jī)器學(xué)習(xí)中使用最廣泛的編程語(yǔ)言之一企蹭。除了簡(jiǎn)單易用之外帖烘,Python之所以非常流行因?yàn)樗性S多hen很棒的機(jī)器學(xué)習(xí)庫(kù)。我們將用到三個(gè)最流行的庫(kù): 首先,我們將使用numpy代兵。NumPy是一個(gè)庫(kù)笛园,利用它你可以處理大型數(shù)據(jù)集以及內(nèi)存操作兜挨。它是免費(fèi)的退唠、開(kāi)源的箩艺,而且在硅谷之類(lèi)的IT行業(yè)應(yīng)用相當(dāng)廣泛。它是許多其他機(jī)器學(xué)習(xí)庫(kù)的基礎(chǔ)宪萄。接下來(lái)艺谆,我們將使用scikit-learn。scikit-learn是一個(gè)非常受歡迎的機(jī)器學(xué)習(xí)庫(kù)拜英。

你可以把它看作是機(jī)器學(xué)習(xí)中的瑞士軍刀静汤。它提供了許多最流行的機(jī)器學(xué)習(xí)算法并且很容易使用。最后聊记,我們還將使用pandas撒妈。pandas允許您將數(shù)據(jù)表示為一個(gè)可以用代碼控制的虛擬電子表格。它有許多類(lèi)似微軟Excel的功能排监,比如快速編輯和計(jì)算等等狰右。它能夠輕松的處理CSV數(shù)據(jù)文件。pandas的名字來(lái)自“panel data”一詞(和我們的大熊貓不搭噶哈)舆床,因?yàn)樗涯愕臄?shù)據(jù)表示成一系列的面板棋蚌,就像電子表格中的頁(yè)面一樣。

令人欣慰的是, 所有這些庫(kù)都完美地協(xié)同工作挨队。NumPy提供數(shù)據(jù)加載和數(shù)據(jù)處理的基本工作谷暮,pandas則使得數(shù)據(jù)更容易清理及易于計(jì)算. 基于處理過(guò)的數(shù)據(jù), 然后由scikit-learn提供實(shí)際的機(jī)器學(xué)習(xí)算法來(lái)執(zhí)行。

2. 向量(Vectors):如何有效地處理大型數(shù)據(jù)集

在機(jī)器學(xué)習(xí)中盛垦,我們經(jīng)常使用大數(shù)據(jù)數(shù)組湿弦。由于機(jī)器學(xué)習(xí)的線(xiàn)性代數(shù)根(linear algebra roots),這些數(shù)組有時(shí)被稱(chēng)為單個(gè)數(shù)據(jù)列的向量和較大數(shù)組的向量腾夯。讓我們看看如何在代碼中使用向量颊埃。讓我們打開(kāi)vecotors pt1.py。

這里有一個(gè)簡(jiǎn)單的數(shù)組蝶俱,或者向量班利,表示訓(xùn)練數(shù)據(jù)集中每套房的面積。當(dāng)我們訓(xùn)練機(jī)器學(xué)習(xí)算法時(shí)榨呆,我們經(jīng)常需要在訓(xùn)練數(shù)據(jù)集中的每一行應(yīng)用相同的數(shù)學(xué)運(yùn)算罗标。例如,假設(shè)我們要將每個(gè)面積乘以0.3的權(quán)重积蜻。

完成這個(gè)事情最高效的方法是什么闯割?在傳統(tǒng)的編程中,標(biāo)準(zhǔn)的解決方案是每次一行遍歷數(shù)組竿拆,一個(gè)for循環(huán)搞定宙拉。讓我們運(yùn)行代碼并檢查輸出。在控制臺(tái)中如输,我們可以看到它在得到最終結(jié)果之前對(duì)數(shù)組進(jìn)行了13次獨(dú)立的更新。這樣做是沒(méi)毛病的,但每次在數(shù)組中一個(gè)元素上對(duì)每個(gè)元素進(jìn)行乘法實(shí)際上效率很低不见。如今的CPU有能力并行批量操作澳化。

這種能力稱(chēng)為單指令、多數(shù)據(jù)或SIMD稳吮。而不是一次一個(gè)地遍歷每個(gè)數(shù)組元素缎谷,CPU可以將數(shù)組塊加載到內(nèi)存中,并在一步中完成該塊上的所有乘法操作灶似。這在處理大型數(shù)組時(shí)速度會(huì)產(chǎn)生巨大的差異列林。讓我們來(lái)看看代碼vecotors pt2.py。

我們不使用循環(huán)來(lái)處理數(shù)組酪惭,而是使用一個(gè)數(shù)組庫(kù)希痴,它知道如何并行處理數(shù)據(jù)。NumPy可以在內(nèi)存中非常高效地創(chuàng)建數(shù)組, 然后會(huì)自動(dòng)并行化春感。

因此砌创,我們不使用for循環(huán),我們的代碼看起來(lái)如下所示鲫懒。

首先我們創(chuàng)建的數(shù)組作為NumPy數(shù)組而不是作為一個(gè)正常的Python數(shù)組嫩实。然后我們會(huì)將整個(gè)數(shù)組乘以0.3。當(dāng)我們告訴NumPy要把一個(gè)數(shù)組乘以一個(gè)單個(gè)的數(shù)字時(shí)窥岩,NumPy會(huì)將此操作分別應(yīng)用于數(shù)組中的每一個(gè)元素甲献。讓我們來(lái)運(yùn)行代碼看看效果。

哪種方法更高效?相信群眾的眼睛是雪亮的颂翼。

但更重要的是晃洒,NumPy自動(dòng)利用CPU的SIMD功能,增加并聯(lián)陣列塊疚鲤。我們得到與使用for循環(huán)相同的結(jié)果锥累,但我們不需要經(jīng)歷這么多步驟。你在陣列上需要做的大部分操作都可以并行完成集歇。這包括簡(jiǎn)單的操作比如加法桶略,減法,乘法诲宇,和除法际歼,甚至更復(fù)雜的操作,如正弦和余弦姑蓝。這就是所謂的矢量化我們的代碼鹅心。我們用可并行執(zhí)行的向量操作代替迭代循環(huán)。這是非常重要的一點(diǎn)纺荧。

如果你發(fā)現(xiàn)自己為數(shù)組寫(xiě)了一個(gè)for循環(huán)旭愧,那么你可能out了颅筋。相反,你應(yīng)該使用numpy來(lái)操作整個(gè)數(shù)組输枯。

3. 訓(xùn)練有監(jiān)督機(jī)器學(xué)習(xí)模型的基本工作流程

讓我們?yōu)g覽基本的工作流來(lái)訓(xùn)練有監(jiān)督的機(jī)器學(xué)習(xí)模型议泵。不管使用哪種有監(jiān)督的機(jī)器學(xué)習(xí)算法,基本過(guò)程都是一樣的桃熄。我們將在課程的后面更詳細(xì)地介紹這個(gè)工作流的每一步先口,但是在深入了解細(xì)節(jié)之前,了解基本的工作流是非常有幫助的瞳收。

使用機(jī)器學(xué)習(xí)的第一步是獲取數(shù)據(jù)碉京。對(duì)于我們預(yù)測(cè)房屋價(jià)格的項(xiàng)目,我們將收集一年內(nèi)所有在一個(gè)地區(qū)銷(xiāo)售的房屋的數(shù)據(jù)螟深。對(duì)于每一個(gè)出售的房子谐宙,我們會(huì)盡可能多地收集,比如臥室的數(shù)量血崭,房子的大小等等卧惜。下一步是清理和預(yù)處理數(shù)據(jù)。

我們開(kāi)始使用的數(shù)據(jù)幾乎總是需要先處理一下夹纫,然后才能用于機(jī)器學(xué)習(xí)咽瓷。我們將詳細(xì)介紹這一點(diǎn),但基本思想是:將任何基于文本的數(shù)據(jù)轉(zhuǎn)換成數(shù)字舰讹,并選擇哪些數(shù)據(jù)最有用以包含在模型中茅姜。接下來(lái),我們將獲取所有的數(shù)據(jù)月匣,并對(duì)數(shù)據(jù)的順序進(jìn)行亂序排列钻洒。

我們希望確保數(shù)據(jù)是隨機(jī)的,這樣機(jī)器學(xué)習(xí)算法就不會(huì)因?yàn)閿?shù)據(jù)恰好符合某個(gè)特定的順序,而在不存在的模式上拾取數(shù)據(jù)锄开。下一步素标,我們將得到經(jīng)過(guò)處理的數(shù)據(jù),并將其分成兩組萍悴,通常是第一組數(shù)據(jù)的70%行头遭,第二組中的30%行。

前70%的數(shù)據(jù)是我們用來(lái)訓(xùn)練模型的癣诱。這稱(chēng)為我們的訓(xùn)練數(shù)據(jù)集计维。機(jī)器學(xué)習(xí)模型將僅基于此數(shù)據(jù)創(chuàng)建。最后30%的數(shù)據(jù)是我們的測(cè)試數(shù)據(jù)撕予。這些數(shù)據(jù)將不用于訓(xùn)練模型鲫惶,而是用于檢查模型的準(zhǔn)確性。同樣非常重要的是实抡,我們也不用訓(xùn)練數(shù)據(jù)來(lái)檢查模型的準(zhǔn)確性∏纺福現(xiàn)在我們有了干凈的欢策、經(jīng)過(guò)調(diào)整的、拆分的數(shù)據(jù)赏淌,我們已經(jīng)準(zhǔn)備好訓(xùn)練機(jī)器學(xué)習(xí)模型了猬腰。但是每一個(gè)機(jī)器學(xué)習(xí)算法都需要設(shè)置一些參數(shù)。這些參數(shù)將控制諸如模型如何學(xué)習(xí)模式和數(shù)據(jù)的速度以及模式的復(fù)雜程度猜敢。

這些被稱(chēng)為超參數(shù)(hyperparameters)設(shè)置。然后盒延,通過(guò)訓(xùn)練數(shù)據(jù)和期望輸出來(lái)訓(xùn)練機(jī)器學(xué)習(xí)模型缩擂。

當(dāng)模型被訓(xùn)練時(shí),我們需要檢查它對(duì)測(cè)試數(shù)據(jù)集的準(zhǔn)確性添寺。這證明了該模型在新數(shù)據(jù)上是否有效胯盯,或者只適用于訓(xùn)練數(shù)據(jù)。如果它能夠預(yù)測(cè)測(cè)試數(shù)據(jù)集的精確值计露,就意味著該模型已經(jīng)可以使用了博脑。如果它不能預(yù)測(cè)測(cè)試數(shù)據(jù)集的精確值,我們需要再試一次票罐。

我們可以改變我們給模型的訓(xùn)練數(shù)據(jù)叉趣,或改變模型的參數(shù)直到我們得到我們想要的結(jié)果。

最后该押,一旦模型被訓(xùn)練和評(píng)估疗杉,我們就可以使用它。我們可以對(duì)新數(shù)據(jù)進(jìn)行反饋蚕礼,這將給我們提供新的預(yù)測(cè)烟具。

4. 梯度增強(qiáng)(Gradient boosting): 一個(gè)通用的機(jī)器學(xué)習(xí)算法

在本節(jié)中,我們將學(xué)習(xí)梯度增強(qiáng)算法奠蹬,這是一種強(qiáng)大的機(jī)器學(xué)習(xí)算法朝聋,在許多不同種類(lèi)的現(xiàn)實(shí)問(wèn)題中都能起到很好的作用。它可以處理復(fù)雜的模式和線(xiàn)性模型無(wú)法處理的數(shù)據(jù)囤躁。梯度增強(qiáng)是一種集成學(xué)習(xí)算法冀痕。集成學(xué)習(xí)算法使用了許多簡(jiǎn)單的機(jī)器學(xué)習(xí)模型,這些模型可以比任何單獨(dú)的模型本身更精確地解決問(wèn)題割以。梯度提升的基本數(shù)據(jù)結(jié)構(gòu)是一個(gè)決策樹(shù)金度。決策樹(shù)是一個(gè)模型,其中有分支決策點(diǎn)严沥,并通過(guò)跟蹤樹(shù)的路徑確定最終值猜极。

一個(gè)簡(jiǎn)單的決策樹(shù)如下所示。

這個(gè)決策樹(shù)有一個(gè)決策點(diǎn)消玄。如果房子超過(guò)1000平方英尺跟伏,它預(yù)測(cè)房子應(yīng)該增加額外的50000美元丢胚。如果是小的,那么減少50000美元受扳。為了創(chuàng)建更多的細(xì)微預(yù)測(cè)携龟,我們可以向決策樹(shù)添加第二層,并有更多的決策點(diǎn)勘高。

現(xiàn)在這個(gè)模型有點(diǎn)精細(xì)了峡蟋。真正的小房子還有50000美元的減少,而真正大的房子則增加了150000美元华望。

這是一個(gè)很好的開(kāi)端蕊蝗,但要對(duì)各種戶(hù)型的價(jià)值進(jìn)行建模,需要進(jìn)一步增加模型的復(fù)雜性赖舟。有兩種方法可以使這個(gè)模型更加復(fù)雜蓬戚。第一種方法是在決策樹(shù)中添加層和分支,直到它對(duì)數(shù)據(jù)集中的每一個(gè)單元進(jìn)行建模宾抓。

我們可能會(huì)得到一個(gè)決策樹(shù)子漩,它有數(shù)百層,有成千上萬(wàn)條分支路徑石洗。事實(shí)證明幢泼,創(chuàng)建非常復(fù)雜的決策樹(shù)通常在實(shí)踐中不起作用。大的決策樹(shù)往往不能很好地利用新的數(shù)據(jù)讲衫。第二種方法是創(chuàng)建許多單獨(dú)的簡(jiǎn)單決策樹(shù)旭绒,并將每個(gè)決策樹(shù)的輸出組合起來(lái)得到最終結(jié)果。

這是集合方法焦人。每一棵樹(shù)都會(huì)通過(guò)看問(wèn)題的一個(gè)小方面來(lái)做出最后的回答挥吵。這有點(diǎn)像問(wèn)你所有的朋友同樣的問(wèn)題,并把他們所有的答案結(jié)合起來(lái)花椭,拿出最好的最終答案忽匈。梯度增強(qiáng)有一個(gè)技巧,它不創(chuàng)建獨(dú)立建模數(shù)據(jù)的多個(gè)決策樹(shù),而是創(chuàng)建相互建立的決策樹(shù)矿辽。每個(gè)新樹(shù)的目標(biāo)是修復(fù)前面樹(shù)的最大錯(cuò)誤丹允。

讓我們來(lái)看看這是如何在實(shí)際數(shù)據(jù)中工作的。這是一張房屋價(jià)格圖袋倔,根據(jù)每平方英尺的面積有多大雕蔽。

每一個(gè)藍(lán)點(diǎn)代表一個(gè)真正的房子。你可以看到宾娜,大小和價(jià)值之間存在著明顯的關(guān)系批狐。粗略地說(shuō),較大的房子更貴。我們的目標(biāo)是使用梯度增強(qiáng)來(lái)建立這種關(guān)系模型嚣艇。在算法的第一步承冰,它將創(chuàng)建一個(gè)只有幾個(gè)分支的簡(jiǎn)單決策樹(shù)。這條橙色線(xiàn)顯示了根據(jù)其大小和平方英尺分配給一所房子的決策樹(shù)的值食零。第一個(gè)決策樹(shù)非常簡(jiǎn)單困乒。1500平方英尺以下的房子價(jià)值不到10000美元,2200平方英尺以上的房子價(jià)值10000美元贰谣,而2700平方英尺以上的房子則價(jià)值10000美元娜搂。

第一個(gè)決策樹(shù)捕獲了一點(diǎn)模式,但在上下極端都不是很準(zhǔn)確吱抚。它的小房子和低估值的大房子∮抗ィ現(xiàn)在,梯度增強(qiáng)算法將添加第二個(gè)決策樹(shù)频伤。但是當(dāng)它創(chuàng)建第二棵樹(shù)時(shí),它會(huì)特別地減少第一棵樹(shù)錯(cuò)誤的地方芝此。下面是第二個(gè)決策樹(shù)添加時(shí)的線(xiàn)條憋肖。

您可以看到第二個(gè)決策樹(shù)增加了三個(gè)決策點(diǎn)。通過(guò)給小房子額外的價(jià)格處罰和大房子額外的刺激婚苹,這兩個(gè)決策樹(shù)組合做一個(gè)稍微好一點(diǎn)的整體工作的數(shù)據(jù)擬合岸更。

讓我們結(jié)合這個(gè)過(guò)程并添加20個(gè)決策樹(shù),每一個(gè)都改進(jìn)以前樹(shù)的錯(cuò)誤〔采現(xiàn)在我們有了一條很好地跟蹤數(shù)據(jù)的行怎炊。這是一個(gè)很好的模型,我們可以用來(lái)預(yù)測(cè)房?jī)r(jià)的平方米廓译,但現(xiàn)在讓我們繼續(xù)75次迭代评肆。

現(xiàn)在,該行開(kāi)始彎曲和扭曲非区,以跟蹤數(shù)據(jù)集中的特定離群值瓜挽。這是過(guò)度擬合(overfitting)。我們讓我們的機(jī)器學(xué)習(xí)模型變得太復(fù)雜了征绸,它開(kāi)始模擬真正不存在的劇烈的價(jià)格波動(dòng)久橙。在以后的課程我們會(huì)談?wù)撨^(guò)如何避免。

結(jié)語(yǔ)

如有錯(cuò)誤請(qǐng)高手指正.

你的 關(guān)注-收藏-轉(zhuǎn)發(fā) 是我繼續(xù)分享的動(dòng)力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末管怠,一起剝皮案震驚了整個(gè)濱河市淆衷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渤弛,老刑警劉巖祝拯,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異她肯,居然都是意外死亡鹿驼,警方通過(guò)查閱死者的電腦和手機(jī)欲低,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)畜晰,“玉大人砾莱,你說(shuō)我怎么就攤上這事∑啾牵” “怎么了腊瑟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)块蚌。 經(jīng)常有香客問(wèn)我闰非,道長(zhǎng),這世上最難降的妖魔是什么峭范? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任财松,我火速辦了婚禮,結(jié)果婚禮上纱控,老公的妹妹穿的比我還像新娘辆毡。我一直安慰自己,他們只是感情好甜害,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布舶掖。 她就那樣靜靜地躺著,像睡著了一般尔店。 火紅的嫁衣襯著肌膚如雪眨攘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天嚣州,我揣著相機(jī)與錄音鲫售,去河邊找鬼。 笑死该肴,一個(gè)胖子當(dāng)著我的面吹牛龟虎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沙庐,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鲤妥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拱雏?” 一聲冷哼從身側(cè)響起棉安,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎铸抑,沒(méi)想到半個(gè)月后贡耽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年蒲赂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阱冶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滥嘴,死狀恐怖木蹬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情若皱,我是刑警寧澤镊叁,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站走触,受9級(jí)特大地震影響晦譬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜互广,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一敛腌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惫皱,春花似錦像樊、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缝裁。三九已至扫皱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捷绑,已是汗流浹背韩脑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粹污,地道東北人段多。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像壮吩,于是被迫代替她去往敵國(guó)和親进苍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容