我有 2 個檔案test.csv和train.csv. 屬性值是分類的,我正在嘗試將它們轉換為數值。
我正在執行以下操作:
import category_encoders as ce
encoder = ce.BinaryEncoder(cols = 'column_name' , return_df = True)
x_train_data = encoder.fit_transform(x_train_data)
這產生了一個共有 13 列的新表。在那之后,我正在訓練我DecisionTreeClassifier的x_train_datay_train_data
最后,我想預測Labelsin test.csv。如果我在 test.csv 上再次重復 BinaryEncoding 程序,這一次會導致< 13 features我認為是由于行數較少。由于總列數的差異,決策樹分類器將不起作用。
那么,有沒有辦法預測呢?如果不是,那么二進制編碼器的意義何在?因為我假設我們訓練了一個模型,以便我們可以在未知資料集上進行預測。
uj5u.com熱心網友回復:
您只需transform()對測驗資料進行操作(并且不再適合編碼器)。“訓練”資料集中未出現的值將在所有類別中編碼為 0(只要您不更改handle_unknown引數)。例如:
import category_encoders as ce
train = pd.DataFrame({"var1": ["A", "B", "A", "B", "C"], "var2":["A", "A", "A", "A", "B"]})
encoder = ce.BinaryEncoder(cols = ['var1', 'var2'] , return_df = True)
x_train_data = encoder.fit_transform(train)
# var1_0 var1_1 var2_0 var2_1
#0 0 1 0 1
#1 1 0 0 1
#2 0 1 0 1
#3 1 0 0 1
#4 1 1 1 0
test = pd.DataFrame({"var1": ["C", "D", "B"], "var2":["A", "C", "F"]})
x_test_data = encoder.transform(test)
# var1_0 var1_1 var2_0 var2_1
#0 1 1 0 1
#1 0 0 0 0
#2 1 0 0 0
'D'不會出現在var1訓練資料中,所以它被編碼為0 0. 'C'并且'F'不會出現在var2訓練資料中,因此它們都被編碼為0 0.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422911.html
標籤:
