Предварительная обработка набора данных с различными типами объектов с использованием одного конвейера - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь провести предварительную обработку и подготовить набор данных для обучения модели.Набор данных имеет некоторые числовые и категориальные особенности.Давайте предположим, что это набор данных (представленный как Pandas DataFrame): Age,Gender,Height 23,M,170 33,M,195 31,F,165

, и мы хотим преобразовать его в следующий формат, , используя только функции Transform в scikit-learn 0.19.0 иодин объект конвейера : Age,Gender_M,Gender_F,Height 0.0,1,0,170 1.0,1,0,195 0.8,0,1,165

Преобразования следующие:

Возраст: MinMaxScaler

Пол: OneHotEncoder

Высота: без изменений

Возможно ли это вообще (альтернатива, чтобы немного упростить, - на данный момент отказаться от функции Высота)?

В моих собственных попытках найти решение язаметил, что нет способа применить функцию Transform к подмножеству всех функций, что заставило меня поверить, что это невозможно сделать с помощью одного конвейера.Но я буду счастлив, что окажусь неправым.

Спасибо

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете написать свой собственный преобразователь для выполнения желаемых операций следующим образом.

from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import MinMaxScaler

class CustomTransformer((BaseEstimator, TransformerMixin):
   def __init__(self):
      self.one_hot_encoder = OneHotEncoder()
      self.min_max_scaler = MinMaxScaler()
   def fit(self, X, y):
       self.one_hot_encoder.fit(X.Gender)
       self.min_max_scaler.fit(X.Age)
       return self
   def transform(self, X, y):
       X["Gender"] = self.one_hot_encoder.transform(X["Gender"])
       X["Age"] = self.min_max_scaler(X["Age"]
       return X

Теперь вы можете использовать объект Pipeline на этом преобразователе следующим образом:

from sklearn.pipeline import Pipeline 
pipeline = Pipeline(("transform", CustomTransformer()), ("estimator", est))
pipeline.fit(X, y)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...