One Hot Encoding 保留 NA 用于插补
One Hot Encoding preserve the NAs for imputation
我正在尝试使用 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 存储库 here 中讨论过的内容
和 here,即让 OneHotEncoder 使用 handle_missing
参数自动处理这个问题,但我不确定他们的工作状态。
OneHotEncoder
中缺失值的处理最终合并到 PR17317 中,但它只是将缺失值视为一个新类别(如果我理解正确的话,没有其他处理选项) ).
中描述了一种手动方法。由于上述 PR,现在第一步并不是绝对必要的,但也许填充自定义文本会更容易找到该列?
我正在尝试使用 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 存储库 here 中讨论过的内容
和 here,即让 OneHotEncoder 使用 handle_missing
参数自动处理这个问题,但我不确定他们的工作状态。
OneHotEncoder
中缺失值的处理最终合并到 PR17317 中,但它只是将缺失值视为一个新类别(如果我理解正确的话,没有其他处理选项) ).