#python-3.x #cluster-analysis #categorical-data
#python-3.x #кластерный анализ #категориальные данные
Вопрос:
Я пытаюсь использовать функцию gower по этой ссылке https://sourceforge.net/projects/gower-distance-4python/files /. Я пытаюсь применить ее к моему фрейму данных категориальных переменных. Однако я вижу, что при использовании функции gower_distances у меня есть несколько ненулевых значений в моих диагоналях (мне нужно, чтобы все они были равны 0).
Я пытался устранить ошибку в коде. Я думаю, что знаю, где это происходит, и это происходит в функции _gower_distance_row. Есть эта строка кода, которую я не понимаю sij_cat = np.where(xi_cat == xj_cat,np.zeros_like(xi_cat),np.ones_like(xi_cat)). Но я представлю это в более простом для понимания формате.
Допустим, у меня есть:
xi=np.array(['cat','dog','monkey'])
xj=np.array([['cat','dog','monkey'],['horse','dog','hairy']])
sij_cat = np.where(xi == xj,np.zeros_like(xi),np.ones_like(xi))
Я получаю это в качестве результата:
array([['', '', ''],
['1', '', '1']], dtype='<U6')
поскольку я сравниваю cat с cat, я хочу присвоить ноль, а там, где он отличается, например, cat vs horse и monkey vs hairy, он должен быть равен 1. Я не понимаю, почему в приведенном выше результате я получаю «? я хочу, чтобы здесь были нули. Как мне это исправить?
Ответ №1:
np.logical_not(xi == xj).astype(int)
вывод будет:
array([[0, 0, 0],
[1, 0, 1]])
объяснение:
np.logical_not
изменения True
в False
и False
в True
и astype(int)
изменения в 0
и 1