我得到一个没有响应变量的测试集。我已经构建了模型,需要预测测试集中的响应变量。
我在格式化测试设计矩阵时遇到问题,以便它兼容。
我正在使用patsy库来构建矩阵。
我想做这样的事情,除了下面的代码不起作用:
[Paths]
Prefix = .
什么是正确的方法?感谢
答案 0 :(得分:0)
如果你首先使用patsy来适应模型,那么你应该告诉它“嘿,你知道你是如何构建我的第一个设计矩阵的吗?以同样的方式构建另一个”:
# Set up training data
train_Y, train_X = dmatrices("Response ~ ...", train, return_type="dataframe")
# Save patsy's record of how it built this matrix:
design_info = train_X.design_info
# Re-use it to build the test matrix
test_X = dmatrix(design_info, test, return_type="dataframe")
或者,您可以从头开始构建新矩阵:
# Use 'dmatrix' and leave out the left-hand-side of the formula
test_X = dmatrix("~ ...", test, return_type="dataframe")
如果你能做到,第一种方法会更好。例如,假设您有一个分类变量,您可以让patsy为您编码。并且假设您的训练集中有10个类别,但只有5个类别出现在您的测试集中。如果你使用第一种方法,那么patsy会记住10个类别在哪里,并生成一个包含10列的测试矩阵(其中一些是全零)。如果您使用第二种方法,那么patsy将生成一个包含10列的训练矩阵和一个包含5列的测试矩阵,然后您的模型代码可能会崩溃,因为矩阵不是它期望的形状。
另一个重要的情况是,如果你使用patsy的center
函数来居中变量:第一种方法会自动记住它从训练数据中减去的值,并将其重新用于测试数据,这就是你想要的。使用第二种方法,它将使用测试数据重新计算中心,这可能导致您无声地得到真正错误的结果。