在做某些实验时,我们通常在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 |
-----------------------
1-热编码将导致:
---------------------------
| Ser | Coupe | Sedan |
---------------------------
| 1 | 1 | 0 |
| 2 | 0 | 1 |
| 3 | 1 | 0 |
---------------------------
在这里,我们的测试集只有2个特性。为每一个新的经销商建立一个模型是没有意义的。在生产中如何处理这样的问题?有没有其他的编码方法可以用来处理分类变量?
发布于 2018-07-25 02:33:36
我将假设您正在使用pandas进行热编码。如果不是,您必须做更多的工作,但逻辑仍然是相同的。
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
由于法拉利不在已知类别的列表中,因此法拉利的所有一个或多个编码条目都是零。如果您在生产数据中发现一种新的汽车类型,则编码该汽车类型的行应全部为0。
发布于 2018-07-25 02:27:04
生产中模型的输入应该与训练中的输入相同。因此,如果在训练过程中,您只需编写4个类别的代码,那么在生产环境中也可以这样做。对缺失的特征使用零。删除在训练过程中未见过的功能。
https://stackoverflow.com/questions/51505295
复制相似问题