2017-08-06 53 views
1

我给了一个没有响应变量的测试集。我已经建立了模型并需要预测测试集中的响应变量。格式化回归设计矩阵

我在格式化测试设计矩阵时遇到问题,因此它会兼容。

我正在使用patsy库构造矩阵。

我想要做这样的事情,除了下面的代码不起作用:

X = dmatrices('Response ~ var1 + var2', test, return_type = 'dataframe') 

什么是正确的做法?感谢

回答

0

如果使用帕齐适合摆在首位的模型,那么你应该告诉它:“嘿,你知道你是怎么建我的第一个设计矩阵为我建造另一个同样的方式?”:

# 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函数来居中变量:使用第一种方法,它会自动记住它从训练数据中减去的值,并将其重新用于测试数据,即你想要什么。第二种方法是使用测试数据重新计算中心,这会导致你默默得到真正错误的结果。

+0

谢谢!这非常有帮助 – anticavity123