Могу ли я использовать косинусное сходство между строками, используя только ненулевые значения? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу найти косинусное сходство (или евклидово расстояние, если проще) между одной строкой запроса и 10 другими строками.Эти строки полны значений nan, поэтому, если столбец имеет значение nan, их следует игнорировать.

Например, запрос:

A   B   C   D   E   F
3   2  NaN  5  NaN  4

df =

A   B   C   D   E   F
2   1   3  NaN  4   5
1  NaN  2   4  NaN  3
.   .   .   .   .   .
.   .   .   .   .   .

Так что я просто хочу получить косинусное сходство между каждым непустым столбцом, который запрашивает, и строкамииз DF есть в столбце.Таким образом, для строки 0 в df A, B и F не равны NULL как в запросе, так и в df.

Затем я хочу напечатать косинусное сходство для каждой строки.

Заранее спасибо

1 Ответ

0 голосов
/ 11 февраля 2019

Самый простой способ, который я могу придумать, - это использовать sklearn's cosine_similarity.

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(df.fillna(0), df1.fillna(0))
# array([[0.51378309],
#        [0.86958199]])

Самый простой способ "игнорировать" NaN - это просто обращаться с ними как с нулями при вычислениисходство.

...