「新書推薦」入行AI,你需要一本Python機器學習入門

目前機器學習紅遍全球。男女老少都在學機器學習模型,分類器,神經網絡和吳恩達。你也想成為一份子,但你該如何開始?

今天小編推薦這本《Python機器學習》教你快速入門。

「新書推薦」入行AI,你需要一本Python機器學習入門

01、什麼是機器學習?

從出生的那天起,我們就一直在學習中度過。隨著逐漸的成長,開始學習如何走路;通過傾聽周圍人的談話,學習並嘗試模仿;通過學習不同單詞的意思,使得在需要時懂得該如何進行表達;同時也開始區分事情的好壞。例如,在第一次靠近火源時,會因灼熱而後退,從而明白要與火源保持一定的距離。

那麼,現在思考一下計算機的工作原理。計算機可以在1s內遵循人類的指示處理數百萬條指令,並返回結果;它可以執行人類描述的任務,但是卻不能自行決定。

而機器學習此時就可以發揮作用了。如果給予計算機像人類一樣的思考能力,那會發生什麼呢?可以用計算機能理解的方式給出每一天的任務令其進行計算,還可以建立一些模型來幫助計算機在將來採取行動。

人類從經驗中學習知識,計算機則遵循指令執行任務。然而,其實還可以直接向計算機提供經驗讓其學習併為行動做準備。目前我們是以結構化的方式定義經驗。因此,我們將計算機從數據(經驗)中進行學習的過程稱為機器學習(Machine Learning)。

以買香蕉為例。你的母親需要你去市場上買一些香蕉,同時她告訴你鮮黃色的香蕉很好吃。你到一個水果商那裡,開始按照母親的建議挑選香蕉。你買了20根香蕉後就回家了,然而回家後你注意到有些香蕉的味道並不像其他的那樣好。事實上,有5根香蕉是壞的。你逐個拿起香蕉並開始作出假設。 20根香蕉中有12根大香蕉和8根小香蕉。這8根小香蕉都很美味,但是大香蕉就不一樣了,在12根大香蕉中有5根味道不如預期。

你已經掌握了挑選香蕉的知識。第二天,當你到達市場時,注意到有個水果商在打折出售香蕉,這些香蕉和昨天的不同,它們的皮帶有一些綠色。從這裡買完香蕉回到家後,根據之前的經驗將每一根香蕉分為好與壞,會發現大的綠色香蕉很好吃,但是小的綠色香蕉的味道不如其他的好。這樣,你就學會了新規則。

你開始將自己看作是香蕉專家。有一天,你不得不去另一個城市參加表親的婚禮。現在你驚訝地發現這裡所有的香蕉都很小,但是味道卻都很好。在這裡你瞭解到來自這個區域的香蕉是暢銷商品。

現在你確實已經是一名專家了。但如果你的姐姐很長時間沒有回家了,並且她喜歡石榴而討厭香蕉。你要怎麼辦呢?為了找到美味的石榴,你需要重新開始你的學習。

現在這個任務就可以由機器學習負責指引計算機完成了。可以使用數據點的形式向計算機提供知識。數據點的屬性稱為特徵(Feature),這裡的特徵是香蕉的大小(小、中、大)、顏色、產地等。輸出(Output)就是味道(好或者壞)。將這些數據輸入到機器學習程序中,就可以讓計算機學習如何區分香蕉的好與壞。

機器學習算法是一種根據經驗來給予你決策能力的智能算法。

P.S. 小編給大家整理了一些Python人工智能的資料,從入門到高級都有,關注頭條號,私信回覆“資料”獲取,下圖為部分截圖。「新書推薦」入行AI,你需要一本Python機器學習入門

02、為什麼選擇Python

Python在數據科學家中是非常受歡迎的編程語言。

  • 第一,它免費且易學,不必為了小任務而浪費大量注意力;
  • 第二,它是面向對象的語言,這也是其被大型開發者社區支持的原因;第三,巨大的開源庫支持。 Python具有相當數量的開源庫,能夠更迅速地實現數據科學和機器學習解決方案,而無須從頭開始編寫每一個算法。像Pandas、 scikit-learn、 SciPy、 NumPy、 Keras這樣的庫對於快速實現機器學習算法非常有用。

首先,通過一個例子瞭解如何使用編程語言來解決現實世界的問題。

假設舉辦一個聚會。你為每個進入聚會的人分配一個唯一的1~100之間的號碼。現在聚會結束了,你宣佈了一個消息。

