下面是把題組的「教科書片段」補成端到端可執行的完整程式。綠色「▶ 可執行」區塊可在你的瀏覽器實際跑出結果。
用可離線執行的「仿真加州房價」資料(8→5 個特徵、含異方差雜訊),管線與指標和題目版完全相同。首次執行需下載 scikit-learn。
把上面的程式「一行一行」翻成白話,第一次看程式也能跟上;符號與英文都有解釋。
白話描述;想深入的可展開🔬 進階補充。
fetch_california_housing() 會給你一張表:每一列是加州某個街區,8 個欄位(MedInc 收入中位數、HouseAge 屋齡、平均房間數…),要預測的 y 是該街區房價中位數,單位是「十萬美元」。記住這個單位,第 4 步解讀 RMSE 會用到。
標準化要做兩件事:量尺(算出每個特徵的平均 μ 與標準差 σ)與換算。fit_transform 是「量尺+換算」,transform 是「只換算」。關鍵鐵律:尺只能用訓練集量(行 A),測試集必須沿用同一把尺(行 B)。
如果在切分之前就對整份資料 fit,那把「尺」就偷看了測試集的分布,測試分數會虛高、無法反映上線表現。這與 115-1 Q44(LDA 先於交叉驗證)是同一個觀念。正確順序永遠是:先 split → 只在 train 上 fit → 對 test 只 transform。
LinearRegression() 找出一條加權直線:房價 ≈ w₁·收入 + w₂·屋齡 + … + b,.fit() 用訓練資料解出最合適的權重 w,.predict() 把測試街區代進公式得到預測房價。
mean_squared_error 因為取了平方,單位變成「房價的平方」,人腦無法理解;開根號還原成跟房價一樣的單位,才能說「平均差約 X 十萬美元」。本例 RMSE≈0.61,代表典型誤差約 6 萬美元。
MSE=平方誤差平均(對大誤差懲罰重、單位是平方,難解讀);RMSE=MSE 開根號(單位還原,最常拿來報告);MAE=絕對誤差平均(對離群值較不敏感)。三者都是「越小越好」,但 RMSE 會被少數大錯誤拉高。
R²=0.75 的意思是「房價高低起伏的規律中,模型抓住了 75%,剩下 25% 是模型抓不到的因素」。它不是答對率——迴歸沒有「答對」的概念,只有誤差大小。把 R²=0.6 說成「準確率 60%」是最經典的錯誤選項。
可以。R² 的定義是「比『每次都猜平均值』好多少」。如果模型在測試集上比直接猜平均還爛,R² 就會是負數。所以 R²∈(−∞, 1],不是 0~1。
因為特徵都標準化過(每個「一單位」都等於一個標準差),係數的絕對值才能公平比較:本例 MedInc(收入)係數最大,影響力最強。負係數是正常的方向資訊:AveOccup 為負=其他條件不變時,每戶人數越多、預測房價越低。
沒標準化時,「收入(元)」和「屋齡(年)」的係數各自帶著不同單位,數字大小混著單位大小,根本不能比。就像三個選手要比誰跳得遠,得先站在同一條起跑線。
殘差=實際−預測。把殘差對「預測值」畫散點:健康的圖應該像一條上下等寬的帶子。若低價區緊貼 0、高價區扇形張開(喇叭形),代表誤差變異隨房價變大,違反迴歸的「等變異」假設,術語叫異方差。
常見兩招:①對 y 取對數 np.log1p(y),把大數字壓扁,喇叭口就被拉平;②改用加權最小平方(對高變異樣本給較小權重)。注意:異方差不影響係數是否無偏,但會讓標準誤與信賴區間失真。
fit_transform,是另一種資料洩漏寫法——與 115-1 Q44(LDA 先於交叉驗證)同一個觀念,務必會認。每一頁都是:命題依據 → 還原完整程式(可在瀏覽器執行)→ 逐行拆解 → 逐段白話詳解 → 常見陷阱。完整版還有: