Вычисление графа ближайшего соседа с помощью sklearn? - PullRequest
0 голосов
/ 20 января 2020

Этот вопрос касается создания графа K-ближайших соседей [KNNG] из набора данных с неизвестным числом центроидов (что не совпадает с кластеризацией K-средних).

Предположим, у вас есть набор данных наблюдений, сохраненный в матрице данных X[n_samples, n_features], где каждая строка является вектором наблюдения или объекта, а каждый столбец является объектом. Теперь предположим, что вы хотите вычислить (взвешенный) график k-Neighbours для точек в X, используя sklearn.neighbors.kneighbors_graph .

Каковы основные c методы для выбора количества соседей для использования в каждой выборке? Какие алгоритмы хорошо масштабируются, когда у вас много наблюдений?

Я видел этот метод грубой силы ниже, но он не работает, когда размер набора данных выборки становится большим, и вы должны выбрать хорошую начальную верхнюю границу для n_neighbors_max. У этого алгоритма есть имя?

def autoselect_K(X, n_neighbors_max, threshold):
    # get the pairwise euclidean distance between every observation
    D = sklearn.metrics.pairwise.euclidean_distances(X, X)
    chosen_k = n_neighbors_max
    for k in range(2, n_neighbors_max):
        k_avg = []
        # loop over each row in the distance matrix
        for row in D:
            # sort the row from smallest distance to largest distance
            sorted_row = numpy.sort(row)
            # calculate the mean of the smallest k+1 distances
            k_avg.append(numpy.mean(sorted_row[0:k]))
        # find the median of the averages
        kmedian_dist = numpy.median(k_avg)
        if kmedian_dist >= threshold:
            chosen_k = k
            break
    # return the number of nearest neighbors to use
    return chosen_k

1 Ответ

1 голос
/ 20 января 2020
  • Из вашего кода выясняется, что вы ищете результат классификации на основе ближайшего соседа. В таком случае ваш поиск по матрице расстояний сродни поиску методом грубой силы и опровергает цель алгоритмов ближайшего соседа.

Возможно, вы ищете NNClassifier. Здесь https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

  • Относительно выбора количества ближайших соседей, это зависит от разреженности ваших данных. Это помогает рассматривать Nearest Neighbor как способ ограничить ваш поиск. Вместо того, чтобы просмотреть все образцы. Это позволит вам сузить поиск до лучших N (ближайший сосед) выборок. После этого вы можете применить метод спецификации c домена к этим N образцам, чтобы получить желаемый результат.
...