不太清楚你說的“不匹配”具體指的是什麼。
如果你的意思是訓練集和測試集差異過大,換句話說,資料分佈不同。那麼這實際上是一個
過擬合
(
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編碼的時候就自然而然是齊整的。
當然,沒有銀彈。因為訓練集上沒有動物是鵝,所以模型對鵝完全是未知的,跑在測試集上,對鵝的預測表現會很差。