入行AI,你需要一本Python机器学习入门,赶紧收藏!
目前 機(jī)器學(xué)習(xí) 紅遍全球。男女老少都在學(xué)機(jī)器學(xué)習(xí)模型,分類器,神經(jīng)網(wǎng)絡(luò)和吳恩達(dá)。你也想成為一份子,但你該如何開始?
1、什么是機(jī)器學(xué)習(xí)?
從出生的那天起,我們就一直在學(xué)習(xí)中度過。隨著逐漸的成長,開始學(xué)習(xí)如何走路;通過傾聽周圍人的談話,學(xué)習(xí)并嘗試模仿;通過學(xué)習(xí)不同單詞的意思,使得在需要時懂得該如何進(jìn)行表達(dá);同時也開始區(qū)分事情的好壞。例如,在第一次靠近火源時,會因灼熱而后退,從而明白要與火源保持一定的距離。
那么,現(xiàn)在思考一下計算機(jī)的工作原理。計算機(jī)可以在1s內(nèi)遵循人類的指示處理數(shù)百萬條指令,并返回結(jié)果;它可以執(zhí)行人類描述的任務(wù),但是卻不能自行決定。
而機(jī)器學(xué)習(xí)此時就可以發(fā)揮作用了。如果給予計算機(jī)像人類一樣的思考能力,那會發(fā)生什么呢?可以用計算機(jī)能理解的方式給出每一天的任務(wù)令其進(jìn)行計算,還可以建立一些模型來幫助計算機(jī)在將來采取行動。
人類從經(jīng)驗中學(xué)習(xí)知識,計算機(jī)則遵循指令執(zhí)行任務(wù)。然而,其實還可以直接向計算機(jī)提供經(jīng)驗讓其學(xué)習(xí)并為行動做準(zhǔn)備。目前我們是以結(jié)構(gòu)化的方式定義經(jīng)驗。因此,我們將計算機(jī)從數(shù)據(jù)(經(jīng)驗)中進(jìn)行學(xué)習(xí)的過程稱為機(jī)器學(xué)習(xí)(Machine Learning)。
以買香蕉為例。你的母親需要你去市場上買一些香蕉,同時她告訴你鮮黃色的香蕉很好吃。你到一個水果商那里,開始按照母親的建議挑選香蕉。你買了20根香蕉后就回家了,然而回家后你注意到有些香蕉的味道并不像其他的那樣好。事實上,有5根香蕉是壞的。你逐個拿起香蕉并開始作出假設(shè)。 20根香蕉中有12根大香蕉和8根小香蕉。這8根小香蕉都很美味,但是大香蕉就不一樣了,在12根大香蕉中有5根味道不如預(yù)期。
你已經(jīng)掌握了挑選香蕉的知識。第二天,當(dāng)你到達(dá)市場時,注意到有個水果商在打折出售香蕉,這些香蕉和昨天的不同,它們的皮帶有一些綠色。從這里買完香蕉回到家后,根據(jù)之前的經(jīng)驗將每一根香蕉分為好與壞,會發(fā)現(xiàn)大的綠色香蕉很好吃,但是小的綠色香蕉的味道不如其他的好。這樣,你就學(xué)會了新規(guī)則。
你開始將自己看作是香蕉專家。有一天,你不得不去另一個城市參加表親的婚禮。現(xiàn)在你驚訝地發(fā)現(xiàn)這里所有的香蕉都很小,但是味道卻都很好。在這里你了解到來自這個區(qū)域的香蕉是暢銷商品。
現(xiàn)在你確實已經(jīng)是一名專家了。但如果你的姐姐很長時間沒有回家了,并且她喜歡石榴而討厭香蕉。你要怎么辦呢?為了找到美味的石榴,你需要重新開始你的學(xué)習(xí)。
現(xiàn)在這個任務(wù)就可以由機(jī)器學(xué)習(xí)負(fù)責(zé)指引計算機(jī)完成了。可以使用數(shù)據(jù)點的形式向計算機(jī)提供知識。數(shù)據(jù)點的屬性稱為特征(Feature),這里的特征是香蕉的大小(小、中、大)、顏色、產(chǎn)地等。輸出(Output)就是味道(好或者壞)。將這些數(shù)據(jù)輸入到機(jī)器學(xué)習(xí)程序中,就可以讓計算機(jī)學(xué)習(xí)如何區(qū)分香蕉的好與壞。
機(jī)器學(xué)習(xí)算法是一種根據(jù)經(jīng)驗來給予你決策能力的智能算法。
2、為什么選擇Python?
Python在數(shù)據(jù)科學(xué)家中是非常受歡迎的編程語言。
- 第一,它免費(fèi)且易學(xué),不必為了小任務(wù)而浪費(fèi)大量注意力;
- 第二,它是面向?qū)ο蟮恼Z言,這也是其被大型開發(fā)者社區(qū)支持的原因;第三,巨大的開源庫支持。 Python具有相當(dāng)數(shù)量的開源庫,能夠更迅速地實現(xiàn)數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)解決方案,而無須從頭開始編寫每一個算法。像Pandas、 scikit-learn、 SciPy、 NumPy、 Keras這樣的庫對于快速實現(xiàn)機(jī)器學(xué)習(xí)算法非常有用。
首先,通過一個例子了解如何使用編程語言來解決現(xiàn)實世界的問題。
假設(shè)舉辦一個聚會。你為每個進(jìn)入聚會的人分配一個唯一的1~100之間的號碼。現(xiàn)在聚會結(jié)束了,你宣布了一個消息。
“會從1~200之間獲取一個隨機(jī)數(shù)。如果有兩個人的號碼之和與這個數(shù)字相等,就會獎勵這兩個人。”
現(xiàn)在了解到,已經(jīng)向x個人分配了號碼。如何確定能否給其中兩個人獎勵呢?
可以嘗試使用Python來解決這個問題。首先,從列表中獲取輸入數(shù)據(jù)。
現(xiàn)在選擇一個隨機(jī)數(shù)并將其存儲在一個變量中。
為了解決這個問題,必須先對數(shù)據(jù)進(jìn)行排序。在Python列表中排序很簡單,可以通過sort函數(shù)來完成。
通過上述語句,將排序后的數(shù)字賦值給變量。現(xiàn)在使用兩個指針:一個指向開始處(前指針);另一個指向結(jié)束處(后指針)。檢查兩指針?biāo)缸兞康暮汀H绻托∮诮o定值(意味著當(dāng)前的總和小于所需的總和),前指針向前移動一步并再次檢查;如果和大于給定值(意味著當(dāng)前的總和大于所需的總和),將后指針向后移動一步并再次檢查。無論在任何位置,如果當(dāng)前的總和等于要求的總和,便可以說,存在兩個人的數(shù)值之和與給定的數(shù)值相同,需要給予獎勵;如果兩個指針相交并且仍然沒有達(dá)到所需的總和,則可以聲稱并不存在兩個人的數(shù)值之和與給定的數(shù)值相等。
以下是完整的解決方案。
為獲得所需答案,必須向函數(shù)傳遞排序列表和給定的數(shù)值(即兩數(shù)值的期望和)。
即使現(xiàn)在不能理解此代碼,也不要擔(dān)心。接下來我們還會對這段代碼進(jìn)行解析,并介紹程序設(shè)計語言的基本原理。
3、機(jī)器學(xué)習(xí)過程
機(jī)器學(xué)習(xí)不僅僅是一種簡單的算法,還可以將其放在其他任何地方以獲得奇妙的結(jié)果。機(jī)器學(xué)習(xí)是一個從定義數(shù)據(jù)開始,最終獲得一定準(zhǔn)確率的模型的過程。
1.問題定義
機(jī)器學(xué)習(xí)的過程從定義一個商業(yè)問題開始。機(jī)器學(xué)習(xí)的需求是什么?這個任務(wù)真的需要高級的預(yù)測算法來解決嗎?
問題定義是非常重要的,它提供了更正式地思考解決方案的方向。它基本上處理兩個問題。
A.問題是什么?
這個問題涵蓋了問題的定義,并使問題變得更加正式。假設(shè)我們想要確認(rèn)圖像中是否包含人。
現(xiàn)在定義這個任務(wù),將其分為任務(wù)(T)、經(jīng)驗(E)和性能(P)。
- 任務(wù)(T): 根據(jù)圖像中是否包含人對圖像進(jìn)行分類。
- 經(jīng)驗(E): 帶有是否包含人的標(biāo)簽的圖像。
- 性能(P): 錯誤率。在所有的分類圖像中,錯誤預(yù)測的百分比是多少。錯誤率越低,準(zhǔn)確率越高。
B.為什么這個問題需要解決方案?
這個問題更側(cè)重于商業(yè)方面,它包括解決問題的動機(jī)和益處。
假如你是一個研究者,希望解決某個問題并發(fā)表論文,使之成為他人解決問題的基準(zhǔn),這可能就是你的動機(jī)。
關(guān)于你的問題其他需要確定的是,在沒有安全措施的情況下,夜間在銀行的自動取款機(jī)上是否有人類活動(假設(shè)所要解決的問題與自動取款機(jī)的安全有關(guān))。
還需要定義可以使用此解決方案的場景。這是一個通用型的解決方案,還是為特定任務(wù)(ATM傳感器中的檢測人員)所設(shè)計的呢?解決方案的失效日期是什么時候(它是終身的還是在特定的期限內(nèi))?
2.數(shù)據(jù)采集
在定義問題之后,開始進(jìn)行數(shù)據(jù)采集。收集數(shù)據(jù)有多種不同的方式,如果想把評論與評級聯(lián)系起來,就要從抓取網(wǎng)站開始。為了分析Twitter數(shù)據(jù)并將其與情感聯(lián)系起來,就要從Twitter提供的API入手,收集標(biāo)簽數(shù)據(jù)或者與某個公司相關(guān)聯(lián)的數(shù)據(jù)。市場調(diào)查人員通過創(chuàng)建不同的調(diào)查表格,并將其放在網(wǎng)站上來收集數(shù)據(jù)。對于像Amazon、 Facebook這樣擁有眾多用戶的公司,其數(shù)據(jù)是巨大的,而根據(jù)問題的不同,還需要收集數(shù)據(jù)和標(biāo)簽。假設(shè)要建立一個新聞分類器,將新聞劃分為體育新聞、市場新聞和政治新聞。因此,收集到的每一條新聞都需要一個與之相關(guān)的標(biāo)簽,通過這些數(shù)據(jù)可以構(gòu)造機(jī)器學(xué)習(xí)的分類器。
正確的數(shù)據(jù)是解決機(jī)器學(xué)習(xí)問題的關(guān)鍵。即使是基本算法,高質(zhì)量的數(shù)據(jù)也會產(chǎn)生令人滿意的結(jié)果。
3.數(shù)據(jù)準(zhǔn)備
在采集數(shù)據(jù)之后,需要專注于數(shù)據(jù)準(zhǔn)備。收集的數(shù)據(jù)要準(zhǔn)備成機(jī)器學(xué)習(xí)算法所能使用的格式。算法不是魔術(shù)表演,數(shù)據(jù)必須以正確的形式輸入到機(jī)器學(xué)習(xí)算法中才能獲得結(jié)果。根據(jù)算法庫的不同,算法可以適應(yīng)不同類型的輸入格式。
數(shù)據(jù)準(zhǔn)備是從數(shù)據(jù)選擇開始的,并不是收集到的每個數(shù)據(jù)都對問題的解決有幫助。假設(shè)你正在分析服務(wù)器上的日志,在每個用戶活動之后會生成許多與系統(tǒng)相關(guān)的信息,如果正在預(yù)測的是營銷活動的市場反應(yīng),那么這個日志可能就不起作用了。所以,基于所要解決的問題,應(yīng)將無關(guān)數(shù)據(jù)從之后的操作中刪除。
在更高層次的基礎(chǔ)上識別數(shù)據(jù)后,需要對數(shù)據(jù)進(jìn)行轉(zhuǎn)換或預(yù)處理,使之能更好地應(yīng)用于機(jī)器學(xué)習(xí)算法。以下是數(shù)據(jù)預(yù)處理過程中的一些過程。
- 清理(Cleaning): 數(shù)據(jù)可能含有需要移除的錯誤。假設(shè)數(shù)據(jù)中缺少某些屬性的數(shù)值,由于目前并沒有適合的算法能夠處理值缺失問題,因此可以用一些值(數(shù)值的均值/中值和分類值的默認(rèn)值)代替缺失值。如果數(shù)據(jù)包含敏感信息,如電子郵件的ID和用戶的聯(lián)系號碼,則需要在與團(tuán)隊共享數(shù)據(jù)之前刪除數(shù)據(jù)中的敏感信息。
- 格式化(Formatting): 算法需要預(yù)定義格式的數(shù)據(jù)。基于Python機(jī)器學(xué)習(xí)庫的要求,采用Python列表的形式表示數(shù)據(jù)。一些實時的機(jī)器學(xué)習(xí)庫使用的是JSON格式的數(shù)據(jù),而Excel文件使用CSV格式的數(shù)據(jù)。根據(jù)使用工具或技術(shù)的不同,需要對數(shù)據(jù)進(jìn)行格式化,使其滿足使用工具或技術(shù)對數(shù)據(jù)格式的要求。
- 采樣(Sampling): 并非所有的數(shù)據(jù)都是有用的。一些在模型中存儲數(shù)據(jù)的算法很難實時生成預(yù)測,可以從數(shù)據(jù)中刪除類似的實例。如果是分類模型,可以按照標(biāo)簽進(jìn)行等比例采樣。
- 分解(Decomposition): 分解會使得一些特征更加有用。以數(shù)據(jù)庫中的日期屬性為例,可以把日期分解成日、月、年,還可以創(chuàng)建諸如周末或工作日、季度、閏年或日期等特征,使其在預(yù)測中更有用。
- 縮放(Scaling): 不同的屬性遵循不同的單位和值。假設(shè)通常以厘米為單位測量一個人的身高,而對于一些數(shù)據(jù),可能是以英寸為單位。所以,需要先將其換算成厘米。另外,一個屬性的高/低值可能會影響到其他屬性。例如有3個特征,如人的年齡、體重和年收入,現(xiàn)在希望根據(jù)它們預(yù)測醫(yī)療保險計劃。如果直接使用這些數(shù)據(jù),模型將高度依賴于工資,因為工資的數(shù)值遠(yuǎn)遠(yuǎn)高于其他屬性的值。所以,需要對每個屬性的值進(jìn)行縮放,調(diào)整為[0,1]或[-1,1 ]。
這個過程也稱為 特征處理(Feature Processing) ,它包括特征選擇、預(yù)處理以及將其轉(zhuǎn)換為對于機(jī)器學(xué)習(xí)算法有益處的格式。
4.數(shù)據(jù)分割——訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)
機(jī)器學(xué)習(xí)算法的目標(biāo)是對未知的新數(shù)據(jù)進(jìn)行預(yù)測。我們使用訓(xùn)練數(shù)據(jù)來建立模型。在訓(xùn)練數(shù)據(jù)時,算法將逐漸減少訓(xùn)練的誤差。但是,不能將訓(xùn)練數(shù)據(jù)的準(zhǔn)確率(Accuracy)視為廣義的準(zhǔn)確率,其原因在于該算法可能會記住實例并對其進(jìn)行相應(yīng)的分類。所以,為了評估生成的模型,需要將數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)。利用訓(xùn)練數(shù)據(jù)進(jìn)行算法訓(xùn)練,利用測試數(shù)據(jù)來計算生成模型的最終準(zhǔn)確率。測試數(shù)據(jù)并不參與算法訓(xùn)練。
一般將60%~80%的數(shù)據(jù)作為訓(xùn)練數(shù)據(jù),剩余的部分作為測試數(shù)據(jù)。所以,在測試數(shù)據(jù)中獲得最好結(jié)果的模型可以作為目標(biāo)模型。
5.算法選擇
我們從一組機(jī)器學(xué)習(xí)算法開始,并將訓(xùn)練數(shù)據(jù)的特征應(yīng)用到算法中,算法選擇依賴于問題的定義。如果從電子郵件中收集數(shù)據(jù),并將郵件分為垃圾郵件或非垃圾郵件,則這時所需要的算法是在輸入變量后輸出相應(yīng)的結(jié)果(垃圾郵件或者非垃圾郵件),這類算法稱為 分類(Classification) 算法(如決策樹、樸素貝葉斯、神經(jīng)網(wǎng)絡(luò)等)。如果想預(yù)測某一任意連續(xù)變量(如預(yù)測即將到來的季度銷售量),則使用 回歸(Regression) 算法(如線性回歸、核回歸等)。如果所解決的問題并沒有相關(guān)的任何輸出或反應(yīng),則可以使用 聚類(Clustering) 算法,根據(jù)它們的特性對其分組。每種類別中都有大量的算法,我們將在后續(xù)的章節(jié)中給出示例。
6.算法訓(xùn)練
在選擇算法之后,開始訓(xùn)練模型。訓(xùn)練模型是在訓(xùn)練數(shù)據(jù)集上進(jìn)行的,大多數(shù)算法的權(quán)值/參數(shù)在訓(xùn)練開始時都是隨機(jī)分配的,并在每次迭代中加以改進(jìn)。算法訓(xùn)練過程中,在訓(xùn)練數(shù)據(jù)集上多次運(yùn)行以產(chǎn)生結(jié)果,如圖1.1所示。例如,在線性回歸的情況下,算法在開始時隨機(jī)放置分離線,在每次迭代之后不斷地改進(jìn)自身(也就是移動分離線)。
圖1.1
7.測試數(shù)據(jù)評估
利用訓(xùn)練數(shù)據(jù)生成最佳算法后,在測試數(shù)據(jù)集上對算法的性能進(jìn)行評估。測試數(shù)據(jù)集并不能參與算法訓(xùn)練,因此測試數(shù)據(jù)并不能影響算法的決策。
8.參數(shù)調(diào)整
在選擇正確的算法后,可以嘗試對其進(jìn)行改進(jìn)以獲得更好的性能。每個算法都有不同的參數(shù)設(shè)置方式,可以對其進(jìn)行配置從而更改算法性能,這稱為 參數(shù)調(diào)整(Parameter Tuning) 。例如可以改變算法學(xué)習(xí)的速率(學(xué)習(xí)率)來提高算法性能,這些參數(shù)稱為 超參數(shù)(Hyper Parameter) 。對于機(jī)器學(xué)習(xí)來說,參數(shù)調(diào)整更像是一門藝術(shù)。
9.模型使用
上述所有步驟完成之后,就可以獲得在訓(xùn)練集上訓(xùn)練生成,并在測試集上完成評估的模型。現(xiàn)在可以使用這個模型來預(yù)測新數(shù)據(jù)的值。對于生產(chǎn)環(huán)境,可以將模型部署到服務(wù)器,并通過API接口使用模型的預(yù)測功能。當(dāng)然,這個模型并不總一樣的,每當(dāng)獲得新數(shù)據(jù)時,都要將上面所列出的步驟重新進(jìn)行一遍,以改進(jìn)模型的性能。
因此,在機(jī)器學(xué)習(xí)中,從問題開始,最后以一個解決問題的預(yù)測算法結(jié)束。
通過下面的問題,我們開始嘗試了解機(jī)器學(xué)習(xí)算法是如何解決問題的。
假設(shè)你需要購買一棟房子,現(xiàn)在開始查看市場上正在出售的房屋,并據(jù)此核對你的預(yù)算。你對將要購買的房子有多個要求,首先就是房子的面積。
在圖1.2的情景中,你先考查了一棟600平方英尺(約56m2)的房子,價格是220 000英鎊(約1 942 578元)。這個房子的確很不錯,但是它并不滿足你的要求——你將和你的家人一同居住,而這個房子面積太小,并不能讓每個人都住得舒適。所以,你繼續(xù)研究并找到一棟1700平方英尺(約158m2)的房子,價格是730 000英鎊(約6 445 827元)。這個房子滿足你的要求,但是它的價格有些超出你現(xiàn)在的預(yù)算——你的預(yù)算與小面積房子的價格相比要高一些,但也不像大房子的價格那么高。然而,只有當(dāng)你與業(yè)主或代理人見面并提交詳細(xì)資料后,才能得到房子的實際價格。但是你并不想與每一個業(yè)主或者代理人見面。
圖1.2
在二維(2D)平面上分析一下你所考查的兩個屬性,如圖1.3所示。
?
圖1.3
現(xiàn)在,你在城市里閑逛,找到一棟面積在這兩棟房子之間的房子。
這棟新房子的面積大約有1 250平方英尺(約116m2),但你還不知道價格。所以,你想 預(yù)測房子的價格 ,看其是否符合預(yù)算和要求。
將新房子的信息放在同一個二維平面上,試著預(yù)測這個房子的價格,如圖1.4所示。
圖1.4
為了預(yù)測房屋的價格,將設(shè)置一條符合已知結(jié)果(即房屋價格和房屋面積)的直線,這里得到了如圖1.5所示的一條直線。
圖1.5
通過這條直線,可以預(yù)測出1250平方英尺(約116m2)的房子的價格是475 000英鎊(約4 194 202.5元)。所以,我們得到了一條根據(jù)房子面積來預(yù)測房子價格的直線,這種技術(shù)稱為 線性回歸(Linear Regression) 。可以把這種技術(shù)理解為在現(xiàn)有數(shù)據(jù)點上尋找最佳直線。
比如,計算3個點到直線距離之和的最小值。首先,隨機(jī)選擇一條線,直線上方有A、B、C共3個點,如圖1.6所示。
圖1.6
然后,計算每個點到直線的距離,如圖1.7所示。
圖1.7
可以得到總距離是a+b+c。現(xiàn)在,移動直線的位置(向下移動)并再次計算點到直線的距離,如圖1.8所示。
圖1.8
改變了線的位置,但總距離a+b+c增加了。顯然,這不是我們想要的結(jié)果。讓我們將直線朝另一個方向(向上移動)移動,如圖1.9所示。
圖1.9
這條直線(見圖1.9)比第一條直線(見圖1.7)要更符合要求。現(xiàn)在移動這條線,并試著重復(fù)進(jìn)行同樣的步驟。最終通過這種方式結(jié)束直線的選擇,從而確定直線位置,如圖1.10所示。
圖1.10
對于給定的3個點(A、 B、 C)來說,圖1.10所示的直線是最符合條件的。在這里取3個點到直線的非負(fù)距離,找到這條線的方法稱為梯度下降法。
有時在所有數(shù)據(jù)點上擬合一條直線并沒有多大意義。現(xiàn)在思考圖1.11所示的點集。
圖1.11
如果嘗試使用線性回歸技術(shù)來擬合一條直線,它看起來如圖1.12所示。
圖1.12
很明顯,這條線不適合用來預(yù)測。相反,可以用圖1.13所示的曲線來對數(shù)據(jù)建模。
圖1.13
這就是所謂的 多項式回歸(Polynomial Regression) —— 因為其參數(shù)是多項式。
再來看另一個例子,例如有一個售鞋網(wǎng)站,其中包含來自不同公司的各種鞋子,可以通過其網(wǎng)上商店訂購鞋子。鞋子成功交付后,公司將發(fā)送電子郵件獲取顧客的反饋。顧客在評論區(qū)內(nèi)留言,其中有些評論是正面的,有些評論則是負(fù)面的。
該公司每天銷售數(shù)千雙鞋,需要跟蹤每一個評論并采取相應(yīng)的行動。如果顧客評論說鞋子質(zhì)量不佳,則需向生產(chǎn)商詢問有關(guān)產(chǎn)品的質(zhì)量問題;有些鞋子反響很好,則最好將它們放在網(wǎng)站的首頁。
為了解決這個問題,首先需要從一組顧客評論開始,將每個評論分為負(fù)面評論或者正面評論,下面給出部分示例。
正面評論
A1:質(zhì)量不錯!我很喜歡這雙鞋子。
A2:非常好的產(chǎn)品。
A3:給我爸爸買的,他很喜歡。
負(fù)面評論
B1:材質(zhì)不好,不適合。
B2:很不喜歡這個產(chǎn)品,包裝也很不好。
B3:千萬不要買這個產(chǎn)品。
分析示例中的正面評論和負(fù)面評論,會發(fā)現(xiàn),如果評論中包含“喜歡”這個詞,那么它更可能是一個正面評論。因此,創(chuàng)建這條規(guī)則并檢查所有數(shù)據(jù)集,會發(fā)現(xiàn)60%的正面評論中包含“喜歡”這個詞;另一方面,只有10%的負(fù)面評論中包含“喜歡”這個詞。
同樣,其他詞語所占的比例如表1.1所示。
表1.1
因此,對于將來可能獲得的評論,根據(jù)其所包含的詞的復(fù)合概率,可以判定該評論是正面評論還是負(fù)面評論,這就是 樸素貝葉斯分類器(Na?ve Bayes Classifier) 。
再列舉一個向不同的人推薦雜志的例子。假設(shè)已經(jīng)記錄了用戶的年齡、性別、位置以及他們閱讀的雜志類型,表1.2所列為記錄的數(shù)據(jù)。
表1.2
現(xiàn)在,通過對這些數(shù)據(jù)進(jìn)行觀察,可以發(fā)現(xiàn)小于15歲的人喜歡閱讀兒童雜志。根據(jù)其制作一個節(jié)點和它的決策,如圖1.14所示。每個圓節(jié)點表示決策節(jié)點,圖的邊緣(箭頭)則表示相應(yīng)的決策,每個矩形節(jié)點表示通過圖分支之后采取的決策。
圖1.14
因此,可以說每個年齡小于或等于15歲的人都有可能閱讀兒童雜志。現(xiàn)在再來處理大于15歲的讀者的分支。
現(xiàn)在,第二個觀察特征是男性,他們喜歡閱讀政治雜志。為其創(chuàng)建相同的決策節(jié)點和分支,如圖1.15所示。
圖1.15
接下來,需要看一下年齡在15歲以上的女性的選擇。還有一個信息可以利用——地區(qū)。因此,可以說,來自美國的女性喜歡閱讀體育雜志,而其他地區(qū)的女性則喜歡商業(yè)雜志。在這里形成的節(jié)點如圖1.16所示。
圖1.16
正確地對每個數(shù)據(jù)點進(jìn)行分類,這個過程中形成了決策樹。可能存在多種創(chuàng)建決策樹的方法。根據(jù)現(xiàn)有的數(shù)據(jù),這些方法可以做出正確的預(yù)測。
圖1.17所示的這棵樹對數(shù)據(jù)進(jìn)行了準(zhǔn)確的分類。
圖1.17
再來舉另一個例子,有幾個人每年申請貸款,銀行根據(jù)他們的收入和貸款額從而決定是否對其提供貸款,目標(biāo)是向那些在規(guī)定時間內(nèi)償還債務(wù),且沒有任何違約的人提供貸款。
如果一個人月收入是20 000美元,他申請了100 000美元的貸款,銀行根據(jù)他的收入來源可以批準(zhǔn)貸款;如果一個人月收入是3 000美元,他申請了600 000美元的貸款,則銀行可能會早早地拒絕他。
因此,銀行基于以往違約者的歷史創(chuàng)建了一個數(shù)據(jù),如圖1.18所示。紅點表示銀行拒絕受理的申請,綠點表示銀行批準(zhǔn)的申請。橫坐標(biāo)是請求的貸款額度,縱坐標(biāo)是月收入。
?
圖1.18
現(xiàn)在,一個月收入10 000美元的人想要貸款300 000美元,銀行是否會給予批準(zhǔn)呢?可以通過一條直線來分割數(shù)據(jù),如圖1.19所示。
圖1.19
根據(jù)上面的直線,可以預(yù)測銀行將同意月薪20 000美元的人申請300 000美元的貸款申請。
現(xiàn)在,已經(jīng)有一條合適的直線來分割現(xiàn)有的數(shù)據(jù)點。我們使用的算法(梯度下降法)與在線性回歸過程中使用的算法相同。在這里,目標(biāo)變量是類別而不是在線性回歸情況下連續(xù)的預(yù)測值,這種技術(shù)稱為 邏輯回歸(Logistics Regression) 。
現(xiàn)在,銀行來了一位新的經(jīng)理,他要檢查所有記錄,他認(rèn)為銀行批準(zhǔn)或拒絕貸款申請的參數(shù)是荒謬的,一些像10 000美元或20 000美元的貸款申請并沒有風(fēng)險,銀行可以同意這部分貸款申請。所以,他改變了規(guī)則和數(shù)據(jù),如圖1.20所示。
圖1.20
?
?
圖1.21
與一條直線相比,使用兩條直線可以將紅點和綠點分開。這種技術(shù)被稱為 神經(jīng)網(wǎng)絡(luò)(Neural Network) 。神經(jīng)網(wǎng)絡(luò)是基于大腦中的神經(jīng)元的概念提出的。大腦中的神經(jīng)元收集信息并將其傳遞給其他神經(jīng)元。簡單來說,就是基于先前神經(jīng)元的輸入,下一個神經(jīng)元接收要求并決定輸出,它還將信息傳遞給其他神經(jīng)元。最后,通過處理不同的神經(jīng)元,大腦做出決定。
這個概念可以用下面的模型(見圖1.22)來理解。在這個模型中,兩個神經(jīng)元通過使用不同的假設(shè)建立模型,并且將它們的發(fā)現(xiàn)發(fā)送給另一個神經(jīng)元。根據(jù)收集到的信息,輸出神經(jīng)元做出決策。
圖1.22
在處理數(shù)據(jù)時,對于一條分割數(shù)據(jù)點的直線,可能有不同的選擇。如圖1.23所示的兩個例子。
圖1.23
與直線1相比,直線2的邊距更大,其在分割數(shù)據(jù)方面似乎更好,如圖1.24所示。
圖1.24
現(xiàn)在我們要尋找最佳分割路線,而梯度下降并不能解決這個問題,需要線性優(yōu)化才能實現(xiàn)。這種技術(shù)被稱為最大間隔分類器或 支持向量機(jī)(Support Vector Machine, SVM) 。
在現(xiàn)實世界中,數(shù)據(jù)并不能完全分割開。它可能會如圖1.25所示的那樣。
圖1.25
所以,不能通過一條直線就把紅點和綠點分開。但是如果通過一個平面來區(qū)分紅點和綠點,就可以用一個分類器對它們進(jìn)行分類。創(chuàng)建一個新的維度并用這個平面來分割紅點和綠點,如圖1.26所示。
圖1.26
現(xiàn)在使用一個新的維度將紅點和綠點分開。這種技術(shù)被稱為 核函數(shù)(Kernel Trick) 。
真實的數(shù)據(jù)非常復(fù)雜,而且有很多維度。帶有支持向量機(jī)分類器的核函數(shù)可以用來解決這些復(fù)雜的問題。
現(xiàn)在來看另一個問題。如圖1.27所示,有一家雜貨店A2A。他們提供電話送貨服務(wù),每當(dāng)接到電話時,他們就會將地址發(fā)送給派送員,派送員會趕赴送貨地點并交付商品。他們設(shè)法將辦公室設(shè)在城市的中心,以便為越來越多的人及時提供服務(wù)。
圖1.27
這里的點代表A2A的服務(wù)需求。現(xiàn)在他們意識到,這種一個配送中心處理所有的需求的做法并不明智。于是,他們決定在城市中開設(shè)4個配送中心,依照不同地區(qū)來接受需求并提供服務(wù)。
因此,為了解決這個問題,首先可以隨機(jī)地添加4個配送中心并給予其商品派送需求,如圖1.28所示。
圖1.28
顯然,這不是配送中心的最佳分配位置。接下來,將每個點移動到分類點的中心。然后,將所有點分類到最近的配送中心,并將配送中心的位置移動到之前的分類中心。經(jīng)過多次迭代,將得到圖1.29所示的分配位置。
圖1.29
因此,每個點的分配都是基于點到中心的距離。這種技術(shù)稱為 K-均值聚類(K-Means Clustering) 。
也可以使用另一種方法進(jìn)行聚類。把所有的點看作是獨(dú)立的集群,而不是首先將它們分組到集群中再對其進(jìn)行重新分配。然后,將兩個最近的點進(jìn)行分組,形成一個簇。一直這樣操作,直到出現(xiàn)較大的距離或者形成最小數(shù)量的簇。這種技術(shù)稱為 層聚類(Hierarchical Clustering) 。如果大家對Python感興趣的話,可以加一下我的薇信哦:abb436574,免費(fèi)領(lǐng)取一套學(xué)習(xí)資料和視頻課程喲~
本文摘自《Python機(jī)器學(xué)習(xí)》
《Python機(jī)器學(xué)習(xí)》通過解釋數(shù)學(xué)原理和展示編程示例對機(jī)器學(xué)習(xí)進(jìn)行了系統(tǒng)、全面的解析。《Python機(jī)器學(xué)習(xí)》共分為12章,內(nèi)容涵蓋了機(jī)器學(xué)習(xí)以及Python語言的基礎(chǔ)知識、特征工程的概念與操作技術(shù)、數(shù)據(jù)可視化技術(shù)的實現(xiàn)、監(jiān)督學(xué)習(xí)及無監(jiān)督學(xué)習(xí)算法、文本分析、神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)、推薦系統(tǒng)的構(gòu)建方法以及預(yù)測處理時間序列的方法等。閱讀本書能夠加深讀者對機(jī)器學(xué)習(xí)的認(rèn)識和理解,從而達(dá)到理論與實踐相結(jié)合、學(xué)以致用的目的。
總結(jié)
以上是生活随笔為你收集整理的入行AI,你需要一本Python机器学习入门,赶紧收藏!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows系统安装python模块
- 下一篇: 在VC中动态加载ODBC的方法