测试数据特征与 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