Evalml: рдЬрдм рд╢реНрд░реЗрдгреАрдмрджреНрдз рдпрд╛ рдмреВрд▓рд┐рдпрди рдХреЙрд▓рдо рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрдВрдкреНрдпреВрдЯрд░ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдЧре░ 2020  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: alteryx/evalml

рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗрд╡рд╛рд▓рд╛

from evalml.pipelines.components import Imputer
df = pd.DataFrame({"a": [1, 2, 3], "b": ["1", "2", None]})
imputer = Imputer()
imputer.fit(df)
from evalml.pipelines.components import Imputer
df_with_bool = pd.DataFrame({"a": [1, 2, 3], "b": [True, False, None]})
imputer = Imputer()
imputer.fit(df_with_bool)

рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдЯреИрдХрдЯреНрд░реЗрд╕ рд╣реИ:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-69-9af4cfc17aec> in <module>
      1 df_with_bool = pd.DataFrame({"a": [1, 2, 3], "b": [True, False, None]})
      2 imputer = Imputer()
----> 3 imputer.fit(df_with_bool)

~/sources/evalml/evalml/utils/base_meta.py in _set_fit(self, X, y)
     12         @wraps(method)
     13         def _set_fit(self, X, y=None):
---> 14             return_value = method(self, X, y)
     15             self._is_fitted = True
     16             return return_value

~/sources/evalml/evalml/pipelines/components/transformers/imputers/imputer.py in fit(self, X, y)
     76         X_categorical = X_null_dropped.select_dtypes(include=categorical_dtypes + boolean)
     77         if len(X_categorical.columns) > 0:
---> 78             self._categorical_imputer.fit(X_categorical, y)
     79             self._categorical_cols = X_categorical.columns
     80         return self

~/sources/evalml/evalml/utils/base_meta.py in _set_fit(self, X, y)
     12         @wraps(method)
     13         def _set_fit(self, X, y=None):
---> 14             return_value = method(self, X, y)
     15             self._is_fitted = True
     16             return return_value

~/sources/evalml/evalml/pipelines/components/transformers/imputers/simple_imputer.py in fit(self, X, y)
     42         if not isinstance(X, pd.DataFrame):
     43             X = pd.DataFrame(X)
---> 44         self._component_obj.fit(X, y)
     45         self._all_null_cols = set(X.columns) - set(X.dropna(axis=1, how='all').columns)
     46         return self

~/miniconda3/envs/evalml/lib/python3.8/site-packages/sklearn/impute/_base.py in fit(self, X, y)
    300                                                     fill_value)
    301         else:
