【问题标题】:SKlearn prediction on test dataset with different shape from training dataset shapeSKlearn对形状与训练数据集形状不同的测试数据集进行预测
【发布时间】:2019-03-15 07:31:12
【问题描述】:

我是 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]

再次感谢

【问题讨论】:

    标签: python scikit-learn


    【解决方案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. 值得注意的是,您正在重塑的数据应该被打乱(除非它已经存在),因为您可能正在删除模型应该学习的部分数据。忽略这一点可能会导致模型无法像您希望的那样泛化。

    【讨论】:

    • 非常感谢 nagrom97 的指点。将修改数据集以具有相同的特征。感谢您对如何修改 testB 以将样本数作为 testA 提出的任何建议。例如,一些代码通过在整个 testB 数据集中以相等的间隔删除 1165 行来将 2480 扩展到 1315,或者您认为可能合适的一些类似技术?
    • @l'HommeFort 我为您添加了更多细节。
    猜你喜欢
    • 1970-01-01
    • 2018-10-01
    • 2017-05-29
    • 2017-04-14
    • 2019-06-06
    • 2020-09-12
    • 2019-07-19
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多