为什么不只是缓存或将列从结果get_dummies中保存为变量col_list,然后使用pd.reindex来对齐火车与测试数据集...。例如:
df = pd.get_dummies(data)
col_list = df.columns.tolist()
new_df = pd.get_dummies(new_data)
new_df = new_df.reindex(columns=col_list).fillna(0.00)
0
为什么不只是缓存或将列从结果get_dummies中保存为变量col_list,然后使用pd.reindex来对齐火车与测试数据集...。例如:
df = pd.get_dummies(data)
col_list = df.columns.tolist()
new_df = pd.get_dummies(new_data)
new_df = new_df.reindex(columns=col_list).fillna(0.00)
0
OneHotEncoder
无法直接处理字符串值。如果名义特征是字符串,则需要首先将它们映射为整数。
pandas.get_dummies
则相反。默认情况下,除非指定了列,否则它仅将字符串列转换为一键表示。
0
对于机器学习,您几乎肯定要使用sklearn.OneHotEncoder
。对于其他任务(例如简单分析),您可以使用pd.get_dummies
,这更加方便。
请注意, sklearn.OneHotEncoder
已更新为最新版本,因此它确实接受分类变量的字符串以及整数。
关键是sklearn
编码器创建了一个持久的函数,然后可以将其应用于使用相同类别变量且结果一致的新数据集 。
from sklearn.preprocessing import OneHotEncoder
# Create the encoder.
encoder = OneHotEncoder(handle_unknown="ignore")
encoder.fit(X_train) # Assume for simplicity all features are categorical.
# Apply the encoder.
X_train = encoder.transform(X_train)
X_test = encoder.transform(X_test)
请注意,我们如何将通过X_train
创建的相同编码器应用于新数据集X_test
。
试想,如果发生了什么X_test
包含不同水平比X_train
它的变量之一。例如,假设X_train["color"]
仅包含"red"
和"green"
,但是除了这些之外, X_test["color"]
有时还包含"blue"
。
如果我们使用pd.get_dummies
,则X_test
将以X_train
没有的另外一个"color_blue"
列X_train
,并且不一致之处可能会在以后破坏我们的代码,特别是如果我们将X_test
馈送到我们训练的sklearn
模型上时X_train
。
而且,如果我们要在生产中处理这样的数据,而我们一次只收到一个示例,则不会使用pd.get_dummies
。
另一方面,使用sklearn.OneHotEncoder
,一旦创建了编码器,我们就可以重复使用它来每次产生相同的输出,并且只针对"red"
和"green"
。并且我们可以显式控制遇到新级别"blue"
时发生的情况:如果我们认为这是不可能的,则可以使用handle_unknown="error"
告诉它引发handle_unknown="error"
;否则,我们可以告诉它继续,只需使用handle_unknown="ignore"
将红色和绿色列设置为0。
0
我正在学习将机器学习分类器将分类变量转换为数字的不同方法。我遇到了
pd.get_dummies
方法和sklearn.preprocessing.OneHotEncoder()
,我想看看它们在性能和用法上有何不同。我在https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-上找到了有关如何使用
OneHotEncoder()
的教程功能/,因为sklearn
文档对该功能的帮助不是sklearn
。我有一种感觉,我做得不正确...但是有人可以解释在
sklearn.preprocessing.OneHotEncoder()
上使用pd.dummies
利弊吗,反之亦然?我知道OneHotEncoder()
为您提供了一个稀疏矩阵,但OneHotEncoder()
,我不确定它是如何使用的以及与pandas
方法相比有什么好处。我使用效率低下吗?