如何解決機器學習分類編碼後的,訓練和測試集中的不匹配問題?論智2018-06-12 17:07:59

不太清楚你說的“不匹配”具體指的是什麼。

如果你的意思是訓練集和測試集差異過大,換句話說,資料分佈不同。那麼這實際上是一個

過擬合

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編碼的時候就自然而然是齊整的。

如何解決機器學習分類編碼後的,訓練和測試集中的不匹配問題?

當然,沒有銀彈。因為訓練集上沒有動物是鵝,所以模型對鵝完全是未知的,跑在測試集上,對鵝的預測表現會很差。