不太清楚你說的“不匹配”具體指的是什麼。
如果你的意思是訓練集和測試集差異過大,換句話說,資料分佈不同。那麼這實際上是一個過擬合(overfitting)問題。解決過擬合問題,常用的應對手段就是加資料和正則化。
如果你指的是分類編碼不匹配,換句話說,就是訓練集和測試集中的類別變數的取值不匹配——比如,訓練集分類貓、狗,測試集中除了貓、狗之外,還可能有鵝。這取決於你的分類編碼方法。如果你是把動物的種類編碼成潛向量(latent vector),那麼這個不匹配通常並不是問題。如果你是one-hot編碼,那麼你可以對齊(align)或者連線(concat)一下訓練集和測試集,不過,最佳實踐是在預處理資料階段就做好準備。比如,在pandas下使用`CategoricalDtype`:
import pandas as pd
animals_train = pd.DataFrame({"種類": Series(["貓", "狗"]).astype(pd.api.types.CategoricalDtype(categories=["貓", "狗", "鵝"]))})
注意`astype`之後的部分。這樣處理之後one-hot編碼的時候就自然而然是齊整的。
當然,沒有銀彈。因為訓練集上沒有動物是鵝,所以模型對鵝完全是未知的,跑在測試集上,對鵝的預測表現會很差。
不太清楚你說的“不匹配”具體指的是什麼。
如果你的意思是訓練集和測試集差異過大,換句話說,資料分佈不同。那麼這實際上是一個過擬合(overfitting)問題。解決過擬合問題,常用的應對手段就是加資料和正則化。
如果你指的是分類編碼不匹配,換句話說,就是訓練集和測試集中的類別變數的取值不匹配——比如,訓練集分類貓、狗,測試集中除了貓、狗之外,還可能有鵝。這取決於你的分類編碼方法。如果你是把動物的種類編碼成潛向量(latent vector),那麼這個不匹配通常並不是問題。如果你是one-hot編碼,那麼你可以對齊(align)或者連線(concat)一下訓練集和測試集,不過,最佳實踐是在預處理資料階段就做好準備。比如,在pandas下使用`CategoricalDtype`:
import pandas as pd
animals_train = pd.DataFrame({"種類": Series(["貓", "狗"]).astype(pd.api.types.CategoricalDtype(categories=["貓", "狗", "鵝"]))})
注意`astype`之後的部分。這樣處理之後one-hot編碼的時候就自然而然是齊整的。
當然,沒有銀彈。因為訓練集上沒有動物是鵝,所以模型對鵝完全是未知的,跑在測試集上,對鵝的預測表現會很差。