在进行某些实验时,我们通常训练70%,然后进行33%的测试。但是,当您的模型投入生产时会发生什么?可能会发生以下情况:
训练集:
-----------------------
| Ser |Type Of Car |
-----------------------
| 1 | Hatchback |
| 2 | Sedan |
| 3 | Coupe |
| 4 | SUV |
-----------------------
在进行一次热编码后,这就是我们得到的:
-----------------------------------------
| Ser | Hatchback | Sedan | Coupe | SUV |
-----------------------------------------
| 1 | 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 | 0 |
| 3 | 0 | 0 | 1 | 0 |
| 4 | 0 | 0 | 0 | 1 |
-----------------------------------------
我的模型已经过培训,现在我想在多个经销商中部署它。 该模型针对4个特征进行了训练。现在,某个经销商只销售轿车和双门轿跑车:
测试集:
-----------------------
| Ser |Type Of Car |
-----------------------
| 1 | Coupe |
| 2 | Sedan |
-----------------------
一键编码结果为:
---------------------------
| Ser | Coupe | Sedan |
---------------------------
| 1 | 1 | 0 |
| 2 | 0 | 1 |
| 3 | 1 | 0 |
---------------------------
这里我们的测试仪只有2个功能。为每个新经销商建立模型是没有意义的。生产中如何处理此类问题?还有其他编码方法可用于处理分类变量吗?
答案 0 :(得分:4)
我假设您正在使用熊猫进行一次热编码。如果不是,则您需要做更多的工作,但是逻辑仍然相同。
import pandas as pd
known_categories = ['Sedan','Coupe','Limo'] # from training set
car_type = pd.Series(['Sedan','Ferrari']) # new category in production, 'Ferrari'
car_type = pd.Categorical(car_type, categories = known_categories)
pd.get_dummies(car_type)
结果是
Sedan Coupe Limo
0 1.0 0.0 0.0 # Sedan entry
1 0.0 0.0 0.0 # Ferrari entry
由于Ferrari不在已知类别的列表中,所以Ferrari的所有一个或所有编码条目均为零。如果您在生产数据中找到了新的汽车类型,则编码该汽车类型的行应全部为0。
答案 1 :(得分:0)
生产中模型的输入应与培训期间的输入相同。因此,如果在培训期间您一口气编码了4个类别-在制作中也要这样做。使用零表示缺少的功能。删除您在训练期间未见过的功能。