Я хочу использовать ближайших соседей без присмотра, и в моих данных есть NaN.Я хочу, чтобы, когда для записи была выбрана функция NaN, она не учитывает расстояние с какой-либо другой записью.Заполнение NaN 0, сделает его близким к другим записям со значением, близким к 0, и далеко от значения, далеким от 0, так что это не будет работать.
Я создал евклидову метрику, которая делает это, так как NaN распространяется для- и **, но 0 для nansum.Тем не менее я все еще получаю сообщение об ошибке из-за NaN.
Есть ли способ исправить эту ошибку?Я бы посоветовал использовать другой модуль, кроме sklearn, если это необходимо.
from sklearn.neighbors import NearestNeighbors
def metric(x1,x2):
return np.nansum((x1-x2)**2)
nn = NearestNeighbors(n_neighbors=10, metric=metric, n_jobs=-1)
nn.fit(x)
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Я имею в виду, что я хочу, чтобы, если в записи был NaN для 10-й функции (например), 10-я функция не учитывалась врасстояние до любой другой записи, поэтому запись будет одинаково близка к любой другой записи, независимо от того, имеют ли они -1, 0, 13 или любое другое число для 10-й функции.
Удаление записей с NaN приведет кне работает, это на самом деле будет отбрасывать все записи.Установка NaN на 0 или любые другие числа также не будет работать.Я хочу замаскировать NaN из суммы расстояний для всех объектов.