测试数据特征与 OneHotEncoder 的训练数据特征不匹配

Posted

技术标签:

【中文标题】测试数据特征与 OneHotEncoder 的训练数据特征不匹配【英文标题】:Test data features not matching with training data features for OneHotEncoder 【发布时间】:2019-03-18 00:28:12 【问题描述】:

我是 OneHotEncoder 的新手,并试图用它解决分类问题。 但是,我的测试数据集在形状不同方面给了我错误。我在训练和测试数据集中有相同的列。这是我的代码:

X = pd.read_csv('Svr_good.csv') #Training data
Xt = pd.read_csv('svr_test.csv') #Testing data

X = X.select_dtypes(include=[object])
Xt = Xt.select_dtypes(include=[object])
le = preprocessing.LabelEncoder()
X_2 = X.apply(le.fit_transform)
X_4 = Xt.apply(le.fit_transform)

enc = preprocessing.OneHotEncoder()
enc1 = preprocessing.OneHotEncoder()
enc.fit(X_2)
enc1.fit(X_4)

onehotlabels = enc.transform(X_2).toarray()
onehotlabels1 = enc1.transform(X_4).toarray()

numpy_array = onehotlabels
X = numpy_array[:, 1:]
y = numpy_array[:, 0]

lm = LinearSVC()
model = lm.fit(X, y)
predictions = lm.predict(onehotlabels1)
print predictions

上面的代码给了我一个特征不匹配的错误。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

问题是您正在拟合 X 并在 onehotlabels1 上进行预测,但 X 少了一列。

如果将X = numpy_array[:, 1:] 更改为X = numpy_array 是否有效?

【讨论】:

不,它没有帮助。我也稍微更新了代码。 在你选择了dtypes之后,你能分享一下确切的错误信息和print(Xt.shape)print(X.shape)的结果吗? 打印 (Xt.shape) = (20, 6) & 打印 (X.shape) = (28283, 6)。错误信息是:ValueError: X has 69 features per sample;期待 40988 onehotlabels1 是不同 onehotencoder 的结果,因此它没有相同数量的特征。如果将onehotlabels1 = enc1.transform(X_4).toarray() 替换为onehotlabels1 = enc.transform(X_4).toarray(),并将predictions = lm.predict(onehotlabels1) 替换为predictions = lm.predict(onehotlabels1[:, :1]),是否有效?如果不能,您可以分享错误并告诉我您要达到的目标吗?

以上是关于测试数据特征与 OneHotEncoder 的训练数据特征不匹配的主要内容,如果未能解决你的问题,请参考以下文章

机器学习编码分类特征编码LabelEncoder与OneHotEncoder

机器学习编码分类特征编码LabelEncoder与OneHotEncoder

机器学习编码分类特征编码LabelEncoder与OneHotEncoder

机器学习编码分类特征编码LabelEncoder与OneHotEncoder

特征抽取--标签与索引的转化: OneHotEncoder

为啥 classifier.predict() 方法期望测试数据中的特征数量与训练数据中的相同?