2017-08-06 54 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