#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 основаны на предположении, что данные не являются разреженными, они никогда не были разработаны для работы с такими данными. Однако грубая сила обычно работает с любыми данными, но может быть медленной (что является меньшей проблемой, когда данных меньше или данные разрежены).