我是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]
再次感谢
答案 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.值得注意的是,您要重塑的数据应该改组(除非已经改组),因为您可能正在删除模型应学习的部分数据。忽略此操作可能会导致模型推广不如您期望的那样。