我给了一个没有响应变量的测试集。我已经建立了模型并需要预测测试集中的响应变量。格式化回归设计矩阵
我在格式化测试设计矩阵时遇到问题,因此它会兼容。
我正在使用patsy库构造矩阵。
我想要做这样的事情,除了下面的代码不起作用:
X = dmatrices('Response ~ var1 + var2', test, return_type = 'dataframe')
什么是正确的做法?感谢
我给了一个没有响应变量的测试集。我已经建立了模型并需要预测测试集中的响应变量。格式化回归设计矩阵
我在格式化测试设计矩阵时遇到问题,因此它会兼容。
我正在使用patsy库构造矩阵。
我想要做这样的事情,除了下面的代码不起作用:
X = dmatrices('Response ~ var1 + var2', test, return_type = 'dataframe')
什么是正确的做法?感谢
如果使用帕齐适合摆在首位的模型,那么你应该告诉它:“嘿,你知道你是怎么建我的第一个设计矩阵为我建造另一个同样的方式?”:
# 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
函数来居中变量:使用第一种方法,它会自动记住它从训练数据中减去的值,并将其重新用于测试数据,即你想要什么。第二种方法是使用测试数据重新计算中心,这会导致你默默得到真正错误的结果。
谢谢!这非常有帮助 – anticavity123