Spyder(python 3.7)
我在这里遇到以下错误。我已经从anaconda提示符下更新了所有库。但是无法找到问题的解决方案。
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
Traceback (most recent call last):
File "<ipython-input-4-05deb1f02719>", line 2, in <module>
onehotencoder = OneHotEncoder(categorical_features = [1])
TypeError: __init__() got an unexpected keyword argument 'categorical_features'
答案 0 :(得分:11)
因此,根据您的代码,您必须:
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.compose import ColumnTransformer
# Country column
ct = ColumnTransformer([("Country", OneHotEncoder(), [1])], remainder = 'passthrough')
X = ct.fit_transform(X)
# Male/Female
labelencoder_X = LabelEncoder()
X[:, 2] = labelencoder_X.fit_transform(X[:, 2])
了解了如何删除第一个LabelEncoder,您不再需要在列上同时应用编码的标签和一个热编码器。
(我假设您的示例来自ML Udemy课程,第一列是国家/地区列表,第二列是男性/女性二进制选择)
答案 1 :(得分:4)
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X=np.array(columnTransformer.fit_transform(X),dtype=np.str)
由于最新版本的sklearn库删除了onehotencoder类的 categorical_features 参数。建议将ColumnTransformer类用于分类数据集。有关进一步的说明,请参阅sklearn的官方文档。
答案 2 :(得分:2)
根据documentation,这是__init__
行:
class sklearn.preprocessing.OneHotEncoder(categories='auto', drop=None, sparse=True, dtype=<class 'numpy.float64'>, handle_unknown='error')
您可以看到init没有获得变量categorical_features
您有一个类别标志:
类别“自动”或类似数组的列表,默认=“自动” 每个功能的类别(唯一值):
“自动”:根据训练数据自动确定类别。
list:Categories [i]保存在第i列中期望的类别。 传递的类别不应在内部混合字符串和数字值 单一功能,如果是数值,则应排序。
使用的类别可以在 categories _ 属性中找到。
属性:数组的 categories_list 每个功能的类别 在拟合过程中确定(按X和 对应于transform的输出)。这包括 下拉列表中指定的类别(如果有)。
答案 3 :(得分:2)
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn.compose import ColumnTransformer
label_encoder_x_1 = LabelEncoder()
X[: , 2] = label_encoder_x_1.fit_transform(X[:,2])
transformer = ColumnTransformer(
transformers=[
("OneHot", # Just a name
OneHotEncoder(), # The transformer class
[1] # The column(s) to be applied on.
)
],
remainder='passthrough' # donot apply anything to the remaining columns
)
X = transformer.fit_transform(X.tolist())
X = X.astype('float64')
像魅力一样工作:)
答案 4 :(得分:2)
假设这是Udemy的ML课程的问题 完整的代码 我确实按照上面评论中的Antoine Jaussoin的建议用列变压器替换了标签编码器1。
分类数据
from sklearn.preprocessing import LabelEncoder,OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer([("Geography", OneHotEncoder(), [1])], remainder = 'passthrough')
X = ct.fit_transform(X)
您的“性别”列现在将具有索引
labelencoder_x_2=LabelEncoder()
X[:,4]=labelencoder_x_2.fit_transform(X[:,4])
避免虚拟变量陷阱
X=X[:, 1:]
答案 5 :(得分:0)
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
# remove categorical_features, it works 100% perfectly
onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()
X = X[:, 1:]
答案 6 :(得分:0)
您需要在sklearn上添加另一个调用类,这将消除1列以避免假人陷阱。
digraph G {
"DUT0" -> "DUT1" [headlabel="1", taillabel="2"];
"DUT1":n -> "DUT1" [ headlabel="3"];
}
祝您工作愉快!
答案 7 :(得分:0)
这只是onehotencoder的一个扩展。 如果X有很多列。
ct = ColumnTransformer([("encoder", OneHotEncoder(), list(categorical_features))], remainder = 'passthrough')
X = ct.fit_transform(X)
答案 8 :(得分:0)
替换以下代码
# onehotencoder = OneHotEncoder(categorical_features = [1])
# X = onehotencoder.fit_transform(X).toarray()
# X = X[:, 1:]
具有以下代码段,并且您的代码必须
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])
columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [1])], remainder = 'passthrough')
X = np.array(columnTransformer.fit_transform(X), dtype = np.float64)
X = X[:, 1:]
假设您正在从udemy学习深度学习。
答案 9 :(得分:0)
R1R2
X = np.array(X,dtype = float)
只需添加额外的一行即可将其从对象数组中转换出来。