Я использую набор данных с большим количеством пропущенных значений, я подумал, что мог бы подойти к решению проблемы, используя решение 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-ближайшего соседа для решения пропущенных значений.