我給了一個沒有響應變量的測試集。我已經建立了模型並需要預測測試集中的響應變量。格式化迴歸設計矩陣
我在格式化測試設計矩陣時遇到問題,因此它會兼容。
我正在使用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