首页 > 解决方案 > 如何更改我的 OneHotEncoder 以准备更改

问题描述

所以目前我编码我的分类特征的方式是这样的:

# Import the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('weatherHistory_edited.csv')
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, 6].values

# Encode categorical features
from sklearn.preprocessing import LabelEncoder, OneHotEncoder

labelencoder_X = LabelEncoder()
X[:, 5] = labelencoder_X.fit_transform(X[:,5])
onehotencoder = OneHotEncoder(categorical_features= [5])
X = onehotencoder.fit_transform(X).toarray()

这很好用,唯一的事情是我收到警告,即 categorical_features 是 0.20 版中已弃用的关键字,将在 0.22 版中删除。您可以改用 ColumnTransformer。

所以我将最后一段代码切换为:

# Encode categorical features
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

columntransformer = ColumnTransformer([("one_hot_encoder", OneHotEncoder(), [5])], remainder= "passthrough")
X = np.array(columntransformer.fit_transform(X))

现在,当我使用此代码时,我没有收到错误,但我的 X 数组完全搞砸了,甚至变成了一个奇怪的元组。

更奇怪的是,当使用不同的数据集时,该代码似乎确实有效。例子:

# Import the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[:, :-1].values
Y = dataset.iloc[:, 4].values

# Encode categorical features
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder

columntransformer = ColumnTransformer([("one_hot_encoder", OneHotEncoder(), [3])], remainder= "passthrough")
X = np.array(columntransformer.fit_transform(X))

在此示例中,X 值获得预期值。

我将示例数据集上传到公共存储库,以便您可以重新创建问题:

https://github.com/BjornPijpops/encoding_issue

标签: pythonpandasnumpyscikit-learnone-hot-encoding

解决方案


推荐阅读