One-Hot 编码问题 - 我的问题的概念和解决方案(Kaggle 数据集)
One-Hot Encoding Question - Concept and Solution to My Problem (Kaggle Dataset)
我正在做 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)
So my first question is, when it comes to one - hot encoding, shouldn't NAs just be treated like any other category within a particular column?
NA 只是缺少数据,因此您可以粗略地 将具有 NA 的行视为不完整。您可能会发现自己正在处理一个数据集,其中 NA 出现在一半的行中,并且需要一些巧妙的特征工程来弥补这一点。这样想:如果一个热编码是一种表示二进制状态的简单方法(例如 is_male、salary_is_less_than_100000 等),那么 NaN/null 是什么意思?你手上有点像薛定谔的猫。只要不破坏数据集大小,您通常可以安全地删除 NA。您愿意处理的数据丢失量完全取决于具体情况(对于练习来说可能没问题)。
And second question is, if i want to remove these NAs, what's the most efficient way? I tried imputation, but it looks like that only works for numbers?
我可以建议 this。
我正在做 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)
So my first question is, when it comes to one - hot encoding, shouldn't NAs just be treated like any other category within a particular column?
NA 只是缺少数据,因此您可以粗略地 将具有 NA 的行视为不完整。您可能会发现自己正在处理一个数据集,其中 NA 出现在一半的行中,并且需要一些巧妙的特征工程来弥补这一点。这样想:如果一个热编码是一种表示二进制状态的简单方法(例如 is_male、salary_is_less_than_100000 等),那么 NaN/null 是什么意思?你手上有点像薛定谔的猫。只要不破坏数据集大小,您通常可以安全地删除 NA。您愿意处理的数据丢失量完全取决于具体情况(对于练习来说可能没问题)。
And second question is, if i want to remove these NAs, what's the most efficient way? I tried imputation, but it looks like that only works for numbers?
我可以建议 this。