아래는 사물의 수단을 다루기위한 의미의 간단한 질문입니다. 보다 견고한 구현은 아마도 모드, 중간 값 등을 수행 할 수있는 scikit learn에서 Imputer 클래스를 사용하는 것을 포함하며 스파 스/고밀도 매트릭스를 다루는 것이 더 낫습니다.
이것은 원래의 질문에 대한 Vivek Kumar의 의견을 바탕으로 데이터를 스택으로 분할하고이를 다시 조립하는 것을 제안했습니다.
import numpy as np
from sklearn.base import BaseEstimator, TransformerMixin
class WithinClassMeanImputer(BaseEstimator, TransformerMixin):
def __init__(self, replace_col_index, class_col_index = None, missing_values=np.nan):
self.missing_values = missing_values
self.replace_col_index = replace_col_index
self.y = None
self.class_col_index = class_col_index
def fit(self, X, y = None):
self.y = y
return self
def transform(self, X):
y = self.y
classes = np.unique(y)
stacks = []
if len(X) > 1 and len(self.y) = len(X):
if(self.class_col_index == None):
# If we're using the dependent variable
for aclass in classes:
with_missing = X[(y == aclass) &
(X[:, self.replace_col_index] == self.missing_values)]
without_missing = X[(y == aclass) &
(X[:, self.replace_col_index] != self.missing_values)]
column = without_missing[:, self.replace_col_index]
# Calculate mean from examples without missing values
mean = np.mean(column[without_missing[:, self.replace_col_index] != self.missing_values])
# Broadcast mean to all missing values
with_missing[:, self.replace_col_index] = mean
stacks.append(np.concatenate((with_missing, without_missing)))
else:
# If we're using nominal values within a binarised feature (i.e. the classes
# are unique values within a nominal column - e.g. sex)
for aclass in classes:
with_missing = X[(X[:, self.class_col_index] == aclass) &
(X[:, self.replace_col_index] == self.missing_values)]
without_missing = X[(X[:, self.class_col_index] == aclass) &
(X[:, self.replace_col_index] != self.missing_values)]
column = without_missing[:, self.replace_col_index]
# Calculate mean from examples without missing values
mean = np.mean(column[without_missing[:, self.replace_col_index] != self.missing_values])
# Broadcast mean to all missing values
with_missing[:, self.replace_col_index] = mean
stacks.append(np.concatenate((with_missing, without_missing)))
if len(stacks) > 1 :
# Reassemble our stacks of values
X = np.concatenate(stacks)
return X
'pclass'당 데이터를 분할하고, '요금'을 대신 입력 한 다음 다시 스택하여 완전한 데이터를 만들 수 있습니다. –
고마워요 @VivekKumar! 내 파이프 라인의 일환으로이 작업을 수행 할 것입니다. – TheJokersThief
[이 예제] (http://scikit-learn.org/stable/auto_examples/hetero_feature_union.html#sphx-glr-auto-examples-hetero- feature-union-py) 파이프 라인에서 사용할 수있는 클래스를 구현하기위한 힌트를 얻으려면 –