iPAS AI 應用規劃師(中級)|科目三:機器學習技術與應用
🗺️ 學習順序總覽 / 程式題預測 10 題中的第 1 題🔍 試看版

1. 迴歸完整流程:加州房價預測

California Housing · LinearRegression · RMSE / R² · 殘差圖
▶ 可瀏覽器執行★★★ 極高機率sklearn線性迴歸評估指標

依據🎯 命題依據:為什麼押這一題

兩屆程式題組清一色是「分類與影像」,迴歸從未以程式題組登場,但迴歸概念題每屆必考(114-2 Q15 R²、Q24 殘差圖;115-1 Q5 殘差)。California Housing 是 sklearn 課本的標準迴歸範例,補洞首選。

程式💻 還原後的完整程式

下面是把題組的「教科書片段」補成端到端可執行的完整程式。綠色「▶ 可執行」區塊可在你的瀏覽器實際跑出結果。

完整可執行程式(使用 sklearn 內建的 California Housing)

      
▶ 可執行在瀏覽器實際執行這支程式

用可離線執行的「仿真加州房價」資料(8→5 個特徵、含異方差雜訊),管線與指標和題目版完全相同。首次執行需下載 scikit-learn。

按「執行程式」後,這裡會顯示你瀏覽器實際跑出的結果。
🖥️ 示範輸出(實際以你的瀏覽器計算為準)
RMSE = 0.614 (十萬美元) R^2 = 0.752 標準化後係數(依影響力大小排序): MedInc +0.975 HouseAge +0.178 AveOccup -0.108 Latitude -0.105 AveRooms +0.045

逐行🐣 逐行拆解

把上面的程式「一行一行」翻成白話,第一次看程式也能跟上;符號與英文都有解釋。

🐣 從 scikit-learn(Python 最有名的機器學習工具箱)的資料集倉庫,借出「載入加州房價資料」這個功能。from A import B =從 A 這個大箱子裡只拿出 B 來用。
🐣 借出「把資料切成訓練/測試兩份」的工具。
🐣 借出「標準化」工具——把不同單位的數字調成同一把尺。
🐣 借出「線性迴歸」這個預測模型(畫一條最合適的直線來預測)。
🐣 一次借兩個打分數的工具:均方誤差與 R²,中間用逗號隔開。
🐣 把 numpy(數學計算工具箱)請進來,取小名 np,之後打 np 就代表它。
🐣 把畫圖工具請進來,取小名 plt。
🐣 呼叫剛借來的功能(名稱後面加括號 () =執行它),把整包房價資料裝進 data 這個袋子(= 是「存進去」)。
🐣 從 data 裡拿兩樣:X=題目(各種房屋特徵),y=答案(房價)。點 . 是「拿裡面的東西」,左右各存一個。
🐣 把每個特徵的名字(收入、屋齡…)存起來,等一下印係數時好對照。
🐣 把題目和答案切成四份:訓練題/測試題/訓練答案/測試答案。test_size=0.2=兩成留作考試;random_state=42=固定洗牌方式,讓每次切法一樣、可重現。
🐣 先造一把「標準化的尺」,此時還沒開始量。
🐣 fit=用訓練資料量出這把尺的刻度;transform=再把訓練資料換算成標準分數。兩件事一次做完。
🐣 測試資料「只換算、不重新量尺」——一定要沿用訓練時那把尺,否則等於偷看考題(資料洩漏)。
🐣 造一個線性迴歸模型,.fit=拿訓練題與訓練答案「開始學習」,學完的成果存進 model。
🐣 拿學好的 model 去「預測」測試題,得到一串預測房價 pred。
🐣 先算均方誤差(預測和真答案差距的平方平均),再用 np.sqrt 開根號,把單位變回「十萬美元」,人才看得懂。
🐣 算 R²:模型抓住了房價起伏的幾成(0~1,越大越好)。
🐣 把結果印到畫面。f"..." 是會填空的字串,{rmse:.3f} =把 rmse 填進去、保留小數 3 位。
🐣 迴圈:zip 把「特徵名字」和「它的係數」配成對,sorted 依大小排序後一組一組拿出來。key=lambda t: -abs(t[1]) =告訴它照係數的絕對值由大到小排。
🐣 印出每個特徵和它的係數。開頭有縮排代表「屬於上面那個迴圈」;:12s=名字補滿 12 格對齊,:+.3f=連正負號都顯示、小數 3 位。
🐣 殘差=真答案減預測,看每一筆到底差了多少。
🐣 畫散點圖:x 軸放預測值、y 軸放殘差;s=點的大小,alpha=透明度(點重疊處會較淡)。
🐣 在 y=0 畫一條紅色水平線當基準,殘差理想上要圍著它上下均勻分布。
🐣 標上 x、y 軸的名稱。分號 ; 代表把兩句寫在同一行。
🐣 加標題、自動把版面排整齊、最後把圖顯示出來。

詳解📖 逐段白話詳解

白話描述;想深入的可展開🔬 進階補充

行 1-11匯入套件、載入資料

