透過統計和視覺化技術檢查資料後,您應以更有效的方式轉換資料,以利模型訓練。正規化的目標是將特徵轉換為相似的尺寸。舉例來說,請考量以下兩項功能:
- 地圖項目
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。
如果您沒有將 Feature C
和 Feature 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 分數縮放處理的相同分佈。
![圖 4. 兩個直方圖:兩者都顯示常態分佈,且分佈方式相同。第一個直方圖包含原始資料,平均值為 200,標準差為 30。第二個直方圖包含第一個分布的 Z 分數版本,平均值為 0,標準差為 1。](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling_classic.png?authuser=4&hl=zh-tw)
對於下圖所示的資料 (僅有模糊的正態分布),Z 分數縮放也是不錯的選擇。
![圖 5. 兩個形狀相同的直方圖,每個圖表都顯示陡峭上升至平坦區域,然後快速下降,接著逐漸衰減。一張直方圖顯示原始資料的分布情形,另一張直方圖則顯示經 Z 分數縮放處理後的原始資料分布情形。兩個直方圖的 X 軸值差異很大。原始資料直方圖的範圍為 0 到 29,000,而 Z 分數比例直方圖的範圍則為 -1 到約 +4.8](https://developers.google.cn/static/machine-learning/crash-course/images/z-scaling-non-classic-normal-distribution.png?authuser=4&hl=zh-tw)
如果資料遵循常態分佈或類似常態分佈的分佈,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)。不過,這項功能含有幾個異常值,其中有些異常值非常極端:
![圖 7. 顯示 roomsPerPerson 的圖表,其中幾乎所有值都聚集在 0 到 4 之間,但有一個非常長的尾端,一直延伸到每人 17 間房](https://developers.google.cn/static/machine-learning/crash-course/images/PreClipping.png?authuser=4&hl=zh-tw)
如何盡量減少這些極端離群值的影響?好吧,直方圖並非均勻分佈、常態分佈或冪律分佈。如果您只將 roomsPerPerson
的最大值設為任意值 (例如 4.0) 的上限或剪輯,會發生什麼情況?
![顯示 roomsPerPerson 的圖表,其中所有值介於 0 和 4.0 之間。圖表呈現鐘形,但 4.0 處有異常的山丘](https://developers.google.cn/static/machine-learning/crash-course/images/Clipping.png?authuser=4&hl=zh-tw)
將功能值截斷為 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 小於 min$,請將 $x' 設為 min$ |
當特徵包含極端離群值時。 |
練習:測驗您的知識
假設您要開發的模型,是根據資料中心內測得的溫度,預測資料中心的工作效率。資料集中的 temperature
值幾乎都介於 15 和 30 之間 (攝氏),但以下例外:
- 每年一或兩次,在極熱的情況下,
temperature
會記錄 31 到 45 之間的值。 temperature
中的每 1,000 個點都設為 1,000,而非實際溫度。
下列哪項技術適合用於將 temperature
歸一?
值為 1,000 是錯誤,應予以刪除,而非裁剪。
31 到 45 之間的值是有效資料點。 假設資料集未包含足夠的溫度範圍範例,無法訓練模型做出良好預測,那麼對這些值進行裁剪可能會是個不錯的做法。不過,請注意,在推論期間,經過裁剪的模型會對 45 度和 35 度的溫度做出相同的預測。