Label Encoder與onehotencoder 用途
老師您好, 依照教材說的Label Encoder適用在種類少於3的情況下, 但如果數據資料裡面已經有n個欄位, 每個欄位裡的種類都超過3種, 如果再用onehotencoder將每個種類變成0,1這樣資料呈現不就變得太過於冗長嗎? 在後續的hot map呈現上是否會很混亂呢?以及在confusion matrix呈現出的值是如何呈現的呢(因為這樣X值就被拆分成太多種)? 謝謝
回答列表
-
2022/02/08 下午 03:13Johnny贊同數:0不贊同數:0留言數:2
同學你好: > 如果數據資料裡面已經有n個欄位, 每個欄位裡的種類都超過3種, 如果再用onehotencoder將每個種類變成0,1這樣資料呈現不就變得太過於冗長 沒錯!你提到了 One-Hot Encoding 一個非常重要的問題 —— **Curse of Dimension**。 在繼續深入討論之前,我們先釐清 Label Encoding 與 One-Hot Encoding 的區別。 ### Label Encoding (LE) | ID | Country | Salary | Age | | ------ | ------ | ------ | ------ | | 0 | Taiwan | 35000 | 25 | | 1 | Japan | 38000 | 30 | | 2 | USA | 40000 | 32 | | 3 | Korea | 32000 | 21 | | 4 | USA | 65000 | 25 | | 5 | Japan | 38000 | 55 | | 6 | Japan | 38000 | 50 我們的資料集中經常會包含類別型資料 (如上表的 Country) 需要進行編碼,稱為 Categorical Encoding。以 LE 進行編碼時,就是很單純的給予每一個類別一個編號: | Country | Encoding | | ------ | ------ | | Taiwan | 0 | | Japan | 1 | | USA | 2 | | Korea | 3 | 然而,這樣的編碼方式造成一些問題:原來的 Country 之間是沒有「大小順序」(Nominal Variable) 的,但是編碼完後,卻有了大小順序的關係 (Ordinal Variable)。甚至 Japan (1) 與 Korea (3) 的平均會是 USA (2)。 為了避免這樣的問題產生,One-Hot Encoding 就派上用場了! ### One-Hot Encoding (OHE) OHE 透過建立新的特徵,給予每一個 Unique Value 一個編碼: | Country | Encoding 0 | Encoding 1 | Encoding 2 | Encoding 3 | | ------ | ------ | ------ | ------ | ------ | | Taiwan | 1 | 0 | 0 | 0 | | Japan | 0 | 1 | 0 | 0 | | USA | 0 | 0 | 1 | 0 | | Korea | 0 | 0 | 0 | 1 | 這樣一來,每一個 Country 有自己的編碼方式,也避免了 LE 所產生的問題。 因此,通常在決定 Categorical Feature 要用 LE 或 OHE 時,通常主要根據這個 Feature **是否具有順序性 (Ordinal or Nominal)** 。 --- 接著,我們討論 OHE 會遇到的問題。如同你所提到的,使用 OHE 處理一個 High Cardinality Feature (就是包含很多 Unique Value 的 Feature) 時,會導致整個 Dataset 產生許多新的特徵 (維度),進而造成 **Curse of Dimensionality** 的問題。這些多出來的維度中,包含非常多的 0,不僅導致模型更難訓練,也使得在後續分析過程變得複雜。 解決 Curse of Dimensionality 問的方法有很多種,但不外乎就是兩類:降維演算法、不同的編碼方式。 - 降維演算法: 許多人在做完 OHE 後,通常會在採用一些降維演算法 (PCA、MCA),減少資料集的維度。 - 不同的編碼方式: 為了避免 OHE 所造成維度詛咒,許多 Kaggler 也會採用不同的編碼方式 (Frenquent Encoding、Mean Encoding、Target Encoding)。甚至也會借用一些 Deep Learning 在 NLP 上的技巧,使用 Embedding 進行編碼。[Smarter Ways to Encode Categorical Data for Machine Learning](https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159) 文章中介紹了許多機器學習中常用的編碼方式。 ### 參考資料 - [One-Hot Encoding vs. Label Encoding using Scikit-Learn](https://www.analyticsvidhya.com/blog/2020/03/one-hot-encoding-vs-label-encoding-using-scikit-learn/) - [Choosing the right Encoding method-Label vs OneHot Encoder](https://towardsdatascience.com/choosing-the-right-encoding-method-label-vs-onehot-encoder-a4434493149b) - [Dealing with features that have high cardinality](https://towardsdatascience.com/dealing-with-features-that-have-high-cardinality-1c9212d7ff1b) - [When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?](https://datascience.stackexchange.com/questions/9443/when-to-use-one-hot-encoding-vs-labelencoder-vs-dictvectorizor) - [PCA For categorical features?](https://stackoverflow.com/questions/40795141/pca-for-categorical-features) - [How to deal with categorical feature of very high cardinality?](https://datascience.stackexchange.com/questions/10509/how-to-deal-with-categorical-feature-of-very-high-cardinality) - [Encoding of categorical variables with high cardinality](https://stats.stackexchange.com/questions/411767/encoding-of-categorical-variables-with-high-cardinality) - [Smarter Ways to Encode Categorical Data for Machine Learning](https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159)