【Python機器學習】101:機器學習簡介

Brief Introduction of Machine Learning

張育晟 Eason Chang
展開數據人生
9 min readMay 15, 2020

--

大四最後一學期因為修了盧信銘老師的統計學習初論(Statistical Learning),開始接觸機器學習(Machine Learning)也開始對這方面產生興趣。由於這堂課作業都是用python寫,吃了不少苦頭。

因此這一系列的文章將會記錄我這一學期來學習機器學習的內容,包含了觀念和如何使用python撰寫機器學習模型。希望可以用淺顯易懂的文字幫助到大家。

誰是此系列文章的目標讀者?

  1. 已經能嫻熟使用 Python 基本程式設計的使用者
  2. 想學習 Python 機器學習模型的使用者

誰可能不是此系列文章的目標讀者?

這是關於機器學習應用的文章,它可能不適合這些人閱讀:

  1. 從未接觸過 Python 的初學者
  2. 已經嫻熟機器學習應用&深度學習領域實作的高階使用者

機器學習在被大家廣泛知道之前,另外大家常在用的一個叫專家法則,另一個叫統計學習(Statistical Learning)。那其實機器學習跟統計學習中間還是有重疊的地方,只是統計學習更注重在模型的解釋力,反而機器學習比較沒有那麼在意解釋力,只要做出來的模型跟預測出來的結果是好的就可以。

所以到底什麼是機器學習(Machine Learning)?

機器學習是透過程式讓電腦能夠從資料中學習的學科

Machine learning is the science of programming computers so they can learn from data.

傳統上我們在讓電腦程式處理問題都是寫很多的if-else,請電腦碰到這個狀況幫我做什麼處理,碰到另一個狀況幫我做什麼處理。但是隨著任務越來越複雜,不是每件事都可以寫成if條件式,所以我們讓電腦只看過往發生的歷史資料&結果和預期結果對比得到一個pattern,再用這個pattern對未知的data做判讀。

機器學習和人工智慧(AI)&深度學習(Deep Learning)的關係又是什麼呢?

簡而言之,機器學習(Machine Learning)是實踐人工智慧(AI)的一種手段,而深度學習(Deep Learning)是機器學習的其中一種方法

photo selected from https://www.prowesscorp.com/whats-the-difference-between-artificial-intelligence-ai-machine-learning-and-deep-learning/

機器學習可以分為以下幾類:

監督式學習(Supervised Learning):使用標籤資料(labelled)訓練模型,再對無標籤資料(unlabelled)預測,而依據預測的目的,可再分為:

預測數字:回歸問題(Regression) & 預測分類:類別問題(Classification)

stats from https://www.rotowire.com/baseball/stats.php, salary from https://www.spotrac.com/mlb/rankings/pitching/
stats from https://www.rotowire.com/baseball/stats.php

我們用大聯盟的投手數據為例子(如上圖),上圖有5筆資料包含了球員的姓名自責分率和薪資都是有數值的,這就是我們先前提到的標籤資料,也就是我們用來訓練模型的訓練資料(training data)。

然而在下圖的data中有Bumgarner和deGrom的自責分率,但是薪資資料是遺漏值,那薪資就是無標籤資料,需要我們用剛才訓練出來的模型去預測該位球員的自責分率應該拿多少薪資,這就是簡單的回歸問題(Regression)。

stats from https://www.rotowire.com/baseball/stats.php
stats from https://www.rotowire.com/baseball/stats.php

如果是分類問題,我們改用大聯盟的打者數據,我們試著用安打數&得分去預測他是什麼位置的球員。上圖的5筆資料是有包含所有數值的標籤資料,值得注意的是在Position上不再是數字而是位置。對沒有看大聯盟的人講一下,不同位置的打者他的保送數、全壘打數或是打點都會有很大的差距。

相同地,下圖中Escobar和Castro的 Position是遺漏值,同樣需要我們用訓練資料來訓練模型去用打者的打點和得分來預測其位置,這也是簡單的分類問題(Classification)。

對資料進行貼標籤(data labeling)花費時間與成本,可以利用以下兩種學習方式補強:

半監督式學習(Semi-supervised Learning)

遷移學習(Transfer Learning)

半監督式學習(Semi-supervised Learning):不是每個訓練資料都有標籤,使用標籤(labelled data)和無標籤資料(unlabelled data)訓練模型,再針對無標籤資料(unlabelled data)預測

stats from https://www.rotowire.com/baseball/stats.php, salary from https://www.spotrac.com/mlb/rankings/pitching/
stats from https://www.rotowire.com/baseball/stats.php

如上圖,訓練資料這次並不是全部都是標籤資料,其中Bumgarner和deGrom兩位投手的薪資資料皆是遺漏值。用不完整的training data去訓練模型預測Berrious和Syndergaard的薪資就是半監督式學習。

遷移學習(Transfer Learning):使用標籤資料(labelled data)、無標籤資料(unlabelled data)和壓根就不相關的資料(unrelated data)訓練模型,再對無標籤資料(unlabelled data)預測。

stats from https://www.rotowire.com/baseball/stats.php
stats from https://www.rotowire.com/baseball/stats.php

這次的訓練資料多了兩位跟棒球完全不相關的球員:足球王的Messi和籃球之神Jordan。用這樣奇奇怪怪的data去訓練模型就是遷移學習。

非監督式學習(Unsupervised Learning):使用無標籤資料(unlabelled data)訓練模型,再對無標籤資料(unlabelled data)預測

stats from https://www.rotowire.com/baseball/stats.php
stats from https://www.rotowire.com/baseball/stats.php

訓練資料這次不提供你薪資資料了,我們請電腦自己去跑模型,並且自己去預測我們的測試資料。

結構式學習(Structured Learning):訓練後的模型不再只是輸出 “標籤(守備位置)”或 “數值(薪資數字)”,例如Google翻譯、物件辨識或人臉辨識等。

強化式學習(Reinforcement Learning):不使用資料訓練模型,讓模型直接自行訓練,每一次的訓練結果都會得到一次feedback,好的話我就保留這次的演算法,不好的話就改進。

舉例來說。假設我之前都是靠考模擬考來準備學測,但強化式學習就是我不考模擬考了,我直接考學測,每一次學測成績出來都會有個分數,我就知道我哪裡做得好要繼續保持,哪裡還需要加強,就這樣一直考下去有一天會75級分的XD。這一類型的學習方式又更貼近人工智慧。

簡單的機器學習介紹完了,從下一章開始我們就要開始使用Python寫機器學習的模型。感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

下一章:【Python機器學習】102:如何使用Scikit-Learn預測器完成數值預測

--

--

張育晟 Eason Chang
展開數據人生

在不斷變動中努力思索自己的定位,想做的事情很多,但最希望的是不要變成無趣的人。 Linkedin: https://www.linkedin.com/in/stareason1997