Я пытаюсь создать класс get_dummies для своих данных, который я хочу использовать позже в Pipeline:
class Dummies(BaseEstimator, TransformerMixin):
def transform(self, df):
dummies=pd.get_dummies(df[self.cat],drop_first=True) ## getting dummy cols
df=pd.concat([df,dummies],axis=1) ## concatenating our dummies
df.drop(self.cat,axis=1,inplace=True) ## dropping our original cat_cols
def fit(self, df):
self.cat=[]
for i in df.columns.tolist():
if i[0]=='c': ## My data has categorical cols start with 'c'
self.cat.append(i) ## Storing all my categorical_columns for dummies
else:
continue
Теперь, когда я вызываю fit_transform для X_train, а затем преобразую X_test
z=Dummies()
X_train=z.fit_transform(X_train)
X_test=z.transform(X_test)
Столбцы в форме X_train и X_test различны:
X_train.shape
X_test.shape
Вывод:
(10983, 1797) (3661, 1529)
Естьбольше чайников в X_train, чем в моем X_test.Ясно, что мой X_test имеет меньше категорий, чем X_train.Как мне написать логику в моем классе так, чтобы категории в X_test передавались в форме X_train?Я хочу, чтобы в X_test было столько же фиктивных переменных, сколько в моем X_train.