Необходимо удалить цикл, чтобы векторизовать код и работать быстрее - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть школьное задание, где я должен создать классификатор (кНН).Я пытался сделать это, и это очень медленно.Мне нужно ускорить это без использования петель, но я не уверен, как это сделать.У меня есть тренировочные данные и ярлыки.У меня также есть данные испытаний.

Я уже создал функцию для выполнения классификации.

label=classifier(train, trainlabel, testvector)

Где поезд - это тренировочные данные, представляющие собой матрицу nxm.trainlabel это метки, которые mx1.testvector - это отдельный пример nx1.

Полные тестовые данные, которые я должен предсказать, - это некоторая матрица nxk.Прямо сейчас я создаю цикл для извлечения столбцов и передачи его в мой классификатор.Пожалуйста, смотрите код ниже.

for i in range(0, numoftestsamples):
    testvector=testdata[:,i]
    predictions[i]= classifier(train, trainlabel, testvector)

Есть ли способ векторизовать это так, чтобы он работал быстрее на python?

1 Ответ

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

Добро пожаловать в StackOverflow!

Как говорит @hpaulj, вам нужно выполнить оптимизацию в классификаторе так, чтобы она работала сразу по всей матрице testdata, а не по столбцу (testvector) за один раз.Тогда ваш цикл for будет заменен на

predictions = classifier(train,trainlabel,testdata)

Вы также можете распараллелить операции над векторами столбцов, и есть несколько способов сделать это.Оставаясь в vanilla python, есть модуль multiprocessing, который сделает это довольно просто.Однако, в зависимости от того, насколько интенсивным является classifier, один метод может не справиться с другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...