Предотвращение переобучения в логистической регрессии: перекрестная проверка, регуляризация, выбор функций и ранняя остановка

Чтобы предотвратить переобучение в логистической регрессии, вы можете рассмотреть несколько методов. Вот некоторые распространенные подходы с примерами кода:

  1. Перекрестная проверка. Перекрестная проверка помогает оценить эффективность модели на невидимых данных. Он включает в себя разделение набора данных на несколько подмножеств (складок), обучение модели на подмножестве и ее оценку на оставшейся свертке. Этот процесс повторяется несколько раз и учитывается средняя производительность. Это помогает определить, переоснащается модель или нет.
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
# Create logistic regression model
model = LogisticRegression()
# Perform cross-validation
scores = cross_val_score(model, X, y, cv=5)  # X: input features, y: target variable
# Print average accuracy
print("Average Accuracy:", scores.mean())
  1. Регуляризация. Регуляризация – это метод, который добавляет штрафной член к функции стоимости модели, препятствуя получению больших значений коэффициентов. Это помогает предотвратить слишком точное соответствие модели шуму обучающих данных.
from sklearn.linear_model import LogisticRegression
# Create logistic regression model with L2 regularization (Ridge)
model = LogisticRegression(penalty='l2')
# Train the model
model.fit(X_train, y_train)  # X_train: training features, y_train: training target
# Predict using the trained model
y_pred = model.predict(X_test)  # X_test: test features
# Evaluate the model
accuracy = model.score(X_test, y_test)  # y_test: test target
print("Accuracy:", accuracy)
  1. Выбор функций. Переобучение может произойти, если модель слишком сложна и включает в себя ненужные или избыточные функции. Методы выбора признаков помогают выявить и выбрать наиболее информативные признаки для модели.
from sklearn.feature_selection import SelectKBest
from sklearn.linear_model import LogisticRegression
# Select top k features using chi-square test
selector = SelectKBest(k=10)  # Select top 10 features
X_new = selector.fit_transform(X, y)  # X: input features, y: target variable
# Create logistic regression model with selected features
model = LogisticRegression()
# Train the model
model.fit(X_new, y)  # X_new: selected features
# Predict using the trained model
y_pred = model.predict(X_new)
# Evaluate the model
accuracy = model.score(X_new, y)
print("Accuracy:", accuracy)
  1. Ранняя остановка. Этот метод включает в себя мониторинг производительности модели на проверочном наборе во время обучения и остановку процесса обучения, когда производительность начинает ухудшаться.
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# Split the data into training and validation sets
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)
# Create logistic regression model
model = LogisticRegression()
best_accuracy = 0.0  # Track the best validation accuracy
best_model = None  # Track the best model
for epoch in range(100):
    # Train the model
    model.fit(X_train, y_train)
    # Evaluate on validation set
    y_pred = model.predict(X_val)
    accuracy = accuracy_score(y_val, y_pred)
    # Check if validation accuracy has improved
    if accuracy > best_accuracy:
        best_accuracy = accuracy
        best_model = model
    else:
        # Stop training if validation accuracy starts to deteriorate
        break
# Use the best model for predictions
y_pred = best_model.predict(X_test)