我正在做一個房價回歸模型,我從 Kaggle獲得資料,當我嘗試將分類變數轉換為虛擬變數時,我得到了一些不尋常的訓練資料,我得到了(1460, 270)
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1,4,5,6,7,8,9,10,11,12,13,14,
19,20,21,22,23,25,26,27,28,29,30,31,
33,37,38,39,40,51,53,55,57,60,61,62,72,73
])], remainder='passthrough',sparse_threshold=0)
X = np.array(ct.fit_transform(X))
X.shape
(1460, 270)
當我對測驗資料做同樣的事情時,我得到了(1459, 254)
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [1,4,5,6,7,8,9,10,11,12,13,14,
19,20,21,22,23,25,26,27,28,29,30,31,
33,37,38,39,40,51,53,55,57,60,61,62,72,73
])], remainder='passthrough',sparse_threshold=0)
X_actual = np.array(ct.fit_transform(X_actual))
X_actual.shape
(1459, 254)
為什么在為火車和測驗資料轉換相同的分類變數后形狀不同。
請注意,在轉換分類變數之前,兩個資料具有相同的形狀是沒有問題的;該問題僅在我為兩個資料集轉換相同的分類變數時發生,我得到了不同的形狀。
我做了一個解決方案,但我不太喜歡它,我將 X_actual.shape 調整為(1459,270),演算法運行良好,但我認為它對演算法質量的影響太大。而且,如果在轉換兩個不同資料集的分類變數時是正常的,我怎樣才能使兩個資料集具有相同的維度?
uj5u.com熱心網友回復:
您再次使用重新擬合OneHotEncoder測驗資料,因此似乎類別較少(可能還有新類別)。嘗試保留在訓練資料中找到的所有類別,從而保留特征形狀。X_actualfit_transformX_actualct.transform(X_actual)X
請注意,OneHotEncoder從當前版本的 scikit-learn 1.0.2 開始,使用默認引數handle_unknown='error'會在測驗資料中遇到新類別時引發錯誤。設定handle_unknown='ignore'為忽略錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/416634.html
標籤:
