Чтобы предотвратить переобучение в логистической регрессии, вы можете рассмотреть несколько методов. Вот некоторые распространенные подходы с примерами кода:
- Перекрестная проверка. Перекрестная проверка помогает оценить эффективность модели на невидимых данных. Он включает в себя разделение набора данных на несколько подмножеств (складок), обучение модели на подмножестве и ее оценку на оставшейся свертке. Этот процесс повторяется несколько раз и учитывается средняя производительность. Это помогает определить, переоснащается модель или нет.
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())
- Регуляризация. Регуляризация – это метод, который добавляет штрафной член к функции стоимости модели, препятствуя получению больших значений коэффициентов. Это помогает предотвратить слишком точное соответствие модели шуму обучающих данных.
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)
- Выбор функций. Переобучение может произойти, если модель слишком сложна и включает в себя ненужные или избыточные функции. Методы выбора признаков помогают выявить и выбрать наиболее информативные признаки для модели.
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)
- Ранняя остановка. Этот метод включает в себя мониторинг производительности модели на проверочном наборе во время обучения и остановку процесса обучения, когда производительность начинает ухудшаться.
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)