蘋果樹會結出一些很棒的水果和惡劣的混凝土。 然而,高級雜貨店裡的蘋果則展示了 100% 的完美水果。 在果園和雜貨店之間,有人花費大量時間移除壞的蘋果,或對可回收的蘋果丟些微蠟。機器學習工程師會花大量時間找出不良示例,並清除可回收的例子。就算是好幾個「糟糕的蘋果」,還是可能會破壞龐大的資料集。
縮放特徵值
「資源調度」是指將浮點特徵值從自然範圍 (例如 100 到 900) 轉換成標準範圍 (例如,0 到 1 或 -1 到 +1)。如果功能集只包含單一功能,資源調度幾乎沒有實質效益。但是,如果特徵集包含多個功能,特徵縮放功能可提供下列優點:
- 協助梯度下降法加速收斂。
- 防止出現「NaN 陷阱」,讓模型中的一個數字變成 NaN (例如在訓練期間超過浮點精確度限制) 並基於數學運算,讓模型中的所有其他數字最終成為 NaN。
- 協助模型學習每個特徵的適當權重。 如果沒有特徵縮放功能,模型會過度關注範圍較廣的特徵。
您不必為每個浮點特徵指定相同的比例。如果功能 B 從 -1 提高到 +1,而功能 B 從 -3 提高至 +3,則不會造成任何嚴重影響。不過,如果特徵 B 從 5000 調整為 100000,模型的反應就會不佳。
處理極端離群值
下圖代表加州住宅資料集中名為 roomsPerPerson
的功能。roomsPerPerson
值的計算方式是將某區域的房產總數除以該區域的人口數。圖顯示加州的大部分區域,每人都有一到兩個房間。但建議你沿著 X 軸查看
圖 4 一隻憤怒的惡棍龍尾。
我們該如何盡可能降低這些極端離群值的影響?其中一種做法是擷取每個值的記錄:
圖 5 對數縮放仍留下尾數。
記錄資源調度執行的工作有點更優質的工作,但離群值仍然存在很大的尾。我們再選擇一種方法。如果直接「大寫」或「clip」為任意值 (例如 4.0) 的 roomsPerPerson
最大值,該怎麼做?
圖 6 從 4.0 版剪輯特徵值
將特徵值裁剪為 4.0 並不代表系統會忽略所有大於 4.0 的值。而是所有大於 4.0 的值現在都會變為 4.0。這說明瞭 4.0 吋的有趣山丘。儘管山坡地勢很高,經過縮放的特徵集現在也比原始資料更加實用。
特徵分塊
下圖顯示加州不同緯度的房屋相對分佈情形。請注意,分群法約在緯度 34 度,而舊金山約在緯度 38 度。
圖 7. 每一層樓。
在資料集中,latitude
是浮點值。不過,在我們的模型中將 latitude
表示為浮點地圖項目並不合理。這是因為緯度值和居住值之間不存在線性關係。舉例來說,緯度 35 的房屋不比緯度 34 的房屋 \(\frac{35}{34}\) 便宜 (或較低)。而個別緯度很可能是房屋價值的預測指標
如要將緯度設為實用的預測工具,讓我們將緯度分割成「特徵分塊」,如下圖所示:
圖 8. 特徵分塊值。
現在,我們不再擁有一個浮點地圖項目,而是有 11 個不同的布林地圖項目 (LatitudeBin1
、LatitudeBin2
、...、LatitudeBin11
)。提供 11 個獨立的地圖項目有些可能的重要性,因此我們要將這些地圖項目合而為單一 11 元素向量。如此將使我們能以下列方式表示緯度 37.4:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
藉由繫結,我們的模型現在可以學習每個緯度完全不同的權重。
拖曳
目前為止,我們已假設用於訓練和測試的所有資料都值得信賴。實際上,資料集中的許多範例會因下列一或多個問題而不可靠:
- 省略的值。例如,使用者忘記輸入房屋年齡值。
- 重複的範例。例如,伺服器不小心上傳了兩次相同的記錄。
- 標籤不佳。例如,一個人將橡樹的圖片誤標為楓樹。
- 特徵值錯誤。例如,某人輸入了額外的數字,或是在太陽中留下溫度計。
偵測到不良示例後,您通常會將其從資料集中移除,藉此進行「修正」。如要偵測省略的值或重複範例,您可以編寫簡單的程式。偵測錯誤的特徵值或標籤可能並不容易。
除了偵測不良的個別樣本外,您也必須在匯總中偵測無效資料。直方圖是以視覺化方式呈現匯總資料的絕佳機制。此外,取得下列統計資料也有幫助:
- 最大值與最小值
- 平均值和中位數
- 標準差
建議您為離散特徵產生最常見的值清單。
例如,使用 country:uk
的示例數量是否與預期數量相符。language:jp
應該是資料集中最常見的語言嗎?
瞭解您的資料
請遵守下列規則:
- 請記住,資料應以何種方式呈現。
- 確認資料符合這些期望 (或者您可以說明資料不符合預期的原因)。
- 再次確認訓練資料與其他來源 (例如資訊主頁) 是否同意。
請謹慎處理資料,謹慎處理任何重要業務程式碼。優秀的機器學習是仰賴優質資料。
其他資訊
機器學習規則、 機器學習階段 II:特徵工程