gpt4 book ai didi

python - onehotencoder 的 sklearn 掩码不起作用

转载 作者:太空狗 更新时间:2023-10-30 02:43:16 25 4
gpt4 key购买 nike

考虑如下数据:

from sklearn.preprocessing import OneHotEncoder
import numpy as np
dt = 'object, i4, i4'
d = np.array([('aaa', 1, 1), ('bbb', 2, 2)], dtype=dt)

我想使用 OHE 功能排除文本列。

为什么以下不起作用?

ohe = OneHotEncoder(categorical_features=np.array([False,True,True], dtype=bool))       
ohe.fit(d)
ValueError: could not convert string to float: 'bbb'

它在 documentation 中说:

categorical_features: “all” or array of indices or mask :
Specify what features are treated as categorical.
‘all’ (default): All features are treated as categorical.
array of indices: Array of categorical feature indices.
mask: Array of length n_features and with dtype=bool.

我正在使用 mask ,但它仍会尝试转换为 float 。

甚至使用

ohe = OneHotEncoder(categorical_features=np.array([False,True,True], dtype=bool), 
dtype=dt)
ohe.fit(d)

同样的错误。

还有“索引数组”的情况:

ohe = OneHotEncoder(categorical_features=np.array([1, 2]), dtype=dt)        
ohe.fit(d)

最佳答案

您应该明白,Scikit-Learn 中的所有估算器都是专为数字输入而设计的。因此,从这个角度来看,以这种形式保留文本列是没有意义的。您必须将该文本列转换为数字形式,或者将其删除。

如果您从 Pandas DataFrame 获得数据集 - 您可以查看这个小包装器:https://github.com/paulgb/sklearn-pandas .它将帮助您同时转换所有需要的列(或以数字形式保留一些行)

import pandas as pd
import numpy as np
from sklearn_pandas import DataFrameMapper
from sklearn.preprocessing import OneHotEncoder

data = pd.DataFrame({'text':['aaa', 'bbb'], 'number_1':[1, 1], 'number_2':[2, 2]})

# number_1 number_2 text
# 0 1 2 aaa
# 1 1 2 bbb

# SomeEncoder here must be any encoder which will help you to get
# numerical representation from text column
mapper = DataFrameMapper([
('text', SomeEncoder),
(['number_1', 'number_2'], OneHotEncoder())
])
mapper.fit_transform(data)

关于python - onehotencoder 的 sklearn 掩码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34089906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com