编码分类数据问题
Encoding categorical data issue
我正在做一个房价回归模型,我从 Kaggle 得到了 data,当我尝试将分类变量转换为虚拟变量时,我得到了一些不寻常的训练数据,我得到了形状共 (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)
,算法运行良好,但我认为这对算法质量影响太大.而且,如果为两个不同的数据集转换分类变量是正常的,我如何使两个数据集具有相同的维度?
您再次使用 fit_transform
将 OneHotEncoder
重新拟合到测试数据 X_actual
,因此 X_actual
的类别似乎更少(可能还有新类别) .尝试 ct.transform(X_actual)
保留训练数据 X
中找到的所有类别,从而保留特征形状。
请注意 OneHotEncoder
,从当前版本的 scikit-learn 1.0.2 开始,默认参数 handle_unknown='error'
将在测试数据中遇到新类别时引发错误。设置handle_unknown='ignore'
忽略错误。
我正在做一个房价回归模型,我从 Kaggle 得到了 data,当我尝试将分类变量转换为虚拟变量时,我得到了一些不寻常的训练数据,我得到了形状共 (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)
,算法运行良好,但我认为这对算法质量影响太大.而且,如果为两个不同的数据集转换分类变量是正常的,我如何使两个数据集具有相同的维度?
您再次使用 fit_transform
将 OneHotEncoder
重新拟合到测试数据 X_actual
,因此 X_actual
的类别似乎更少(可能还有新类别) .尝试 ct.transform(X_actual)
保留训练数据 X
中找到的所有类别,从而保留特征形状。
请注意 OneHotEncoder
,从当前版本的 scikit-learn 1.0.2 开始,默认参数 handle_unknown='error'
将在测试数据中遇到新类别时引发错误。设置handle_unknown='ignore'
忽略错误。