JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

特徵工程:幫模型看見世界

模型從來看不到真實世界——它只看到你遞給它的數字。特徵工程就是挑選並塑造這些數字的手藝,讓你關心的規律變得一目了然。

特徵到底是什麼

到現在你已經知道,一個 模型 是從 資料集 中學習的。但模型從不接觸真實世界——它看到的永遠只是一行數字。這一行裡每一個可度量的屬性就是一個特徵:模型能讀取的一欄。預測房價時也許會用到面積、臥室數量、到最近車站的距離。每一項都是一個 特徵;它們合在一起,構成了模型真正吃進去的輸入向量。

關鍵在於,世界並不是以數字的形式到來的。一個時間戳、一個城市名、一段文字、一張照片——它們本身都不是特徵。必須有人決定怎麼把它們變成數字,而這個決定悄悄地劃定了模型究竟能注意到什麼。模型只能找出那些在「翻譯成特徵」之後仍然存活下來的規律。在這次翻譯中被你丟掉的東西,就永遠丟掉了,無論演算法多麼聰明。

塑造特徵:編碼與縮放

第一項真正的工作,是把雜亂的現實變成乾淨的欄。像「城市 = 東京 / 大阪 / 京都」這樣的類別並不是數字——如果你只是把它們標成 1、2、3,模型就會錯誤地以為京都是東京的三倍。獨熱編碼解決了這個問題:給每個類別一欄各自的是/否。先分清類別型與數值型特徵的區別,你才知道某一欄究竟該用哪種處理。

數值型特徵帶來一個更微妙的問題:量綱。假設一欄是年齡(0–100),另一欄是年收入(0–1,000,000)。對一個基於距離的方法來說,收入會把年齡壓得無足輕重——純粹因為它的數字更大,而不是因為它更重要。特徵縮放,作為歸一化與標準化的一種,把每個特徵放到可比的尺度上,讓模型按相關性而非單位的偶然大小來權衡它們。

# standardize a column: center, then divide by spread
z = (x - mean(x)) / std(x)

# fit mean/std on TRAIN only, then reuse on test
mean, std = fit(x_train)
x_train = (x_train - mean) / std
x_test  = (x_test  - mean) / std   # same numbers, not refit
只用從訓練集學到的統計量來做標準化——在測試資料上重新擬合會洩露資訊。

維度災難

人們很容易以為特徵越多越好——把一切都餵給模型,讓它自己去理清。現實卻會狠狠地反推回來。隨著特徵(維度)數量增加,資料所棲身的空間會爆炸式膨脹,而你那固定數量的樣本在其中變得越來越稀疏。這就是維度災難

想像 100 個點沿一條 1 公尺的線鋪開:很緊湊,大約每公分一個。把同樣的 100 個點鋪到 1 公尺見方的正方形裡,它們就稀疏了;鋪進 1 公尺的立方體,它們幾乎彼此孤立。在高維空間裡,幾乎每個點都離其他所有點都很遠,「鄰近」失去了意義——而這恰恰是基於距離和近鄰的方法所依賴的。更多的欄可能意味著更少的訊號,而不是更多。

還有一個很實際的後果。每多一個特徵,就給了模型多一個可撥弄的旋鈕、多一條去擬合雜訊而非訊號的途徑——直接餵養了過擬合。一條粗略的經驗法則是:要填滿一個高維空間,你需要的樣本量會暴增,而你通常沒那麼多。少而精的特徵,往往勝過一大堆弱特徵。

降維:留下要緊的東西

如果維度太多有害,自然的應對就是把它們壓縮。降維把許多特徵擠壓成少數幾個,力求盡量保留有意義的變化、同時丟掉冗餘。最著名的技術是 主成分分析(PCA):它找出資料變化最劇烈的那幾個方向,然後只用這少數幾個方向來重新描述每個點。

想像給一張漂浮在三維空間裡的平整紙片拍照。這張紙其實是二維的;第三個維度幾乎不攜帶資訊。PCA 會自動找到那個平面,讓你每個點存兩個數字而不是三個,幾乎毫無損失。真實資料很少這麼乾淨,所以降維是一筆交易:你接受損失一點細節,換來一個更小、更少雜訊、訓練更快的表示。

手工特徵 vs. 學到的表示

幾十年來,上面講的一切就是*那份*工作:熟練的人手工打造特徵,而一個模型成敗的關鍵,通常在於特徵而非演算法。然後深度學習改寫了遊戲規則。只要資料足夠,一個深度網路就能直接從原始輸入——像素、音訊取樣、字元——中學出自己的特徵,靠的是表示學習。靠前的層發現邊緣,靠後的層把它們組合成形狀和物體,整個過程中沒有任何人命名過哪怕一個特徵。

這些學到的特徵常常以嵌入的形式存在:一個稠密向量,相似的東西彼此靠近,是被發現出來的而非被設計出來的。這確實強大,已經為圖像、音訊和文本免去了大量手工特徵工程。但別把它當成天上掉的餡餅。學到的特徵需要大量資料和算力,難以解釋,還可能悄悄抓住錯誤的線索——比如靠認出背景裡的雪,來把圖片分類成「狼」。

那到底該用哪種?在表格類的中小規模資料上——也就是大多數商業問題——配上經典模型的精心特徵工程依然勝出,而它仍然是以資料為中心的 AI的核心。在大規模的原始感知資料上,學到的表示則佔據主導。誠實的總結是:深度學習挪動了特徵工作,而非廢除了它。挑選輸入、清洗它們、決定模型被允許看見什麼,依舊是人的判斷——也依舊是大部分真實收益藏身之處。