National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 72 24°C PM2.5 13
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 01

機器學習在做什麼

從資料學規則,監督與非監督,特徵與標籤
Interaction實作 30 minute(s)

Learning Objectives

  • 說明「自己寫規則」和「從資料學規則」的差別,以及各自適合的情況
  • 分辨監督式與非監督式學習,分類與迴歸
  • 從一張資料表指出特徵與標籤,並判斷哪些欄位不能當特徵
  • 讀懂 scikit-learn 的 fit 與 predict 在做什麼

規則寫不完的時候

想判斷一則訊息是不是垃圾訊息,你可能會先想到自己寫規則:「出現『中獎』就是垃圾訊息」。 這就是平常寫程式的方式:人想好規則,電腦照著做。

規則少的時候這樣很好。麻煩的是,有些問題的規則你講不清楚,或者永遠寫不完:垃圾訊息的寫法一直變,同一個詞在正常訊息裡也會出現。

機器學習換一個方向:你給資料和答案,由程式找出規則。

給電腦什麼 電腦產出什麼
一般程式 規則+資料 答案
機器學習 資料+答案 規則(也就是模型)

這一軌會教你怎麼用資料訓練模型、怎麼判斷模型真的學到東西。先從一條自己寫的規則開始,看它會在哪裡出問題。

逐步看:自己寫規則來抓垃圾訊息

messages.csv 有 320 則校園短訊,label 欄是人工標好的答案(ham 是正常訊息,spam 是垃圾訊息)。這是程式產生的模擬資料,不是任何學校的真實資料。

先別看準確率,看最後印出來的誤判和漏掉的訊息長什麼樣子。

讓資料決定規則

換一個更簡單的問題:想用小考平均猜一位同學會不會及格。規則的樣子可以先定好:

小考平均 >= 門檻  →  猜及格

但門檻該設多少?與其憑感覺,不如把幾個門檻都試一遍,留下在資料上猜得最準的那個。

這已經是機器學習最核心的樣子:

  1. 先決定規則的形式(這裡是「一個門檻」),這叫模型;
  2. 定一個分數來衡量規則好不好(這裡是準確率);
  3. 讓程式在資料上找出分數最好的規則,這個過程叫訓練(training)。

之後學到的每個模型都是這三件事,差別只在規則的形式更複雜、找的方法更聰明。

逐步看:從資料學一個門檻

students.csv 是課堂上會一直用到的資料:400 位同學的讀書時數、缺席次數、小考與考試成績(同樣是程式產生的模擬資料)。

看 best_t 和 best_acc 怎麼在迴圈裡被更新,最後再和「全部猜及格」比較。

監督式與非監督式、特徵與標籤

資料表裡每個欄位有不同的角色:

名詞 意思 在 students.csv 裡
特徵(feature) 用來預測的資訊,習慣寫成 X 讀書時數、缺席次數、小考平均
標籤(label) 想預測的答案,習慣寫成 y 是否及格、期末分數
樣本(sample) 一筆資料,也就是一列 一位同學

依照資料裡有沒有標籤,機器學習可以分成兩大類:

類型 資料 目標 例子
監督式學習(supervised) 有標籤 預測標籤 垃圾訊息判斷、預測期末分數
非監督式學習(unsupervised) 沒有標籤 找出資料本身的結構 把作息相近的同學分成幾群

監督式學習再依標籤的型態分成兩種:

  • 分類(classification):答案是類別,例如及格或不及格、垃圾訊息或正常訊息;
  • 迴歸(regression):答案是連續的數字,例如期末分數、租車次數。

選特徵時要問一件事:預測的時候,這個資訊拿得到嗎? students.csv 的 passed 就是由 final 算出來的(期末 60 分以上算及格),把 final 當特徵去預測 passed,準確率會是 1.0,但完全沒有用:學期結束前你根本不知道期末分數。這種「答案偷偷混進特徵」的情況叫資料洩漏(data leakage),第 14 課會細談。

逐步看:第一個模型,fit 與 predict

