Ros*_*ent 4 python machine-learning feature-selection one-hot-encoding
在进行某些实验时,我们通常训练70%,然后测试33%。但是,当您的模型投入生产时会发生什么?可能会发生以下情况:
训练集:
-----------------------
| Ser |Type Of Car |
-----------------------
| 1 | Hatchback |
| 2 | Sedan |
| 3 | Coupe |
| 4 | SUV |
-----------------------
Run Code Online (Sandbox Code Playgroud)
经过一键热编码后,我们得到的是:
-----------------------------------------
| 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 |
-----------------------------------------
Run Code Online (Sandbox Code Playgroud)
我的模型已经过培训,现在我想在多个经销商中部署它。该模型针对4个特征进行了训练。现在,某个经销商仅销售轿车和双门轿跑车:
测试集
-----------------------
| Ser |Type Of Car |
-----------------------
| 1 | Coupe |
| 2 | Sedan |
-----------------------
Run Code Online (Sandbox Code Playgroud)
一键编码会导致:
---------------------------
| Ser | Coupe | Sedan |
---------------------------
| 1 | 1 | 0 |
| 2 | 0 | 1 |
| 3 | 1 | 0 |
---------------------------
Run Code Online (Sandbox Code Playgroud)
在这里,我们的测试集只有2个功能。为每个新经销商建立模型是没有意义的。生产中如何处理此类问题?还有其他编码方法可用于处理分类变量吗?
我假设您正在使用熊猫进行一次热编码。如果不是,则必须做更多的工作,但是逻辑仍然相同。
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)
Run Code Online (Sandbox Code Playgroud)
结果是
Sedan Coupe Limo
0 1.0 0.0 0.0 # Sedan entry
1 0.0 0.0 0.0 # Ferrari entry
Run Code Online (Sandbox Code Playgroud)
由于Ferrari不在已知类别列表中,因此Ferrari的所有“一”编码条目均为零。如果在生产数据中找到新的汽车类型,则编码该汽车类型的行应全部为0。
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |