Поиск 3 самых близких соседей по обучению без присмотра в python - PullRequest
0 голосов
/ 09 марта 2020

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

мой df выглядит так:

Person   Salary   Business  Segment        Headcount  Total_exp   Career_level
A         10000   IT        Engineering         10      5         VP
B         2000    IT        Engineering          5      5         AVP
C         4000    IT        STEM                 5      5         VP
D         3000    IT        Software            10      5         VP
E         7000    IT        Engineering          8      4         Manager

И иерархия человека выглядит так:

B, C сообщает A и E, D сообщает B, а также другие люди. Теперь, если я посмотрю сверху набора данных, единственными ближайшими соседями к A могут быть C, так как три функции близко совпадают, и я понял это правильно.

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

Теперь, например, человек E, который не сообщает ни одному из людей, упомянутых в списке, все еще хорошо подходит как сосед A, но, поскольку этот человек не входит в иерархию A, не является потенциальным соседом.

Я использую следующий код для достижения этой цели:

from sklearn.neighbors import KDTree
def findsuccess(person):
neighbors_person = np.where(nbrs.kneighbors_graph([principalComponents[i]]))[0]
print('Neighbors of id', neighbors_person)
kdt = KDTree(principalComponents, leaf_size=30, metric='euclidean')
kdt.query(principalComponents, k=4, return_distance=False)

import pickle
s = pickle.dumps(kdt)                     
tree_copy = pickle.loads(s)                
dist, ind = tree_copy.query(principalComponents[:5440], k=4)     
print(ind)  # indices of 3 closest neighbors
print(dist)  # distances to 3 closest neighbors

PrincipalComponents - это мой окончательный сокращенный набор компонентов, которые я получил от моего PCA.

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

...