нужна помощь в написании тестовых случаев для сходства косинусов - PullRequest
2 голосов
/ 14 марта 2020

Это моя функция, которую я сделал ниже.

def cosine_similarity(a,b):
    """
    Determins the similarity between two vectors, by computing the cosine of the angle between them
    :param Union[ndarray, Iterable, int, float] a: a non zero numeric vector
    :param Union[ndarray, Iterable, int, float] b: a non zero numeric vector
    :return: ndarray

    """
    norm_a = numpy.linalg.norm(a)
    norm_b = numpy.linalg.norm(b)
    if norm_a ==0 or norm_b ==0:
        raise ZeroDivisionError("Can not find the cosine between two vectors with following norms:{} {}".format(norm_a,norm_b))
    return numpy.dot(a,b)/(norm_a * norm_b)

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

class TestCosineSimilarity(TestCase):
    def test_cosine_similarity_with_zero(self):

1 Ответ

0 голосов
/ 14 марта 2020

Classi c библиотеки для тестирования в python: doctest и unittest . Если вы просто используете несколько тестовых примеров, созданных вручную, я бы порекомендовал doctest. Для более тщательного тестирования с использованием случайно сгенерированных тестов unittest - это используемая библиотека.

Из вашего комментария выше видно, что вы ищете решение для unittest. По сути, то, что вы хотите здесь сделать, это

  1. . Предоставить альтернативную реализацию - если только вы не можете придумать другой способ проверки косинусного сходства (например, вы можете генерировать случаи, когда косинус сходство известно априори, но я не вижу, как вы можете это сделать, за исключением особых случаев).
  2. Произвольно генерируйте пары векторов.
  3. Для каждой пары векторов оцените свою функцию и альтернативная реализация, и сравните результаты. Остерегайтесь ошибок округления.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...