Я впервые пытаюсь написать собственный трансформатор. Моя цель - написать класс преобразователя, аналогичный тому, который использует StandardScaler (). Вот ссылка на набор данных - https://www.kaggle.com/iabhishekofficial/mobile-price-classification/kernels. Все мои функции числовые (на первый взгляд), но некоторые функции имеют разные значения, а некоторые - непрерывные. Итак, я решил, что отображаются различные значения, и, следовательно, они на самом деле являются категориальными характеристиками. Эти функции потеряют свое значение, если их стандартизировать. Итак, моя цель - создать собственный преобразователь, который определяет, какие входные функции являются числовыми, а какие - категориальными, а затем он должен стандартизировать числовые функции с использованием класса StandardScaler, предоставляемого SK learn.
Вот код:
#Custom transformer to standardize the continuous numerical values
class CustomNormalizer(BaseEstimator,TransformerMixin):
#Class Constructor
def __init__(self,features,copy=True,with_mean=True,with_std=True):
self.features = features
self.scaler = StandardScaler(copy,with_mean,with_std)
#Return the fit features
def fit( self, X, y = None ):
return self
# Custom transformer
def transform(self, X, y = None):
categorical_feature_names = []
numerical_feature_names = []
unique_entries = pd.DataFrame(X[self.features].nunique(), columns = ['values']).T
for feature in unique_entries.columns:
if(unique_entries.loc["values", feature] == 2):
categorical_feature_names.append(feature)
else:
numerical_feature_names.append(feature)
numerical_features_scaled = self.scaler.fit_transform(X[numerical_feature_names])
numerical_features = pd.DataFrame(numerical_features_scaled, columns = numerical_feature_names)
categorical_features = X.drop(numerical_feature_names, axis = 1)
return categorical_features.join(numerical_features)
Затем я создаю экземпляр этого класса и подгоняю и трансформирую набор данных:
norm = CustomNormalizer(inputs.columns.values)
norm.fit(X_train, y_train)
norm.transform(X_train, y_train)
Проблема в том, что в результате я сохранил категориальные функции, но числовые функции дают много NaN ( отсутствующие значения). Я не могу понять, почему это происходит.
DataFrame Before: 
DataFrame After: 