Python 与训练数据集形状不同的测试数据集SKlearn预测

Python 与训练数据集形状不同的测试数据集SKlearn预测,python,scikit-learn,Python,Scikit Learn,我是ML的新手,如能提供任何帮助,我将不胜感激。我已经使用测试集a和训练集a运行了一个线性回归预测。我保存了线性回归模型,现在想使用相同的模型使用测试集B的功能预测测试集a目标。每次运行模型时,它都会抛出下面的错误 如何从特征和具有不同形状的目标成功预测测试数据集 Input print(testB.shape) print(testA.shape) Output (2480, 5) (1315, 6) Input saved_model = joblib.load(filename) te

我是ML的新手,如能提供任何帮助,我将不胜感激。我已经使用测试集a和训练集a运行了一个线性回归预测。我保存了线性回归模型,现在想使用相同的模型使用测试集B的功能预测测试集a目标。每次运行模型时,它都会抛出下面的错误

如何从特征和具有不同形状的目标成功预测测试数据集

Input
print(testB.shape)
print(testA.shape)

Output
(2480, 5)
(1315, 6)

Input
saved_model = joblib.load(filename)
testB_result = saved_model.score(testB_features, testA_target)
print(testB_result)

Output
ValueError: Found input variables with inconsistent numbers of samples: [1315, 2480]

再次感谢

它们是不一致的形状,这就是抛出错误的原因。您是否尝试过重塑数据,使其中一个形状相同?快速查看一下,testA中似乎有更多的示例和更少的功能

想想看,如果你已经用5个特征训练了你的模型,那么你就不能要求同一个模型在给定6个特征的情况下做出预测。说到使用线性回归,方程大致如下:

y  = b + w0*x0 + w1*x1 + w2*x2 + .. + wN-1*xN-1 

Where { 
         y is your output/label
         N is the number of features
         b is the bias term
         w(i) is the ith weight
         x(i) is the ith feature value
      }
您已经训练了一个具有5个特征的线性回归器,有效地产生了以下结果

y (your output/label) = b + w0*x0 + w1*x1 + w2*x2 + w3*x3 + w4*x4
然后,您要求它根据6个特性进行预测,但它只知道如何处理5个特性

除了这个问题,您还有太多的样本,testB有2480个,testA有1315个。这些需要匹配,因为模型想要做出2480个预测,但您只给它1315个输出进行比较。你怎样才能得到1165个缺失样本的分数?你现在明白为什么数据必须被重塑了吗

编辑

假设您的数据集具有如上所述的相同数量的特性,您现在可以像下面这样重新调整删除数据testB的形状:

或者,如果您更喜欢使用numpy API的解决方案:

testB = np.delete(testB, np.s_[0:(len(testB)-len(testA))], axis=0)
testB.shape
(1315, 5)

请记住,在执行此操作时,您会切掉一些样本。如果这对您很重要,那么最好引入一个预处理步骤来帮助您解决缺少的值,也就是说,值得注意的是,您正在重塑的数据应该被洗牌,除非它已经被洗牌了,因为您可能正在移除模型应该了解的部分数据。忽略这一点可能会导致模型不能像您希望的那样普遍化。

非常感谢nagrom97的提示。将修改数据集,使其具有相同的功能。非常感谢您对如何修改testB以使样本数成为testA的任何建议。例如,一些代码通过在整个testB数据集中等间隔删除1165行来将2480扩展到1315,或者一些您认为合适的类似技术?@l'HommeFort我为您添加了更多细节。
testB = np.delete(testB, np.s_[0:(len(testB)-len(testA))], axis=0)
testB.shape
(1315, 5)