Я играю с Scikit, особенно использую SGD для классификации бинарного класса.
В тестовом прогоне я хотел посмотреть, насколько хорошо он работает, когда сам класс уже скрыт в самих данных.
data_X = data.drop('class', axis=1)
data_y = data['class'].copy()
data_X['dummy'] = data_y
Запустив некоторые тесты, мы увидим, что точность / точность/ отзыв довольно плох:
sgd_clf = SGDClassifier()
sgd_clf.fit(data_X, data_y)
cross_val_score(sgd_clf, data_X, data_y, cv=3, scoring="accuracy")
массив ([0.96720031, 0.96720031, 0.96720031]) # Вероятность нахождения в классе большинства
y_train_pred = cross_val_predict(sgd_clf, data_X, data_y, cv=3)
(0.0, 0.0)
Так что, как я понимаю, нет ничего необычного, что SGD делает здесь за сценой. Просто возвращение класса большинства.
Теперь я все еще далек от понимания того, как этот алгоритм работает под капотом, и в то же время мне интересно,
- Это его ожидаемое поведение или я пропускаюкакая-то важная часть здесь?
- Есть ли способ получить более сложный прогноз (не просто выбрасывая класс большинства), используя SGD для такого набора данных?