Scikit-learn: Imputer работает, SimpleImputer и IterativeImputer не работают - PullRequest
0 голосов
/ 02 июля 2019

Я использую набор данных с большим количеством пропущенных значений, я подумал, что мог бы подойти к решению проблемы, используя решение KNeighbors.Для такого более простого подхода было бы использовать IterativeImputer из sklearn.impute.Для этого я использовал код:

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.neighbors import KNeighborsRegressor
opened_file = pd.read_csv(input_file, sep = ",", header = 0, na_values = "NaN", dtype = str)    
opened_file.drop(opened_file.loc[opened_file[class_col] == np.nan].index, inplace = True)
input_estimator = IterativeImputer(random_state=42, estimator=KNeighborsRegressor(n_neighbors=1))
usable_data = opened_file[cols]
usable_data = input_estimator.fit_transform(usable_data)

Однако это привело к ошибке:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

То же самое произошло с SimpleImputer.Однако, когда я запускаю (устаревший) Imputer из sklearn.preprocessing, код работает просто отлично:

from sklearn.preprocessing import Imputer
opened_file = pd.read_csv(input_file, sep = ",", header = 0, na_values = "NaN", dtype = str)    
opened_file.drop(opened_file.loc[opened_file[class_col] == np.nan].index, inplace = True)
usable_data = opened_file[cols]
usable_data = Imputer().fit_transform(usable_data)

Таким образом, получая вывод:

[[  0.          26.           4.         ...  48.923       72.615
  100.        ]
 [  0.          26.           4.         ...  48.923       72.615
  100.        ]
 [  0.          26.           4.         ...  48.923       72.615
  100.        ]
 ...
 [  1.          10.           3.         ...  49.63712147  73.50532432
   99.12231621]
 [  1.          10.           3.         ...  49.63712147  73.50532432
   99.12231621]
 [  0.979414    23.16310899   3.95972961 ...  49.63712147  73.50532432
   99.12231621]]

Все было выполнено с использованиемпанды данных.Я бы согласился с использованием Imputer, однако я хотел бы развернуть K-ближайшего соседа для решения пропущенных значений.

...