Чтобы проверить наличие переобучения и недостаточного подбора в моделях машинного обучения, можно использовать несколько методов. Вот некоторые распространенные методы, а также примеры кода на Python:
- Разделение Train-Test.
Разделите набор данных на две части: обучающий набор и отдельный тестовый набор. Обучите свою модель на обучающем наборе и оцените ее производительность на тестовом наборе. Если модель хорошо работает на обучающем наборе, но плохо на тестовом наборе, возможно, она переобучается.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Train the model
model = LinearRegression()
model.fit(X_train, y_train)
# Evaluate the model on the test set
test_score = model.score(X_test, y_test)
- Перекрестная проверка.
Используйте перекрестную проверку в k-кратном размере, чтобы оценить эффективность модели. Набор данных делится на k подмножеств, модель обучается и оценивается k раз, причем каждое подмножество один раз служит тестовым набором. Если модель работает значительно лучше на обучающих подмножествах, чем на тестовых, возможно, она переобучается.
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# Perform cross-validation
model = DecisionTreeClassifier()
scores = cross_val_score(model, X, y, cv=5)
# Calculate mean score and standard deviation
mean_score = scores.mean()
std_dev = scores.std()
- Кривые обучения.
Постройте график производительности модели на обучающем и тестовом наборах в зависимости от размера обучающего набора. Если ошибка обучения существенно меньше ошибки теста, это указывает на переобучение.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import learning_curve
from sklearn.svm import SVC
# Compute learning curve scores
train_sizes, train_scores, test_scores = learning_curve(
SVC(), X, y, train_sizes=np.linspace(0.1, 1.0, 10), cv=5)
# Calculate mean and standard deviation of scores
train_mean = np.mean(train_scores, axis=1)
train_std = np.std(train_scores, axis=1)
test_mean = np.mean(test_scores, axis=1)
test_std = np.std(test_scores, axis=1)
# Plot the learning curve
plt.plot(train_sizes, train_mean, label='Training score')
plt.plot(train_sizes, test_mean, label='Cross-validation score')
plt.fill_between(train_sizes, train_mean - train_std, train_mean + train_std, alpha=0.2)
plt.fill_between(train_sizes, test_mean - test_std, test_mean + test_std, alpha=0.2)
plt.xlabel('Training Set Size')
plt.ylabel('Accuracy Score')
plt.legend(loc='best')
plt.show()
- Методы регуляризации.
Применяйте методы регуляризации, такие как регуляризация L1 или L2, чтобы наказать сложные модели и уменьшить переобучение.
from sklearn.linear_model import Ridge
# Train Ridge regression model with L2 regularization
model = Ridge(alpha=0.5)
model.fit(X_train, y_train)
# Evaluate the model on the test set
test_score = model.score(X_test, y_test)