scikit-learn 是這一軌主要使用的套件。每個模型的用法都一樣:建立模型 → fit(X, y) 訓練 → predict(X) 預測。

這裡用決策樹(第 9 課會細談)當第一個例子,因為它學到的規則印得出來,可以直接看。注意看 X、y 的形狀,以及印出來的規則。

逐步看:沒有標籤也能學,分群

habits.csv 記錄 240 位同學每週的讀書、睡眠、螢幕、運動時數,沒有任何標籤(模擬資料)。沒有答案可以對,模型能做的是把相近的同學分成幾群。

k-means 的原理在第 17 課,這裡只看它的用法和結果,以及結果該怎麼解讀。

這一軌會用到的資料

下面五份 CSV 都是程式產生的模擬資料,不是任何學校的真實資料。好處是資料裡的規律是我們放進去的,可以清楚檢查模型有沒有學對;也因為是模擬的,模型學到的關聯不能拿來推論真實世界(例如「打工會讓成績變差」)。

檔案 內容 會用來學
students.csv 400 位同學的時數、缺席、成績、是否及格 迴歸、分類、特徵工程
risk.csv 1000 位同學的學業狀況與是否需要關懷,有 A、B 兩個校區 不平衡資料、評估指標、資料偏誤
habits.csv 240 位同學的作息,沒有標籤 分群、降維
messages.csv 320 則中文短訊與垃圾訊息標籤 文字分類
bikes.csv 校園單車每站每天的租借次數與天氣 最後一課的專題

此外,有幾課會用 scikit-learn 內附的手寫數字資料(load_digits()):1797 張 8×8 的灰階圖片,是真實的公開資料,來自 UCI 機器學習資料庫的 Optical Recognition of Handwritten Digits。圖片的每個像素都是一個特徵,所以一張圖就是 64 個特徵。

實作:寫一個會找門檻的函數

完成 best_threshold(x, y, candidates):把 candidates 裡的門檻一個一個試,猜測規則是「x >= 門檻 就猜 1」,回傳準確率最高的門檻與它的準確率(四捨五入到小數 3 位)。

同分時留下先試到的那個。回傳的寫法已經給你一個提示:return best_t, round(float(best_acc), 3)。

你的輸出
預期輸出

小測驗:問題的類型

1.

想預測一位同學的期末分數(0 到 100 的數字),這是哪一種問題?

2.

手上有 5000 位同學的選課紀錄,沒有任何分組資訊,想看看選課習慣有沒有自然分成幾類。這是?

3.

下面哪種情況,直接寫規則比訓練模型更合適?

第 1 次作答

小測驗:特徵與標籤

1.

下面程式會印出什麼?

import pandas as pd
df = pd.DataFrame({"hours": [3, 5, 8, 2], "sleep": [7, 6, 8, 5], "passed": [0, 1, 1, 0]})
X = df[["hours", "sleep"]]
y = df["passed"]
print(X.shape, y.shape)
2.

想在開學第三週預測誰可能不及格,下面哪個欄位不能當特徵?

3.

某個模型準確率 0.80,資料裡 85% 的人及格。最恰當的解讀是?

第 1 次作答

重點整理

  • 一般程式是人寫規則;機器學習是給資料與答案,由程式找出規則。規則清楚又穩定時,直接寫程式就好。
  • 訓練的本質:定好規則的形式(模型)和分數,在資料上找分數最好的規則。
  • 監督式有標籤(分類預測類別、迴歸預測數字);非監督式沒有標籤,例如分群,結果要由人解讀。
  • 特徵是 X、標籤是 y;預測當下拿不到的資訊不能當特徵。
  • scikit-learn 的模型都是 fit、predict。準確率一定要和基準比較。
  • 課堂上的 CSV 都是模擬資料,不要用來推論真實世界。

到這裡還有一個大問題沒解決:我們都在訓練用的同一份資料上算準確率,這個數字能相信嗎?下一課就來回答。

這一課完成了!
Next lesson:訓練與測試
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。