python - scikit-learn 的单热编码特征的格式应该是什么?

标签 python python-3.x scikit-learn one-hot-encoding

我正在尝试使用 scikit-learn 库的回归器/分类器。我对单热编码功能的格式有点困惑,因为我可以将数据帧或 numpy 数组发送到模型。假设我有名为“a”、“b”和“c”的分类特征。我是否应该将它们放在单独的列中(使用 pandas.get_dummies() ),如下所示:

<表类="s-表"> <头> 一个 b c <正文> 1 1 1 1 0 1 0 0 1

或者像这样(全部合并)

<表类="s-表"> <头> 合并 <正文> 1,1,1 1,0,1 0,0,1

以及如何告诉 scikit-learn 模型这些是单热编码的分类特征?

最佳答案

您不能将包含合并列表的特征直接传递给模型。您应该首先将单热编码到单独的列中:

  • 如果您只是想要快速简单的东西,get_dummies适合开发,但我读过的大多数资料通常首选以下方法。
  • 如果您想对输入数据进行编码,请使用 OneHotEncoder (OHE) 对一个或多个列进行编码,然后与您的其他功能合并。 OHE 可以很好地控制输出格式、存储中间数据并进行错误处理。适合生产。
  • 如果您需要对单个列(通常但不限于标签)进行编码,请使用 LabelBinarizer单热编码具有单个值的列,或使用 MultiLabelBinarizer对具有多个值的列进行一次性编码。

一旦你有了单热编码数据/标签,你就不需要“告诉”模型某些特征是单热的。您只需使用 clf.fit(X_train, y_train) 在数据集上训练模型并使用 clf.predict(X_test) 进行预测。

OHE 示例

from sklearn.preprocessing import OneHotEncoder
import pandas as pd

X = [['Male', 1], ['Female', 3], ['Female', 2]]
ohe = OneHotEncoder(handle_unknown='ignore')
X_enc = ohe.fit_transform(X).toarray()

# Convert to dataframe if you need to merge this with other features:
df = pd.DataFrame(X_enc, columns=ohe.get_feature_names())

MLB 示例

from sklearn.preprocessing import MultiLabelBinarizer
import pandas as pd

df = pd.DataFrame({
   'style': ['Folk', 'Rock', 'Classical'],
   'instruments': [['guitar', 'vocals'], ['guitar', 'bass', 'drums', 'vocals'], ['piano']]
})

mlb = MultiLabelBinarizer()
encoded = mlb.fit_transform(df['instruments'])
encoded_df = pd.DataFrame(encoded, columns=mlb.classes_, index=df['instruments'].index)

# Drop old column and merge new encoded columns
df = df.drop('instruments', axis=1)
df = pd.concat([df, encoded_df], axis=1, sort=False)

关于python - scikit-learn 的单热编码特征的格式应该是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69228598/

相关文章:

python - 如何在 sklearn 中使用 SVC 运行 RFECV

python - 了解机器学习、NLP : Text Classification using scikit-learn, python 和 NLTK

python - 使用其他属性名称的值创建枚举

python - Mechanize 没有看到一些隐藏的表单输入?

用于将 float(64) 类型转换为字节的 python 轻量级解决方案

python - 相对于索引标签的基于整数的偏移量

python - 比较 2 个 ML 模型的性能准确性之间的差异是否具有统计显着性

python - 不同 Flask 实例中的 url_for

python - 如何添加wx.BoxSizer边框?

python - 在没有 SSL 证书验证的情况下使用 urllib 发布数据