#python #machine-learning #scikit-learn #knn #imblearn
#python #машинное обучение #scikit-learn #knn #imblearn
Вопрос:
Я имею дело с очень разреженным и несбалансированным набором данных, размерность которого я уменьшаю с помощью pca, а затем загружаю его в классификатор knn. В этом случае я не могу использовать SMOTE или пакет imblearn, и простая повышающая дискретизация не очень помогла, поэтому я не собираюсь исправлять дисбаланс прямо сейчас. Меня также больше интересуют результаты моей модели .predict_proba()
, чем ее фактические прогнозы.
Когда я подгоняю модель scoring='roc_auc'
, выводятся knn.predict_proba(test_X)
непрерывные значения с плавающей запятой от 0 до 1, как я и ожидал. Однако, когда я scoring='recall'
пытаюсь лучше предсказать класс меньшинства, вывод knn.predict_proba(test_X)
всего либо 0.00001
или 1.00000
, и я не понимаю, почему. Если я сделаю то же самое с классификатором дерева решений с градиентным усилением, который я создал для той же проблемы, он по-прежнему выводит непрерывные значения при использовании scoring='roc_auc'
.
Мое лучшее предположение заключается в том, что в этом наборе данных недостаточно случаев класса меньшинства, и это частично связано с тем, что knn является топологическим методом.
Я хочу понять, что может привести к этому.
pca = PCA()
knn = KNeighborsClassifier()
pipe = Pipeline(steps=[('pca', pca), ('knn', knn)])
#Define Parameters
param_grid = {
'pca__n_components': [4, 7, 10, 20, 82],
'knn__n_neigbors': [1,3,5,7,15],
'knn__weights': ['uniform', 'distance']
}
search = GridSearchCV(pipe, param_grid, n_jobs=-1, cv=10, verbose=3, scoring='recall')
======================================================================================
best_params_: {'pca__n_components': 82,
'knn__n_neighbors': 15,
'knn__weights': 'uniform'}
Комментарии:
1.
KNeighborsClassifier
не имеетscoring
параметра… вы выполняете поиск по гиперпараметру?2. Да, это было внутри
search = GridSearchCV(pipe, param_grid, n_jobs=-1, cv=10, verbose=3, scoring='recall')
. Я не знал, что у него нетscoring
параметра… он запускается, но это определенно что-то меняет. Есть идеи, что это может быть?3. Пожалуйста, добавьте это и определение
pipe
иparam_grid
к вопросу, а такжеbest_params_
результат поиска. (Минимальный репрезентативный пример был бы лучшим, но этих фрагментов информации может быть достаточно, чтобы дать ответ.)4. Ваш вопрос, похоже, указывает на то, что проблемы возникают из-за
recall
оценки, но какими будут наилучшие гиперпараметры при установке для него значения accuracy, которое по умолчанию?5.Когда оценка установлена на
'accuracy'
наилучшие параметры{'pca__n_components': 82, 'knn__n_neighbors': 5, 'knn__weights': 'uniform'}
. Кроме того, вероятности различаются, когда я используюaccuracy
, вместо того, чтобы быть широким диапазоном непрерывных значений или двоичными, они либо0.0
0.2
0.4
0.6
0.8
. ЕслиKNeighborsClassifier
scoring
параметра нет, что меняется?