迴歸:畫一條
最不冤枉的線
上一課猜的是「是哪一種」,這一課猜「是多少」——明天 33°C, 冰飲會賣幾杯?迴歸就是從散落的點裡找出那條趨勢線。 但線有無限多條,哪條才對?先用手感受一下:轉動這條線, 紅色細線是每個點被「冤枉」的量,把總冤枉值壓到最低試試——
右邊的實驗場是真的 Python(在你的瀏覽器裡跑,不用安裝任何東西)。 首次載入約需 30–60 秒,正好夠你讀完第 1 節。每一格程式碼都能改、能重跑, 改壞了重新整理就復原——這是你的沙盒,盡量玩。
氣溫和銷量的關係
右邊有一個飲料攤 48 天的紀錄:當日最高溫對冰飲銷量。 趨勢很明顯(越熱賣越多),但點不會乖乖排成一條線—— 同樣 30°C 的兩天,銷量可能差二十杯。假日、下雨、隔壁施工…… 這些我們沒記到的因素,統稱雜訊。
迴歸的任務從來不是「穿過每一個點」(那是雜訊,不值得追), 而是找出雜訊底下的趨勢。記住這句話,第 3 節會回來收帳。
最小平方法:錯得最少的那條線
你剛剛在上面轉線時做的事,有個正式名字:最小平方法—— 把每個點被冤枉的量(垂直距離)平方後加總,找讓總和最小的模型。 平方有兩個用意:正負不抵銷,而且大錯罰得特別重。
右邊的模型多了一個旋鈕:彎曲程度(多項式次數)。拉拉看:
- 次數 1(直線):最冷和最熱的日子都猜太低、中段又猜太高—— 灰色誤差線的方向有規律,代表模型太簡單,趨勢沒抓完。
- 次數 2、3:曲線貼上趨勢,誤差明顯縮小。
- 次數 12 以上:曲線開始為了個別的點扭來扭去。 誤差數字還在變小——但你心裡應該開始不安了。
過擬合:太會背,反而不會考
剛剛的誤差有個陷阱:那是訓練誤差——模型看著答案算出來的分數, 次數越高只會越好看。真正的考驗是沒看過的日子。 右邊把 48 天拆成 36 天給模型學、12 天藏起來當考題,每個彎度都考一次:
- 訓練誤差一路下降——越彎越能把看過的點背起來。
- 測試誤差先降後升——貼近真實趨勢時最低, 開始背雜訊之後反而越考越差。這就是過擬合。
挑模型不是挑訓練分數最高的,是挑測試誤差最低的那個彎度。 這個 U 型曲線是整個機器學習最重要的一張圖,之後每一課都會再遇到它。
換你動手
右邊最下面有一格「你的實驗區」。三個挑戰,由易到難:
把 my_degree 改成 15、ask_temp 改成 40,
看它猜幾杯——這個模型會給你一個負的銷量。
同樣問 40°C:次數 2 和次數 12 的答案差多少?哪個你敢拿去備料?
回到 1️⃣ 把雜訊從 9 改成 25,再看 3️⃣ 的紅線最低點移去哪—— 雜訊越大,模型該更彎還是更直?先猜,再驗證。