Алгоритм, используемый в KNeighborsClassifier с разреженным вводом?

#python #scikit-learn

#python #scikit-learn

Вопрос:

Для алгоритма классификации KNeighborsClassifier что означает подгонка к разреженному вводу?

Означает ли это, что если у меня есть x_train и x_test как разреженная матрица csr, и если я подхожу x_train и не указываю алгоритм, он автоматически выберет brute? кто-нибудь может устранить эту путаницу.

алгоритм: {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, необязательный алгоритм, используемый для вычисления ближайших соседей:

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

Ответ №1:

Нет, это означает, что если входные данные разрежены, какое бы значение ни было передано аргументу algorithm , оно будет проигнорировано и будет использован алгоритм грубой силы (что эквивалентно algorithm='brute' )

Комментарии:

1. У меня есть мой x_train в качестве матрицы csr, тогда я это сделал knn.fit(x_train, y_train) , и я не указал никакого алгоритма. Значит ли это, что он будет автоматически выбран как brute ?

2. Из того, что указано в документации, да.

3. В чем причина / интуиция того, что алгоритм, отличный от «грубого», не может использоваться при установке на разреженный ввод?

4. @hipoglucido Дело не в том, что нет алгоритма, brute который можно использовать для разреженных данных, а в том, что ни один из алгоритмов, реализованных в scikit-learn, не brute даст точных результатов в случае разреженных данных, поэтому библиотека автоматически спасает пользователя от совершения ошибки. Оба алгоритма ball-tree и kd-tree основаны на предположении, что данные не являются разреженными, они никогда не были разработаны для работы с такими данными. Однако грубая сила обычно работает с любыми данными, но может быть медленной (что является меньшей проблемой, когда данных меньше или данные разрежены).