fetch_california_housing() 會給你一張表:每一列是加州某個街區,8 個欄位(MedInc 收入中位數、HouseAge 屋齡、平均房間數…),要預測的 y 是該街區房價中位數,單位是「十萬美元」。記住這個單位,第 4 步解讀 RMSE 會用到。

🔰 白話白話:這步就是「把 Excel 讀進來」,X 是題目、y 是答案。
行 A / 行 B先切分、再標準化——順序是考點

標準化要做兩件事:量尺(算出每個特徵的平均 μ 與標準差 σ)與換算fit_transform 是「量尺+換算」,transform 是「只換算」。關鍵鐵律:尺只能用訓練集量(行 A),測試集必須沿用同一把尺(行 B)。

🔰 白話白話:模型是拿「訓練時的尺」學會判斷的;考試時偷偷換一把尺,同樣的屋齡會被量出不同數字,答案當然亂掉。
🔬 進階補充:為什麼「切分前就 fit_transform 全部資料」是資料洩漏?

如果在切分之前就對整份資料 fit,那把「尺」就偷看了測試集的分布,測試分數會虛高、無法反映上線表現。這與 115-1 Q44(LDA 先於交叉驗證)是同一個觀念。正確順序永遠是:先 split → 只在 train 上 fit → 對 test 只 transform

model.fit / predict訓練線性迴歸

LinearRegression() 找出一條加權直線:房價 ≈ w₁·收入 + w₂·屋齡 + … + b.fit() 用訓練資料解出最合適的權重 w,.predict() 把測試街區代進公式得到預測房價。

rmse = ...RMSE:把單位變回「人看得懂」

mean_squared_error 因為取了平方,單位變成「房價的平方」,人腦無法理解;開根號還原成跟房價一樣的單位,才能說「平均差約 X 十萬美元」。本例 RMSE≈0.61,代表典型誤差約 6 萬美元。

🔰 白話白話:面積 0.25「平方公尺」開根號變 0.5「公尺」——開根號就是把單位變回看得懂的樣子。
🔬 進階補充:RMSE、MSE、MAE 差在哪?

MSE=平方誤差平均(對大誤差懲罰重、單位是平方,難解讀);RMSE=MSE 開根號(單位還原,最常拿來報告);MAE=絕對誤差平均(對離群值較不敏感)。三者都是「越小越好」,但 RMSE 會被少數大錯誤拉高。

r2 = ...R²:解釋力,不是準確率

R²=0.75 的意思是「房價高低起伏的規律中,模型抓住了 75%,剩下 25% 是模型抓不到的因素」。它不是答對率——迴歸沒有「答對」的概念,只有誤差大小。把 R²=0.6 說成「準確率 60%」是最經典的錯誤選項。

🔰 白話白話:把房價漲跌想成一首旋律,R²=0.75 表示模型跟得上四分之三的旋律,剩下是它聽不出來的雜音。
🔬 進階補充:R² 竟然可以是負的?

可以。R² 的定義是「比『每次都猜平均值』好多少」。如果模型在測試集上比直接猜平均還爛,R² 就會是負數。所以 R²∈(−∞, 1],不是 0~1。

for name, coef ...係數解讀:標準化後才能比大小

因為特徵都標準化過(每個「一單位」都等於一個標準差),係數的絕對值才能公平比較:本例 MedInc(收入)係數最大,影響力最強。負係數是正常的方向資訊AveOccup 為負=其他條件不變時,每戶人數越多、預測房價越低。

🔬 進階補充:沒標準化的係數為什麼不能比?

沒標準化時,「收入(元)」和「屋齡(年)」的係數各自帶著不同單位,數字大小混著單位大小,根本不能比。就像三個選手要比誰跳得遠,得先站在同一條起跑線。

resid / plt殘差圖:喇叭形=異方差

殘差=實際−預測。把殘差對「預測值」畫散點:健康的圖應該像一條上下等寬的帶子。若低價區緊貼 0、高價區扇形張開(喇叭形),代表誤差變異隨房價變大,違反迴歸的「等變異」假設,術語叫異方差

🔰 白話白話:便宜的房子頂多估錯幾十萬,豪宅可以估錯上千萬——誤差不是「等寬的帶子」而是「越開越大的喇叭」。
🔬 進階補充:發現異方差怎麼辦?

常見兩招:①對 y 取對數 np.log1p(y),把大數字壓扁,喇叭口就被拉平;②改用加權最小平方(對高變異樣本給較小權重)。注意:異方差不影響係數是否無偏,但會讓標準誤與信賴區間失真。

陷阱⚠️ 最容易被出成陷阱的地方

「切分之前」就對全部資料 fit_transform,是另一種資料洩漏寫法——與 115-1 Q44(LDA 先於交叉驗證)同一個觀念,務必會認。
把 R²=0.6 說成「準確率 60%」或「誤差 40%」都是經典錯誤選項;R² 在測試集上還可能是的(比猜平均值還差)。

這是中級程式題預測 20 頁中的 1 頁

每一頁都是:命題依據 → 還原完整程式(可在瀏覽器執行)→ 逐行拆解 → 逐段白話詳解 → 常見陷阱。完整版還有:

💳 信用卡直接購買🛒 前往蝦皮賣場 📖 看完整介紹 🗺️ 回學習順序總覽