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

时间:2018-10-10 11:36:19

标签: 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)
testB_result = saved_model.score(testB_features, testA_target)
print(testB_result)

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

再次感谢

1 个答案:

答案 0 :(得分:1)

它们的形状不一致,这就是引发错误的原因。您是否尝试过重塑数据以使其中之一具有相同的形状?快速浏览一下,看来您在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

testB = testB[0:1314, :]
testB.shape
(1315, 5)  

或者,如果您希望使用numpy API的解决方案:

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

请记住,这样做时您会切出许多样本。如果这对您很重要(可能如此),则最好采用预处理步骤来解决缺失的值,即imputing them like this.值得注意的是,您要重塑的数据应该改组(除非已经改组),因为您可能正在删除模型应学习的部分数据。忽略此操作可能会导致模型推广不如您期望的那样。