“會從1~200之間獲取一個隨機數。如果有兩個人的號碼之和與這個數字相等,就會獎勵這兩個人。”

現在瞭解到,已經向x個人分配了號碼。如何確定能否給其中兩個人獎勵呢?

可以嘗試使用Python來解決這個問題。首先,從列表中獲取輸入數據。

1numberList = list([43,23,1,67,54,2,34,56,23,65,12,9,87,4,33])

現在選擇一個隨機數並將其存儲在一個變量中。

1sumSelector = raw_input()

為了解決這個問題,必須先對數據進行排序。在Python列表中排序很簡單,可以通過sort函數來完成。

1numberList = numberList.sort()

通過上述語句,將排序後的數字賦值給變量。現在使用兩個指針:一個指向開始處(前指針);另一個指向結束處(後指針)。檢查兩指針所指變量的和。如果和小於給定值(意味著當前的總和小於所需的總和),前指針向前移動一步並再次檢查;如果和大於給定值(意味著當前的總和大於所需的總和),將後指針向後移動一步並再次檢查。無論在任何位置,如果當前的總和等於要求的總和,便可以說,存在兩個人的數值之和與給定的數值相同,需要給予獎勵;如果兩個指針相交併且仍然沒有達到所需的總和,則可以聲稱並不存在兩個人的數值之和與給定的數值相等。

以下是完整的解決方案。

 1def isPrizeGiven(numberList,sumSelector):
 2
 3sumOfTwo = sumSelector
 4
 5 i=0
 6
 7 j = len(numberList) -1
 8
 9 if(i>=j):
10
11 return False
12
13 while(i<=j):
14
15 currentSum = numberList[i]+numberList[j]
16
17 print(i,j,currentSum)
18
19 if(currentSum==sumOfTwo):
20
21 return True
22
23 if(currentSum>sumOfTwo):
24
25 j=j-1
26
27 else:
28
29 i=i+1
30
31 return False

為獲得所需答案,必須向函數傳遞排序列表和給定的數值(即兩數值的期望和)。