--> 302             self.statistics_ = self._dense_fit(X,
    303                                                self.strategy,
    304                                                self.missing_values,

~/miniconda3/envs/evalml/lib/python3.8/site-packages/sklearn/impute/_base.py in _dense_fit(self, X, strategy, missing_values, fill_value)
    384                 row_mask = np.logical_not(row_mask).astype(np.bool)
    385                 row = row[row_mask]
--> 386                 most_frequent[i] = _most_frequent(row, np.nan, 0)
    387 
    388             return most_frequent

~/miniconda3/envs/evalml/lib/python3.8/site-packages/sklearn/impute/_base.py in _most_frequent(array, extra_value, n_repeat)
     40             # has already been NaN-masked.
     41             warnings.simplefilter("ignore", RuntimeWarning)
---> 42             mode = stats.mode(array)
     43 
     44         most_frequent_value = mode[0][0]

~/miniconda3/envs/evalml/lib/python3.8/site-packages/scipy/stats/stats.py in mode(a, axis, nan_policy)
    498     counts = np.zeros(a_view.shape[:-1], dtype=np.int)
    499     for ind in inds:
--> 500         modes[ind], counts[ind] = _mode1D(a_view[ind])
    501     newshape = list(a.shape)
    502     newshape[axis] = 1

~/miniconda3/envs/evalml/lib/python3.8/site-packages/scipy/stats/stats.py in _mode1D(a)
    485 
    486     def _mode1D(a):
--> 487         vals, cnts = np.unique(a, return_counts=True)
    488         return vals[cnts.argmax()], cnts.max()
    489 

<__array_function__ internals> in unique(*args, **kwargs)

~/miniconda3/envs/evalml/lib/python3.8/site-packages/numpy/lib/arraysetops.py in unique(ar, return_index, return_inverse, return_counts, axis)
    259     ar = np.asanyarray(ar)
    260     if axis is None:
--> 261         ret = _unique1d(ar, return_index, return_inverse, return_counts)
    262         return _unpack_tuple(ret)
    263 

~/miniconda3/envs/evalml/lib/python3.8/site-packages/numpy/lib/arraysetops.py in _unique1d(ar, return_index, return_inverse, return_counts)
    320         aux = ar[perm]
    321     else:
--> 322         ar.sort()
    323         aux = ar
    324     mask = np.empty(aux.shape, dtype=np.bool_)

TypeError: '<' not supported between instances of 'NoneType' and 'bool'

рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдпрд╣ np.nan рдмрдЬрд╛рдп None

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@freddyaboulton рд╕реНрдкрд╖реНрдЯ рдкреБрдирд░реБрддреНрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдФрд░ рдмрдЧ # 1092 рднреА рдмрддрд╛рддрд╛ рд╣реИред

рд╕рдВрдХрдЯ
рдпрджрд┐ рдкрд╛рдВрдбрд╛ рдбреЗрдЯрд╛рдлрд╝реНрд░реЗрдо рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ object рдкреНрд░рдХрд╛рд░ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ None рдорд╛рди рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ Imputer рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

  1. X = pd.DataFrame({'feature1': [False, True, None, np.nan]}) object рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рддрд╛ рд╣реИред Imputer.fit рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
  2. X = pd.DataFrame({'feature1': [False, True, np.nan]}) object рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рддрд╛ рд╣реИред Imputer.fit рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  3. X = pd.DataFrame({'feature1': [False, True]}) bool рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдмрдирд╛рддрд╛ рд╣реИред Imputer.fit рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

category рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдЪ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрддрд┐рдо рдорд╛рдорд▓рд╛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдпрд╣рд╛рдВ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ None рдХрд╛ рдорддрд▓рдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ nan рдЬреИрд╕рд╛ рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдЕрдкрдиреА рд╢реНрд░реЗрдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд▓рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╣рдо рдЙрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдФрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЗрд╕реЗ nan рд░реВрдк рдореЗрдВ рдорд╛рдирдирд╛ тАЛтАЛрдареАрдХ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣рд▓
рдмреВрд▓/рд╢реНрд░реЗрдгреА/рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ None рд╕рд╛рдлрд╝ рдХрд░реЗрдВ: df = df.fillna(value=np.nan)

рдареАрдХ рдХрд░
рд▓рдШреБ рдЕрд╡рдзрд┐:

  • None рдХреЛ np.nan рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП Imputer рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ
  • рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Imputer API рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ automl рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
  • рд╕рднреА рдЗрдЪреНрдЫрд┐рдд рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдореЗрдВ None рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде Imputer рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдЬреЛрдбрд╝реЗрдВред

рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ DataCheck рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдбреЗрдЯрд╛ рдореЗрдВ None s рд╣реЛрдиреЗ рдкрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ None s рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рджреАрд░реНрдШрд╛рд╡рдзрд┐:
рдПрдХ рдмрд╛рд░ рдЬрдм рд╣рдо рдирдП DataTable рдбреЗрдЯрд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП evalml рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдорд╛рдирдХреАрдХрд░рдг рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛ рджреЗрдЧрд╛ред

рдХреНрдпрд╛ рдпрд╣ #540 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ?

@ рдПрдВрдЬреЗрд▓рд╛ 97 None s рд╕реЗ np.nan s рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рд╣реИред

рдЗрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ #540 рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдВ рд░рд╛рдЗрдЯрдЕрдк рдЕрдзрд┐рдХ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╣реИрдВред

рдзрдиреНрдпрд╡рд╛рдж!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

chukarsten picture chukarsten  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsherry picture dsherry  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

angela97lin picture angela97lin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsherry picture dsherry  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dsherry picture dsherry  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