python - 在大量分类变量上使用 get_dummies() 和 OneHotEncoding
问题描述
在大多数学术示例中,我们曾经使用get_dummies()
or来转换分类特征OneHotEncoding()
。假设我想使用 Country 作为特征,并且在数据集中我们有 100 个独特的国家。当我们申请get_dummies()
或OneHotEncoding()
在国家/地区时,我们将获得 100 个列,模型将使用 100 个国家/地区列 + 其他特征进行训练。
可以说,我们已经将该模型部署到生产中,并且我们只收到了 10 个国家/地区。get_dummies()
当我们使用or对数据进行预处理时OneHotEncoding()
,模型将无法进行预测,因为“训练的特征模型数量与传递的特征不匹配”,因为我们正在传递 10 个国家/地区列 + 其他特征。
你能帮我理解如何处理这种情况吗?如何处理多列中的大量分类变量可以在模型构建中进行预处理。
解决方案
由于您描述的原因,该pandas.get_dummies()
功能确实不应该在部署中使用。不过,scikit-learn 的 OneHotEncoder 可以很好地处理这种情况:
from sklearn import preprocessing
import pandas as pd
ohe = preprocessing.OneHotEncoder(handle_unknown='ignore')
X_train = pd.DataFrame({'country':['USA', 'Russia', 'China', 'Spain']})
X_test = pd.DataFrame({'country':['Russia', 'Ukraine', 'China', 'Russia']})
ohe.fit(X_train)
ohe.transform(X_test).toarray()
array([[0., 1., 0., 0.],
[0., 0., 0., 0.],
[1., 0., 0., 0.],
[0., 1., 0., 0.]])
(在这里我设置handle_unknown='ignore'
了新标签('Ukraine')被编码为全零。如果设置handle_unknown='error'
(这是默认设置),新标签将引发错误。)因此,OneHotEncoder 可以处理不同的标签集测试集。
推荐阅读
- voila - 瞧,jupyter notebook - 找不到模板
- python - 即使在 gpu=False 时,easyOCR 也会分配 GPU
- couchdb - 我创建了非管理员用户,但它没有加载任何数据库,这可能是什么原因?
- c# - CLR Host - 如何使用任意方法签名执行函数
- c# - Node js Socket Server错误握手失败由于意外的数据包格式
- python - 无法理解 openpyxl 轴属性:axId 和 crosses
- scala - 当 spark-submit spark version 3.0.2, scala version 2.12.10 时 ClassNotFoundException scala.runtime.LambdaDeserialize
- linux - 使用 Unix 命令计算多个文件夹中的文件数
- asp.net - 在 Asp.net 中,“发布”Ajax 请求将“获取”
- javascript - 如何从 Firebase 获取数据到我的 React 应用程序