[我正在Kaggle中进行练习,它在分类变量的模块上,特别是一个-热门编码部分:https://www.kaggle.com/alexisbcook/categorical-variables我在整个工作簿中都做得很好,而我正在尝试解决的最后一部分,最后是应用一个编码器来预测房屋销售价值的可选部分。我已经制定了以下代码`,但在粗体行中:OH_cols_test = pd.DatFrame(OH_encoder.fit_transform(X_test [low_cardinality_cols]))),我收到输入包含NaN的错误消息。
所以,我的第一个问题是,当涉及到-热编码时,是否不应该将NA像特定列中的任何其他类别一样对待?第二个问题是,如果我想删除这些NA,最有效的方法是什么?我尝试了归因,但看起来仅适用于数字吗?有人可以让我知道我在哪里错吗?非常感谢!:
from sklearn.preprocessing import OneHotEncoder
# Use as many lines of code as you need!
OH_encoder = OneHotEncoder(handle_unknown='ignore', sparse=False)
**OH_cols_test = pd.DataFrame(OH_encoder.fit_transform(X_test[low_cardinality_cols]))**
# One-hot encoding removed index; put it back
OH_cols_test.index = X_test.index
# Remove categorical columns (will replace with one-hot encoding)
num_X_test = X_test.drop(object_cols, axis=1)
# Add one-hot encoded columns to numerical features
OH_X_test = pd.concat([num_X_test, OH_cols_test], axis=1)
所以,我的第一个问题是,当涉及到-热编码时,是否不应该将NA像特定列中的任何其他类别一样对待?
NA仅缺少数据,因此您可以宽松地将具有NA的行视为不完整。您可能会发现自己正在处理NA出现在一半行中的数据集,这将需要一些聪明的功能工程来弥补这一点。这样想:如果一种热编码是表示二进制状态的简单方法(例如is_male,salary_is_less_than_100000等),那么NaN / null是什么意思?那里您手上有一只薛定inger的猫。只要不破坏数据集的大小,通常就可以放心地删除NA。您愿意处理的数据丢失量完全是基于情况的(对于练习来说可能很好)。
第二个问题是,如果我想删除这些NA,最有效的方法是什么?我尝试了归因,但看起来仅适用于数字吗?
我可以建议this。