kNN - Как найти ближайших соседей в обучающей матрице на основе рассчитанных расстояний

Я пытаюсь реализовать алгоритм k-ближайшего соседа, используя python. В итоге я получил следующий код. Однако я изо всех сил пытаюсь найти индекс элементов, которые являются ближайшими соседями. Следующая функция вернет матрицу расстояний. Однако мне нужно получить индексы этих соседей в features_train (входная матрица алгоритма).

def find_kNN(k, feature_matrix, query_house):
    alldistances = np.sort(compute_distances(feature_matrix, query_house))
    dist2kNN = alldistances[0:k+1]
    for i in range(k,len(feature_matrix)):
        dist = alldistances[i]
        j = 0
        #if there is closer neighbor
        if dist < dist2kNN[k]:
        #insert this new neighbor 
            for d in range(0, k):
                if dist > dist2kNN[d]:
                    j = d + 1
            dist2kNN = np.insert(dist2kNN, j, dist)
            dist2kNN = dist2kNN[0: len(dist2kNN) - 1]
    return dist2kNN    

print find_kNN(4, features_train, features_test[2])

Выход:

[ 0.0028605   0.00322584  0.00350216  0.00359315  0.00391858]

Может ли кто-нибудь помочь мне идентифицировать эти ближайшие предметы в features_train?


person renakre    schedule 18.10.2016    source источник
comment
что именно делает ваш query_house ?   -  person MMF    schedule 18.10.2016
comment
@MMF это всего лишь один экземпляр дома в тестовом наборе. features_train содержит все остальные предметы дома   -  person renakre    schedule 18.10.2016
comment
Почему бы вам не использовать sklearn ?   -  person MMF    schedule 18.10.2016


Ответы (1)


Я предлагаю использовать библиотеку python sklearn, в которой есть KNeighborsClassifier, из которой после установки вы можете получить ближайших соседей, которых вы ищете:

Попробуйте это:

# Import
from sklearn.neighbors import KNeighborsClassifier

# Instanciate your classifier
neigh = KNeighborsClassifier(n_neighbors=4) #k=4 or whatever you want
# Fit your classifier
neigh.fit(X, y) # Where X is your training set and y is the training_output
# Get the neighbors
neigh.kneighbors(X_test, return_distance=False) # Where X_test is the sample or array of samples from which you want to get the k-nearest neighbors
person MMF    schedule 18.10.2016
comment
сэр, спасибо за ваш ответ! Однако я должен сделать это с помощью python. - person renakre; 18.10.2016