1

У меня есть dataframe data, содержащий реальные значения и некоторые значения NaN. Я пытаюсь выполнить чувствительное к местоположению хэширование с использованием случайных прогнозов, чтобы уменьшить размер до 25 компонентов, в частности с классом sklearn.random_projection.GaussianRandomProjection. Однако, когда я бегу:Случайная проекция в Python Pandas с использованием dataframe, содержащей значения NaN

tx = random_projection.GaussianRandomProjection(n_components = 25) data25 = tx.fit_transform(data)

я Input contains NaN, infinity or a value too large for dtype('float64'). Есть ли обстановка? Я попытался изменить все значения NaN на значение, которое никогда не присутствует в моем наборе данных, например -1. Насколько действителен мой вывод в этом случае? Я не являюсь экспертом теории чувствительных к хэшированию/случайных прогнозов местности, поэтому любое понимание было бы полезно. Благодарю.

ответ

0

Значения NA/NaN (недоступные/не-число), я нашел, просто хлопотно.

Вы не хотите просто подставлять случайное значение, например -1. Если вы склонны к этому, используйте один из Imputer classes. В противном случае вы, вероятно, очень сильно измените расстояния между точками. Скорее всего, вы хотите сохранить расстояние как можно больше, если вы используете random projection:

Размеры и распределение случайных проекций матрица управляется таким образом, чтобы сохранить попарные расстояния между любыми двумя образцами данных.

Однако это может привести или не привести к разумным значениям для обучения. Насколько мне известно, вменение - открытое поле обучения, которое (например) this gentlemen специализировалось на учебе.

Если у вас достаточно примеров, рассмотрите возможность удаления строк или столбцов, содержащих значения NaN. Другая возможность обучение порождающей модели вроде Restricted Boltzman Machine и использовать его для заполнения недостающих значений:

rbm = sklearn.neural_network.BernoulliRBM().fit(data_with_no_nans) 
mean_imputed_data = sklearn.preprocessing.Imputer().fit_transform(all_data) 
rbm_imputation = rbm.gibbs(mean_imputed_data) 
nan_mask = np.isnan(all_data) 
all_data[ nan_mask ] = rbm_imputation[ nan_mask ] 

Наконец, вы могли бы рассмотреть вменения с помощью ближайших соседей. Для данного столбца подготовьте модель ближайших соседей по всем переменным , кроме, в этой колонке, используя все полные строки. Затем для строки, отсутствующей в этом столбце, найдите k ближайших соседей и используйте среднее значение среди них. (Это становится очень дорогостоящим, особенно если у вас есть строки с более чем одним отсутствующим значением, так как вам придется обучать модель для каждой комбинации недостающих столбцов).

 Смежные вопросы

  • Нет связанных вопросов^_^