透過統計與視覺化技術檢查資料後,建議您以有助提高模型訓練效率的方式轉換資料。正規化的目標是將特徵轉換為相似的尺寸。以下列兩項功能為例:
- 功能
X
的範圍為 154 到 24,917,482。 - 特徵
Y
的範圍為 5 到 22。
這兩項功能的範圍差異極大。標準化可能會操控 X
和 Y
,讓兩者涵蓋相似的範圍,例如 0 到 1。
正規化具有以下優點:
- 可在訓練期間加快模型收斂速度。如果不同特徵的範圍不同,梯度下降可能會「反彈」,且收斂速度較慢。不過,Adagrad 和 Adam 等進階最佳化工具,會隨著時間變更有效的學習率來防止此問題。
- 協助模型推斷更準確的預測結果。如果不同特徵的範圍不同,產生的模型可能會做出較不實用的預測。
- 有助於在特徵值非常高時避免「NaN 陷阱」。NaN 是「不是數字」的縮寫。如果模型中的值超過浮點精確度限制,系統會將值設為
NaN
,而非數字。當模型中的一個數字變成 NaN 時,模型中的其他數字最終也會變成 NaN。 - 協助模型學習每個特徵的適當權重。如果沒有特徵資源調度,模型會過度注意範圍廣泛的特徵,卻無法專注於範圍狹窄的特徵。
建議您將涵蓋不同範圍的數值特徵正規化 (例如年齡和收入)。我們也建議將涵蓋廣泛範圍的單一數值特徵正規化,例如 city population.
請考慮下列兩項功能:
- 功能
A
的最低值為 -0.5,最高值為 +0.5。 - 功能
B
的最低值為 -5.0,最高值為 +5.0。
特徵 A
和 B
的跨度相對較窄。不過,Feature B
的跨距是 Feature A
跨距的 10 倍。因此:
- 在訓練開始時,模型會假設特徵
B
比特徵A
重要十倍。 - 訓練時間會比預期的長。
- 產生的模型可能不是最佳模型。
非正規化造成的整體損害會相對小;不過,我們仍建議特徵 A 和特徵 B 正規化至相同的規模 (可能介於 -1.0 至 +1.0)。
接著,請考慮兩個範圍差異較大的地圖項目:
- 地圖項目「
C
」的最低值為 -1,最高為 +1。 - 「
D
」地圖項目的最低值為 +5000,最高為 +1,000,000,000。
如果您未將功能 C
和功能 D
標準化,模型的準確度可能會不佳。此外,訓練程序需要更長的時間才能收斂,甚至可能無法完全收斂!
本節將介紹三種常見的正規化方法:
- 線性縮放
- 標準分數縮放
- 記錄檔資源調度
本節還會介紹裁剪。雖然這並非真正的規格化技術,但裁剪確實可將不受控的數值特徵納入範圍,產生更優質的模型。
線性調整
線性縮放 (通常簡稱為「縮放」) 是指將浮點值從原始範圍轉換為標準範圍,通常是 0 到 1 或 -1 到 +1。
只要符合下列所有條件,就很適合使用線性資源調度:
- 資料的上下限不會隨時間改變。
- 這項功能只包含少數或不含離群值,且離群值並無極端。
- 這項資源大致平均分布於其範圍內。也就是說,直方圖會針對大多數值顯示大致均勻的長條。
假設 human age
是功能。線性縮放是 age
的良好正規化技巧,因為:
- 大約的下限和上限為 0 到 100。
age
中異常值的比例相對較低。只有約 0.3% 的人口年齡超過 100 歲。- 雖然某些年齡層的代表性較高,但大型資料集應包含所有年齡層的足夠範例。
練習:隨堂測驗
假設您的模型具有名為net_worth
的特徵,可保留不同使用者的淨值。線性縮放是否適合用於 net_worth
的規格化技術?原因為何?
標準分數縮放
Z 分數是指特定值與平均值之間的標準差數。舉例來說,如果值是 2 個標準差,則「大於」平均值的 Z 分數為 +2.0。如果某個值比平均值「低」 1.5 個標準差,則 Z 分數為 -1.5。
代表具有「Z 分數縮放」的特徵,意味著將該特徵的 Z 分數儲存在特徵向量中。舉例來說,下圖顯示兩個直方圖:
- 左側是經典的常態分佈。
- 右側是經過 Z 分數縮放處理的相同分佈。
對於下圖所示的資料 (僅有模糊的正態分布),Z 分數縮放也是不錯的選擇。
如果資料遵循常態分佈或類似常態分佈的分佈,Z 分數會是個不錯的選擇。
請注意,某些分布情形可能在其範圍內屬於正常範圍,但仍含有極端值異常值。舉例來說,net_worth
特徵中的幾乎所有點都可能剛好落在 3 個標準差內,但此特徵的幾個例子可能會離平均值相差數百個標準差。在這種情況下,您可以結合 Z 分數縮放功能和其他形式的正規化 (通常是裁剪),以處理這種情況。
練習:檢查您的理解程度
假設您的模型會針對名為height
的特徵進行訓練,該特徵會儲存 1,000 萬名女性的成人身高。對於 height
,Z 分數縮放是否是良好的正規化技巧?原因為何?
對數刻度
對數縮放功能會計算原始值的對數。理論上,對數可以是任何底數;實際上,對數縮放通常會計算自然對數 (ln)。
如果資料符合冪律分布,則可使用對數縮放功能。簡單來說,冪律分配如下所示:
X
的低值會產生Y
的極高值。- 隨著
X
值增加,Y
值會迅速下降。因此,X
的值越高,Y
的值就會越低。
電影評分就是冪律分布的絕佳例子。請注意,如下圖所示:
- 有些電影的使用者評分非常高,(
X
的低值會對應Y
的高值)。 - 大多數電影的使用者評分很少。(
X
的值越高,Y
的值就越低)。
記錄縮放會變更分布情形,有助於訓練模型,進而做出更準確的預測。
第二個例子是書籍銷售量符合冪律分布,原因如下:
- 大多數出版書籍的銷量都很少,可能只有一、兩百本。
- 有些書籍的銷量適中,數量達數千。
- 只有少數暢銷書的銷量會超過一百萬本。
假設您要訓練線性模型來找出書籍封面之間的關係,以原始值訓練的線性模型,必須找出書籍銷量達百萬本的書籍封面,比銷量只有 100 本的書籍封面,有 10,000 倍的影響力。不過,記錄所有銷售數據的比例會讓這項工作更容易執行。舉例來說,100 的對數為:
~4.6 = ln(100)
而 1,000,000 的對數為:
~13.8 = ln(1,000,000)
因此,1,000,000 的紀錄只比 100 的紀錄高出大約三倍。 你可能會認為暢銷書封面在某種程度上比銷量不高的書封面更有說服力。
剪輯
裁剪是一種盡量減少極端異常值影響力的技巧。簡單來說,剪輯通常會將離群值的值限制 (減少) 至特定的最大值。剪輯是個奇怪的概念,但卻能帶來非常好的效果。
舉例來說,假設資料集包含名為 roomsPerPerson
的特徵,代表各個房子的房間數量 (總房間數除以住戶數)。下圖顯示,超過 99% 的特徵值符合常態分佈 (大致上,平均值為 1.8,標準差為 0.7)。然而,這個功能包含幾個離群值,其中有些是極端的:
如何盡量減少這些極端離群值的影響?好吧,直方圖並非均勻分佈、常態分佈或冪律分佈。如果您只將 roomsPerPerson
的最大值設為任意值 (例如 4.0) 的上限或剪輯,會發生什麼情況?
將功能值截斷為 4.0 不代表模型會忽略所有大於 4.0 的值。而是表示所有大於 4.0 的值現在都會變成 4.0。這就是 4.0 分數的特殊曲線。儘管如此,經過縮放的功能集現在比原始資料更實用。
等等!您真的可以將每個異常值都降到某個任意上限嗎?訓練模型時答案是
您也可以在套用其他正規化後裁剪值。例如,假設您使用 Z 分數縮放功能,但一些離群值的絕對值遠大於 3。在這種情況下,您可以:
- 將大於 3 的 Z 分數裁剪為 3。
- 將小於 -3 的 Z 分數裁剪為 -3。
剪輯可避免模型在不重要的資料上過度索引。不過,某些異常值其實很重要,因此請謹慎截斷值。
歸一化技術摘要
正規化技巧 | 公式 | 使用時機 |
---|---|---|
線性調整 | $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ | 當地圖項目在固定範圍內均勻分布時。 |
標準分數縮放 | $$ x' = \frac{x - μ}{σ}$$ | 特徵分佈不含極端離群值時。 |
對數刻度 | $$ x' = log(x)$$ | 功能符合電力法規時。 |
剪輯 | 如果 $x > max$,請將 $x' = max$ 設為 $x 如果 $x < min$,請設定 $x' = min$ |
地圖項目含有極端離群值時。 |
練習:測驗您的知識
假設您要開發的模型,是根據資料中心內測量的溫度,預測資料中心的工作效率。資料集中的 temperature
值幾乎都介於 15 和 30 之間 (攝氏),但以下例外:
- 每年一或兩次,在極熱的情況下,
temperature
會記錄 31 到 45 之間的值。 temperature
中的每 1,000 個點都設為 1,000,而非實際溫度。
下列哪項技術適合用於將 temperature
歸一?
1,000 的值有誤,應刪除而非裁剪。
31 到 45 之間的值是有效資料點。 假設資料集未包含足夠的溫度範圍範例,無法訓練模型做出良好預測,那麼對這些值進行裁剪可能會是個不錯的做法。不過,請注意,在推論期間,經過裁剪的模型會對 45 度和 35 度的溫度做出相同的預測。