KNNImputer от Scikit-learn (0.22.1) возвращает неверное количество значений - PullRequest
2 голосов
/ 08 марта 2020

Моя исходная форма набора данных - (790215,20), которая содержит элементы с пропущенными значениями около 60-80%. Я решил использовать KNNImputer scikit-learn следующим образом:

import pandas as pd
from sklearn.impute import KNNImputer

# Loading the data
dataset = pd.read_csv('Dataset.csv')

# To avoid 'MemoryError' imputing individually

#Loading the first feature
X = dataset.iloc[:,0].values

#Imputing with default parameters 
imputer = KNNImputer()

#Reshaping to meet the dimensional requirement
X_imp  = imputer.fit_transform(X.reshape(1,-1))

Теперь форма X_imp равна (1,729026)

Я не уверен, что я сделал не так. Почему 790215 изменился на 729026.

Обновление :

X.shape равно (790215,)

X.reshape(1,-1).shape равно (1,790215)

X.reshape(1,-1) is array([[ nan, 97., 89., ..., 140., 120., 115.]])

1 Ответ

1 голос
/ 09 марта 2020

То, как вы использовали reshape, является проблемой. Вы преобразовали свои данные в одну точку данных, указав .reshape(1, -1). Значение 1 строка с 790215 столбцами. Следовательно, при преобразовании KNNImputer отбрасывает столбцы, которые имеют только значения nan. Это причина для отбрасывания.

Вместо этого вам нужно использовать .reshape(-1,1), что сделает его 790215 строками и 1 столбцом.

Примечание: Использование единой функции для KNNImputer может не работать хорошо. Лучше вы можете сделать это с 3-5 функциями одновременно. Также вы можете взглянуть на SimpleImputer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...