1if (isPrizeGiven(numberList,sumSelector):
2 print("No Escape. Give Prize to Everyone")
3else:
4 print("You Saved Yourself!!")

即使現在不能理解此代碼,也不要擔心。接下來我們還會對這段代碼進行解析,並介紹程序設計語言的基本原理。

03、機器學習過程

機器學習不僅僅是一種簡單的算法,還可以將其放在其他任何地方以獲得奇妙的結果。機器學習是一個從定義數據開始,最終獲得一定準確率的模型的過程。

1.問題定義

機器學習的過程從定義一個商業問題開始。機器學習的需求是什麼?這個任務真的需要高級的預測算法來解決嗎?

問題定義是非常重要的,它提供了更正式地思考解決方案的方向。它基本上處理兩個問題。

A.問題是什麼?

這個問題涵蓋了問題的定義,並使問題變得更加正式。假設我們想要確認圖像中是否包含人。

現在定義這個任務,將其分為任務(T)、經驗(E)和性能(P)。

  • 任務(T):根據圖像中是否包含人對圖像進行分類。
  • 經驗(E):帶有是否包含人的標籤的圖像。
  • 性能(P):錯誤率。在所有的分類圖像中,錯誤預測的百分比是多少。錯誤率越低,準確率越高。

B.為什麼這個問題需要解決方案?

這個問題更側重於商業方面,它包括解決問題的動機和益處。

假如你是一個研究者,希望解決某個問題並發表論文,使之成為他人解決問題的基準,這可能就是你的動機。

關於你的問題其他需要確定的是,在沒有安全措施的情況下,夜間在銀行的自動取款機上是否有人類活動(假設所要解決的問題與自動取款機的安全有關)。

還需要定義可以使用此解決方案的場景。這是一個通用型的解決方案,還是為特定任務(ATM傳感器中的檢測人員)所設計的呢?解決方案的失效日期是什麼時候(它是終身的還是在特定的期限內)?

2.數據採集

在定義問題之後,開始進行數據採集。收集數據有多種不同的方式,如果想把評論與評級聯繫起來,就要從抓取網站開始。為了分析Twitter數據並將其與情感聯繫起來,就要從Twitter提供的API入手,收集標籤數據或者與某個公司相關聯的數據。市場調查人員通過創建不同的調查表格,並將其放在網站上來收集數據。對於像Amazon、 Facebook這樣擁有眾多用戶的公司,其數據是巨大的,而根據問題的不同,還需要收集數據和標籤。假設要建立一個新聞分類器,將新聞劃分為體育新聞、市場新聞和政治新聞。因此,收集到的每一條新聞都需要一個與之相關的標籤,通過這些數據可以構造機器學習的分類器。

正確的數據是解決機器學習問題的關鍵。即使是基本算法,高質量的數據也會產生令人滿意的結果。

3.數據準備

在採集數據之後,需要專注於數據準備。收集的數據要準備成機器學習算法所能使用的格式。算法不是魔術表演,數據必須以正確的形式輸入到機器學習算法中才能獲得結果。根據算法庫的不同,算法可以適應不同類型的輸入格式。

數據準備是從數據選擇開始的,並不是收集到的每個數據都對問題的解決有幫助。假設你正在分析服務器上的日誌,在每個用戶活動之後會生成許多與系統相關的信息,如果正在預測的是營銷活動的市場反應,那麼這個日誌可能就不起作用了。所以,基於所要解決的問題,應將無關數據從之後的操作中刪除。

在更高層次的基礎上識別數據後,需要對數據進行轉換或預處理,使之能更好地應用於機器學習算法。以下是數據預處理過程中的一些過程。

  • 清理(Cleaning):
    數據可能含有需要移除的錯誤。假設數據中缺少某些屬性的數值,由於目前並沒有適合的算法能夠處理值缺失問題,因此可以用一些值(數值的均值/中值和分類值的默認值)代替缺失值。如果數據包含敏感信息,如電子郵件的ID和用戶的聯繫號碼,則需要在與團隊共享數據之前刪除數據中的敏感信息。
  • 格式化(Formatting):算法需要預定義格式的數據。基於Python機器學習庫的要求,採用Python列表的形式表示數據。一些實時的機器學習庫使用的是JSON格式的數據,而Excel文件使用CSV格式的數據。根據使用工具或技術的不同,需要對數據進行格式化,使其滿足使用工具或技術對數據格式的要求。
  • 採樣(Sampling):並非所有的數據都是有用的。一些在模型中存儲數據的算法很難實時生成預測,可以從數據中刪除類似的實例。如果是分類模型,可以按照標籤進行等比例採樣。
  • 分解(Decomposition):分解會使得一些特徵更加有用。以數據庫中的日期屬性為例,可以把日期分解成日、月、年,還可以創建諸如週末或工作日、季度、閏年或日期等特徵,使其在預測中更有用。
  • 縮放(Scaling):不同的屬性遵循不同的單位和值。假設通常以釐米為單位測量一個人的身高,而對於一些數據,可能是以英寸為單位。所以,需要先將其換算成釐米。另外,一個屬性的高/低值可能會影響到其他屬性。例如有3個特徵,如人的年齡、體重和年收入,現在希望根據它們預測醫療保險計劃。如果直接使用這些數據,模型將高度依賴於工資,因為工資的數值遠遠高於其他屬性的值。所以,需要對每個屬性的值進行縮放,調整為[0,1]或[-1,1 ]。

這個過程也稱為特徵處理(Feature Processing),它包括特徵選擇、預處理以及將其轉換為對於機器學習算法有益處的格式。

4.數據分割——訓練數據和測試數據

機器學習算法的目標是對未知的新數據進行預測。我們使用訓練數據來建立模型。在訓練數據時,算法將逐漸減少訓練的誤差。但是,不能將訓練數據的準確率(Accuracy)視為廣義的準確率,其原因在於該算法可能會記住實例並對其進行相應的分類。所以,為了評估生成的模型,需要將數據分為訓練數據和測試數據。利用訓練數據進行算法訓練,利用測試數據來計算生成模型的最終準確率。測試數據並不參與算法訓練。

一般將60%~80%的數據作為訓練數據,剩餘的部分作為測試數據。所以,在測試數據中獲得最好結果的模型可以作為目標模型。

5.算法選擇

我們從一組機器學習算法開始,並將訓練數據的特徵應用到算法中,算法選擇依賴於問題的定義。如果從電子郵件中收集數據,並將郵件分為垃圾郵件或非垃圾郵件,則這時所需要的算法是在輸入變量後輸出相應的結果(垃圾郵件或者非垃圾郵件),這類算法稱為分類(Classification)算法(如決策樹、樸素貝葉斯、神經網絡等)。如果想預測某一任意連續變量(如預測即將到來的季度銷售量),則使用迴歸(Regression)算法(如線性迴歸、核迴歸等)。如果所解決的問題並沒有相關的任何輸出或反應,則可以使用聚類(Clustering)算法,根據它們的特性對其分組。每種類別中都有大量的算法,我們將在後續的章節中給出示例。

6.算法訓練

在選擇算法之後,開始訓練模型。訓練模型是在訓練數據集上進行的,大多數算法的權值/參數在訓練開始時都是隨機分配的,並在每次迭代中加以改進。算法訓練過程中,在訓練數據集上多次運行以產生結果,如圖1.1所示。例如,在線性迴歸的情況下,算法在開始時隨機放置分離線,在每次迭代之後不斷地改進自身(也就是移動分離線)。

「新書推薦」入行AI,你需要一本Python機器學習入門

7.測試數據評估

利用訓練數據生成最佳算法後,在測試數據集上對算法的性能進行評估。測試數據集並不能參與算法訓練,因此測試數據並不能影響算法的決策。

8.參數調整

在選擇正確的算法後,可以嘗試對其進行改進以獲得更好的性能。每個算法都有不同的參數設置方式,可以對其進行配置從而更改算法性能,這稱為參數調整(Parameter Tuning)。例如可以改變算法學習的速率(學習率)來提高算法性能,這些參數稱為超參數(Hyper Parameter)。對於機器學習來說,參數調整更像是一門藝術。

9.模型使用

上述所有步驟完成之後,就可以獲得在訓練集上訓練生成,並在測試集上完成評估的模型。現在可以使用這個模型來預測新數據的值。對於生產環境,可以將模型部署到服務器,並通過API接口使用模型的預測功能。當然,這個模型並不總一樣的,每當獲得新數據時,都要將上面所列出的步驟重新進行一遍,以改進模型的性能。

因此,在機器學習中,從問題開始,最後以一個解決問題的預測算法結束。

通過下面的問題,我們開始嘗試瞭解機器學習算法是如何解決問題的。

假設你需要購買一棟房子,現在開始查看市場上正在出售的房屋,並據此核對你的預算。你對將要購買的房子有多個要求,首先就是房子的面積。

在圖1.2的情景中,你先考查了一棟600平方英尺(約56m2)的房子,價格是220 000英鎊(約1 942 578元)。這個房子的確很不錯,但是它並不滿足你的要求——你將和你的家人一同居住,而這個房子面積太小,並不能讓每個人都住得舒適。所以,你繼續研究並找到一棟1700平方英尺(約158m2)的房子,價格是730 000英鎊(約6 445 827元)。這個房子滿足你的要求,但是它的價格有些超出你現在的預算——你的預算與小面積房子的價格相比要高一些,但也不像大房子的價格那麼高。然而,只有當你與業主或代理人見面並提交詳細資料後,才能得到房子的實際價格。但是你並不想與每一個業主或者代理人見面。

「新書推薦」入行AI,你需要一本Python機器學習入門

在二維(2D)平面上分析一下你所考查的兩個屬性,如圖1.3所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

現在,你在城市裡閒逛,找到一棟面積在這兩棟房子之間的房子。

這棟新房子的面積大約有1 250平方英尺(約116m2),但你還不知道價格。所以,你想預測房子的價格,看其是否符合預算和要求。

將新房子的信息放在同一個二維平面上,試著預測這個房子的價格,如圖1.4所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

為了預測房屋的價格,將設置一條符合已知結果(即房屋價格和房屋面積)的直線,這裡得到了如圖1.5所示的一條直線。

「新書推薦」入行AI,你需要一本Python機器學習入門

通過這條直線,可以預測出1250平方英尺(約116m2)的房子的價格是475 000英鎊(約4 194 202.5元)。所以,我們得到了一條根據房子面積來預測房子價格的直線,這種技術稱為線性迴歸(Linear Regression)。可以把這種技術理解為在現有數據點上尋找最佳直線。

比如,計算3個點到直線距離之和的最小值。首先,隨機選擇一條線,直線上方有A、B、C共3個點,如圖1.6所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

然後,計算每個點到直線的距離,如圖1.7所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

可以得到總距離是a+b+c。現在,移動直線的位置(向下移動)並再次計算點到直線的距離,如圖1.8所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

改變了線的位置,但總距離a+b+c增加了。顯然,這不是我們想要的結果。讓我們將直線朝另一個方向(向上移動)移動,如圖1.9所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

這條直線(見圖1.9)比第一條直線(見圖1.7)要更符合要求。現在移動這條線,並試著重複進行同樣的步驟。最終通過這種方式結束直線的選擇,從而確定直線位置,如圖1.10所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

對於給定的3個點(A、 B、 C)來說,圖1.10所示的直線是最符合條件的。在這裡取3個點到直線的非負距離,找到這條線的方法稱為梯度下降法。

有時在所有數據點上擬合一條直線並沒有多大意義。現在思考圖1.11所示的點集。

「新書推薦」入行AI,你需要一本Python機器學習入門

如果嘗試使用線性迴歸技術來擬合一條直線,它看起來如圖1.12所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

很明顯,這條線不適合用來預測。相反,可以用圖1.13所示的曲線來對數據建模。

「新書推薦」入行AI,你需要一本Python機器學習入門

這就是所謂的多項式迴歸(Polynomial Regression) —— 因為其參數是多項式。

再來看另一個例子,例如有一個售鞋網站,其中包含來自不同公司的各種鞋子,可以通過其網上商店訂購鞋子。鞋子成功交付後,公司將發送電子郵件獲取顧客的反饋。顧客在評論區內留言,其中有些評論是正面的,有些評論則是負面的。

該公司每天銷售數千雙鞋,需要跟蹤每一個評論並採取相應的行動。如果顧客評論說鞋子質量不佳,則需向生產商詢問有關產品的質量問題;有些鞋子反響很好,則最好將它們放在網站的首頁。

為了解決這個問題,首先需要從一組顧客評論開始,將每個評論分為負面評論或者正面評論,下面給出部分示例。

正面評論

A1:質量不錯!我很喜歡這雙鞋子。

A2:非常好的產品。

A3:給我爸爸買的,他很喜歡。

負面評論

B1:材質不好,不適合。

B2:很不喜歡這個產品,包裝也很不好。

B3:千萬不要買這個產品。

分析示例中的正面評論和負面評論,會發現,如果評論中包含“喜歡”這個詞,那麼它更可能是一個正面評論。因此,創建這條規則並檢查所有數據集,會發現60%的正面評論中包含“喜歡”這個詞;另一方面,只有10%的負面評論中包含“喜歡”這個詞。

同樣,其他詞語所佔的比例如表1.1所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

因此,對於將來可能獲得的評論,根據其所包含的詞的複合概率,可以判定該評論是正面評論還是負面評論,這就是樸素貝葉斯分類器(Naïve Bayes Classifier)

再列舉一個向不同的人推薦雜誌的例子。假設已經記錄了用戶的年齡、性別、位置以及他們閱讀的雜誌類型,表1.2所列為記錄的數據。

「新書推薦」入行AI,你需要一本Python機器學習入門

現在,通過對這些數據進行觀察,可以發現小於15歲的人喜歡閱讀兒童雜誌。根據其製作一個節點和它的決策,如圖1.14所示。每個圓節點表示決策節點,圖的邊緣(箭頭)則表示相應的決策,每個矩形節點表示通過圖分支之後採取的決策。

「新書推薦」入行AI,你需要一本Python機器學習入門

因此,可以說每個年齡小於或等於15歲的人都有可能閱讀兒童雜誌。現在再來處理大於15歲的讀者的分支。

現在,第二個觀察特徵是男性,他們喜歡閱讀政治雜誌。為其創建相同的決策節點和分支,如圖1.15所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

接下來,需要看一下年齡在15歲以上的女性的選擇。還有一個信息可以利用——地區。因此,可以說,來自美國的女性喜歡閱讀體育雜誌,而其他地區的女性則喜歡商業雜誌。在這裡形成的節點如圖1.16所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

正確地對每個數據點進行分類,這個過程中形成了決策樹。可能存在多種創建決策樹的方法。根據現有的數據,這些方法可以做出正確的預測。

圖1.17所示的這棵樹對數據進行了準確的分類。

「新書推薦」入行AI,你需要一本Python機器學習入門

再來舉另一個例子,有幾個人每年申請貸款,銀行根據他們的收入和貸款額從而決定是否對其提供貸款,目標是向那些在規定時間內償還債務,且沒有任何違約的人提供貸款。

如果一個人月收入是20 000美元,他申請了100 000美元的貸款,銀行根據他的收入來源可以批准貸款;如果一個人月收入是3 000美元,他申請了600 000美元的貸款,則銀行可能會早早地拒絕他。

因此,銀行基於以往違約者的歷史創建了一個數據,如圖1.18所示。紅點表示銀行拒絕受理的申請,綠點表示銀行批准的申請。橫座標是請求的貸款額度,縱座標是月收入。

「新書推薦」入行AI,你需要一本Python機器學習入門

現在,一個月收入10 000美元的人想要貸款300 000美元,銀行是否會給予批准呢?可以通過一條直線來分割數據,如圖1.19所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

根據上面的直線,可以預測銀行將同意月薪20 000美元的人申請300 000美元的貸款申請。

現在,已經有一條合適的直線來分割現有的數據點。我們使用的算法(梯度下降法)與在線性迴歸過程中使用的算法相同。在這裡,目標變量是類別而不是在線性迴歸情況下連續的預測值,這種技術稱為邏輯迴歸(Logistics Regression)

現在,銀行來了一位新的經理,他要檢查所有記錄,他認為銀行批准或拒絕貸款申請的參數是荒謬的,一些像10 000美元或20 000美元的貸款申請並沒有風險,銀行可以同意這部分貸款申請。所以,他改變了規則和數據,如圖1.20所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

顯然,僅僅使用一條直線並不能將紅點和綠點分開,既然這樣,那使用兩條直線呢?如圖1.21所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

與一條直線相比,使用兩條直線可以將紅點和綠點分開。這種技術被稱為神經網絡(Neural Network)。神經網絡是基於大腦中的神經元的概念提出的。大腦中的神經元收集信息並將其傳遞給其他神經元。簡單來說,就是基於先前神經元的輸入,下一個神經元接收要求並決定輸出,它還將信息傳遞給其他神經元。最後,通過處理不同的神經元,大腦做出決定。

這個概念可以用下面的模型(見圖1.22)來理解。在這個模型中,兩個神經元通過使用不同的假設建立模型,並且將它們的發現發送給另一個神經元。根據收集到的信息,輸出神經元做出決策。

「新書推薦」入行AI,你需要一本Python機器學習入門

在處理數據時,對於一條分割數據點的直線,可能有不同的選擇。如圖1.23所示的兩個例子。

「新書推薦」入行AI,你需要一本Python機器學習入門

與直線1相比,直線2的邊距更大,其在分割數據方面似乎更好,如圖1.24所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

現在我們要尋找最佳分割路線,而梯度下降並不能解決這個問題,需要線性優化才能實現。這種技術被稱為最大間隔分類器或支持向量機(Support Vector Machine, SVM)

在現實世界中,數據並不能完全分割開。它可能會如圖1.25所示的那樣。

「新書推薦」入行AI,你需要一本Python機器學習入門

所以,不能通過一條直線就把紅點和綠點分開。但是如果通過一個平面來區分紅點和綠點,就可以用一個分類器對它們進行分類。創建一個新的維度並用這個平面來分割紅點和綠點,如圖1.26所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

現在使用一個新的維度將紅點和綠點分開。這種技術被稱為核函數(Kernel Trick)

真實的數據非常複雜,而且有很多維度。帶有支持向量機分類器的核函數可以用來解決這些複雜的問題。

現在來看另一個問題。如圖1.27所示,有一家雜貨店A2A。他們提供電話送貨服務,每當接到電話時,他們就會將地址發送給派送員,派送員會趕赴送貨地點並交付商品。他們設法將辦公室設在城市的中心,以便為越來越多的人及時提供服務。

「新書推薦」入行AI,你需要一本Python機器學習入門

這裡的點代表A2A的服務需求。現在他們意識到,這種一個配送中心處理所有的需求的做法並不明智。於是,他們決定在城市中開設4個配送中心,依照不同地區來接受需求並提供服務。

因此,為了解決這個問題,首先可以隨機地添加4個配送中心並給予其商品派送需求,如圖1.28所示。

「新書推薦」入行AI,你需要一本Python機器學習入門

顯然,這不是配送中心的最佳分配位置。接下來,將每個點移動到分類點的中心。然後,將所有點分類到最近的配送中心,並將配送中心的位置移動到之前的分類中心。經過多次迭代,將得到圖1.29所示的分配位置。

「新書推薦」入行AI,你需要一本Python機器學習入門

因此,每個點的分配都是基於點到中心的距離。這種技術稱為K-均值聚類(K-Means Clustering)

也可以使用另一種方法進行聚類。把所有的點看作是獨立的集群,而不是首先將它們分組到集群中再對其進行重新分配。然後,將兩個最近的點進行分組,形成一個簇。一直這樣操作,直到出現較大的距離或者形成最小數量的簇。這種技術稱為層聚類(Hierarchical Clustering)

本文摘自《Python機器學習》


分享到:


相關文章: