首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当训练和测试中的特征数量不同时,如何处理生产环境中的One-Hot编码?

当训练和测试中的特征数量不同时,如何处理生产环境中的One-Hot编码?
EN

Stack Overflow用户
提问于 2018-07-25 02:24:50
回答 2查看 1.6K关注 0票数 5

在做某些实验时,我们通常在70%上进行训练,在33%上进行测试。但是,当你的模型投入生产时会发生什么呢?可能会发生以下情况:

训练集:

代码语言:javascript
复制
-----------------------
| Ser |Type Of Car    |
-----------------------
|  1  | Hatchback     |
|  2  | Sedan         |
|  3  | Coupe         |
|  4  | SUV           |
-----------------------

在一次热编码之后,我们得到的结果如下:

代码语言:javascript
复制
-----------------------------------------
| 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个特征进行了训练。现在,某经销商只销售轿车和跑车:

测试集:

代码语言:javascript
复制
-----------------------
| Ser |Type Of Car    |
-----------------------
|  1  | Coupe         |
|  2  | Sedan         |
-----------------------

1-热编码将导致:

代码语言:javascript
复制
---------------------------
| Ser | Coupe     | Sedan |
---------------------------
|  1  |     1     |   0   |
|  2  |     0     |   1   |
|  3  |     1     |   0   |
---------------------------

在这里,我们的测试集只有2个特性。为每一个新的经销商建立一个模型是没有意义的。在生产中如何处理这样的问题?有没有其他的编码方法可以用来处理分类变量?

EN

回答 2

Stack Overflow用户

发布于 2018-07-25 02:33:36

我将假设您正在使用pandas进行热编码。如果不是,您必须做更多的工作,但逻辑仍然是相同的。

代码语言:javascript
复制
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)

结果是

代码语言:javascript
复制
    Sedan   Coupe   Limo
0   1.0      0.0    0.0    # Sedan entry
1   0.0      0.0    0.0    # Ferrari entry

由于法拉利不在已知类别的列表中,因此法拉利的所有一个或多个编码条目都是零。如果您在生产数据中发现一种新的汽车类型,则编码该汽车类型的行应全部为0。

票数 6
EN

Stack Overflow用户

发布于 2018-07-25 02:27:04

生产中模型的输入应该与训练中的输入相同。因此,如果在训练过程中,您只需编写4个类别的代码,那么在生产环境中也可以这样做。对缺失的特征使用零。删除在训练过程中未见过的功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51505295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档