Python - 预测小于训练数据的测试数据

Posted

技术标签:

【中文标题】Python - 预测小于训练数据的测试数据【英文标题】:Python - Predicting test data that is smaller than train data 【发布时间】:2021-02-28 21:11:46 【问题描述】:

我已经预处理了一些数据,准备好训练多项朴素贝叶斯分类。训练数据占我数据的 80%,测试数据占 20%。

训练数据是一个大小为 8452 的数组,测试数据是一个大小为 4231 的数组

如果我想查看火车数据的预测,我可以执行以下代码

multiNB = MultinomialNB()

model = multiNB.fit(x_train, y_train)

y_preds = model.predict(x_train)

但如果我想预测我的测试 即

y_preds = model.predict(x_test)

我收到以下错误:

ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0,
 with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 8452 is different from 4231)

如果我需要提供有关我的代码的更多信息,请询问,但我被困在这里,我并不真正了解导致该错误的原因,欢迎任何帮助。

这就是我获得训练测试集的方式:

total_count = len(tokenised_reviews)

split = int(total_count * 0.8)

shuffle = np.random.permutation(total_count)

x = []
y = []

for i in range(total_count):
    x.append(x_data[shuffle[i]])
    y.append(y_data[shuffle[i]])

x_train = x[:split]
x_test = x[split:]

y_train = y[:split]
y_test = y[split:]

【问题讨论】:

我无法重现您的错误。您是否正确拆分了火车测试?你能分享一下你是如何获得训练和测试集的吗 我已经在上面添加了我是如何获得训练集和测试集的 如果x_data 是一个数组,跳过循环并执行x = x_data[shuffle]y 也一样。可能有帮助。你需要转置数组还是什么? 我需要追加数据,以便可以通过 x 和 y 进行索引 您可以按照建议使用索引调用数据。或者您可以使用 scikit learn 中的 train_test_split ... 我询问拆分的原因是因为我无法使用示例数据集重现您的错误 【参考方案1】:

作为评论输入太长了,当我再次尝试你的时候,我得到了一个非常奇怪的结构。我不知道x_data 是什么,所以很难解释确切的错误是什么。

我怀疑再次将数据放回列表时出了点问题,所以如果你这样做:

total_count = len(x_train)
split = int(total_count * 0.8)
shuffle = np.random.permutation(total_count)

x_train = x_data[shuffle[split:]]
x_test = x_data[shuffle[:split]]

y_train = y_data[shuffle[split:]]
y_test = y_data[shuffle[:split]]

您应该将 x_train 和 x_test 作为原始数据的子集。

或者你可以简单地这样做:

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.2)

【讨论】:

我想要拟合的数据最终是一个 np.array print(type(x_train_arr), (x_train_arr.shape)) <class 'numpy.ndarray'> (1105, 8550) print(type(x_test_arr), (x_test_arr.shape)) <class 'numpy.ndarray'> (277, 4002) 我已经尝试过你的建议,但结果每次都是同样的错误 你看到你的形状不一样了。如果你做了我上面所说的,我认为这是不可能的。 x_data 是什么,它与 tokenised_reviews 有何不同 您必须将火车和测试一起制成表格,然后将它们拆分

以上是关于Python - 预测小于训练数据的测试数据的主要内容,如果未能解决你的问题,请参考以下文章

机器学习基础:(Python)训练集测试集分割与交叉验证

使用 predict() 时,预测变量数相同但行数不同的新数据出错

如何在python中计算随机森林的训练和测试数据之间的准确性

python如何预测下一年的数据

测试经过训练的 LSTM 模型后如何预测实际的未来值?

当训练数据居中时,XGBoost 和随机森林导致对测试集的持续预测