numpy argsort vs sklearn Ближайшие соседи

import cv2

cap = cv2.VideoCapture('bunny.mp4')
cap.set(cv2.CAP_PROP_POS_MSEC,1000)      # Go to the 1 sec. position
ret,frame = cap.read()                   # Retrieves the frame at the specified second
cv2.imwrite("image.jpg", frame)          # Saves the frame as an image
cv2.imshow("Frame Name",frame)           # Displays the frame on screen
cv2.waitKey()                            # Waits For Input

Здесь cap.set (cv2.CAP_PROP_POS_MSEC, 1000) отвечает за прохождение непосредственно к 1-й секунде в видео (1000-й миллисекунды). Не стесняйтесь подставлять значение по вашему выбору.

Я проверил код на OpenCV 3.1.0.

-2
задан srcolinas 13 July 2018 в 15:55
поделиться

1 ответ

Как правило, сортировка массива будет более вычислительно эффективной, чем установка ученой модели, такой как классификатор ближайших соседей. Однако вы можете получить преимущество во время выполнения, если вам нужно только подобрать модель в одно время в начале.

Сортировка массива с помощью Numpy имеет наилучшую временную сложность O (nlogn). Если вам приходится сортировать каждый раз, когда вы выполняете поиск, это может быть неэффективным. Алгоритм KDTree , который вы можете использовать для использования класса NeariteNeighbors scikit-learn, может быть создан за время, равное O (nlogn), а затем поиск может выполняться за время, равное O (logn). Поэтому, если вам нужно только создать KDTree один раз в начале, это может быть более эффективным. Обратите внимание, что поиск должен будет вычислять расстояния от ваших векторов объектов, поэтому, если ваше пространственное пространство является пространственным, это может оказаться менее эффективным. И если вы никогда не столкнетесь с невидимыми точками данных, это может быть полностью расточительным.

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

Обратите внимание, что классификатор ближайших соседей не является единственным типом модели, который полезен для классификации невидимых точек данных, и у всех классификаторов есть плюсы и минусы рассматривать. Но сначала важно решить, имеет ли научная модель смысл для вашего приложения.

И как всегда при решении вопросов скорости важно реализовать и профилировать ваши варианты.

0
ответ дан argx 17 August 2018 в 12:35
поделиться
  • 1
    Класс NearestNeighbor - это поиск похожих точек, а не классификация. – srcolinas 13 July 2018 в 15:09
  • 2
    Вариант использования для ближайших соседей заключается в том, чтобы определить что-то о новом, невидимом datapoint на основе ближайших к нему примеров в обучающем наборе. Если вам не нужно классифицировать, и у вас нет невидимых данных для рассмотрения, то вам не нужна модель ближайших соседей. – argx 13 July 2018 в 15:24
  • 3
    Я не говорю о алгоритме k-ближайших соседей. Я говорю о классе NearestNeighbor, для которого в документации сказано «Неконтролируемый ученик для реализации соседних поисков». Поэтому я могу использовать его для поиска ближайших точек данных. – srcolinas 13 July 2018 в 15:30
  • 4
    Вы работаете с невидимыми точками данных? Класс ближайших соседей (который использует алгоритм k-ближайших соседей) выполняет поиск в пространстве параметров. Он вычисляет метрику расстояния, используя ваши векторы объектов. У вас уже есть таблица расстояний, поэтому вам не нужно их компрометировать. Алгоритм KDTree, когда-то подходящий, может выполнять поиск довольно быстро, но если ваше пространственное пространство является высоким, оно будет соответствовать и, вероятно, будет медленно искать. Если вы действительно хотите использовать модель для простого поиска в таблице, было бы неплохо профилировать обе реализации и узнать. – argx 13 July 2018 в 15:45
  • 5
    Теперь это имеет больше смысла, спасибо. Я должен немного изменить свой вопрос – srcolinas 13 July 2018 в 15:49
Другие вопросы по тегам:

Похожие вопросы: