python - 一种热编码保留用于插补的 NA
问题描述
我正在尝试使用 KNN 在 python 中输入分类变量。
为此,一种典型的方法是在之前对变量进行一次热编码。但是 sklearn OneHotEncoder() 不处理 NA,因此您需要将它们重命名为创建单独变量的名称。
可重现的小例子:
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
from sklearn.impute import SimpleImputer
#Create random pandas with categories to impute
data0 = pd.DataFrame(columns=["1","2"],data = [["A",np.nan],["B","A"],[np.nan,"A"],["A","B"]])
原始数据框:
data0
1 2
0 A NaN
1 B A
2 NaN A
3 A B
继续进行一种热编码:
#Rename for sklearn OHE
enc_missing = SimpleImputer(strategy="constant",fill_value="missing")
data1 = enc_missing.fit_transform(data0)
# Perform OHE:
OHE = OneHotEncoder(sparse=False)
data_OHE = OHE.fit_transform(data1)
Data_OHE 现在是一种热编码:
Data_OHE
array([[1., 0., 0., 0., 0., 1.],
[0., 1., 0., 1., 0., 0.],
[0., 0., 1., 1., 0., 0.],
[1., 0., 0., 0., 1., 0.]])
但由于单独的“失踪”类别 - 我没有任何 nans 可以估算了。
我想要的一种热编码的输出
array([[1, 0, np.nan, np.nan],
[0, 1, 1, 0 ],
[np.nan, np.nan, 1, 0 ],
[1, 0, 0, 1 ]
])
这样我就保留了 nans 以供以后估算。
你知道有什么办法吗?
据我了解,这里
和这里的 scikit-learn Github 存储库中已经讨论过这个问题,即让 OneHotEncoder 通过参数自动处理这个handle_missing
问题,但我不确定他们的工作状态。
解决方案
推荐阅读
- machine-learning - 为什么反向传播的梯度检查很慢?
- bash - 通过 Bash 脚本读取文本文件中的行
- r - 为什么R中的这个for循环重复多次?
- python - 高频与 FFT Python
- android - Android O:在设备锁定时拍照
- laravel-5 - 如何从包发现中禁用提供程序?
- caliburn.micro - Caliburn.Micro + MaterialToolkitDialog 未打开 .. : (
- excel - 查找功能跳过下一行
- api - 如何将值传递给 DataAccess 层以存储到 asp.net MVC5 API 中的数据库中?
- vim - 覆盖vim中的python文件类型检测