Склеарн Кастом Импутер от предсказания - PullRequest
0 голосов
/ 19 февраля 2020

Я играю с набором данных Titani c и хотел создать пользовательский импутер для заполнения пропущенных значений age с помощью прогнозов из модели LinearRegression. Пожалуйста, найдите код ниже:

import seaborn as sns
import pandas as pd

from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LinearRegression
from sklearn.base import BaseEstimator, TransformerMixin


titanic = sns.load_dataset('titanic')


class AgeImputer(TransformerMixin, BaseEstimator):
    def fit(self, x, y=None):
        self.model = LinearRegression()

        # just use two columns for this example
        self.independent_columns = ['fare', 'pclass']

        # split the null age values from rest of data
        self.null_age_data = x[pd.isnull(x['age'])]
        self.age_data = x[pd.isnull(x['age'])==False]

        # fit the model on age_data
        self.model.fit(self.age_data[self.independent_columns], self.age_data['age'])

        return self

    def transform(self, x):
        """ make predictions and return the whole dataframe """
        self.null_age_data['age'] = self.model.predict(self.null_age_data[self.independent_columns])

        return self.null_age_data.append(self.age_data)

age_imputer = make_pipeline(
    AgeImputer()
)

age_imputer.fit_transform(titanic)

Мне интересно, является ли это лучшим способом создания импутера, подобного этому. Причина в том, что передача всего фрейма данных и сохранение его в виде переменных класса кажется пустой тратой памяти. Есть ли более простое решение, чем это? Заранее спасибо!

...