Обучите модель логистической регрессии на несбалансированном датасете для бинарной классификации и оцените её качество метриками accuracy, F1-мера и ROC-AUС.
При инициализации модели зафиксируйте random_state, указав его значение в скобках. Дело в том, что некоторые алгоритмы логистической регрессии при поиске решения генерируют случайные числа, из-за которых предсказания могут измениться при повторном исполнении кода. По умолчанию у класса LogisticRegression() выбран как раз такой алгоритм. Выбор одного значения random_state позволяет избежать случайных разночтений, никак не влияя на процесс поиска решений моделью.
Заметный контраст — очень высокая accuracy и ROC-AUC и сравнительно низкая F1-мера. Теперь сравнимimport pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder, StandardScaler
# импортируйте класс для модели классификации LogisticRegression
from sklearn.linear_model import LogisticRegression
# импортируйте функции для вычисления accuracy, ROC-AUC, F1-меры
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_auc_score
from sklearn.metrics import f1_score
# создание константы RANDOM_STATE
RANDOM_STATE = 42
# добавляем данные из CSV-файла в датафрейм pandas, делим датасет на выборки
df = pd.read_csv('music_genre_2_classes_imbalanced_v2.csv')
X = df.drop(columns='music_genre')
y = df.music_genre
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
random_state=RANDOM_STATE, stratify=y
)
# подготовка данных (кодирование и масштабирование)
# все операции — в скрытом прекоде
X_train, X_test = prepare_data(X_train, X_test)
# создайте и обучите модель LogisticRegression на тренировочных данных
# выполните предсказание на тестовой выборке
model = LogisticRegression(random_state=RANDOM_STATE)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
probas = model.predict_proba(X_test)[:,1]
# посчитайте и выведите метрику accuracy
acc = accuracy_score(y_test, y_pred)
print('Model Accuracy =', round(acc,2))
# посчитайте и выведите метрику ROC-AUC
roc = roc_auc_score(y_test, probas)
print('ROC-AUC =', round(roc,2))
# посчитайте и выведите F1-меру
f1 = f1_score(y_test, y_pred, pos_label='Rock')
print('F1-score =', round(f1,2)) эти показатели с метриками модели, всегда предсказывающей мажорный класс.
Результат
Model Accuracy = 0.93
ROC-AUC = 0.98
F1-score = 0.81