머신러닝 모델의 과적합 문제와 그 해결책
머신러닝 분야에서 모델의 과적합은 흔하고 어려운 문제입니다. 모델이 훈련 세트에서는 잘 수행되지만 테스트 세트에서는 잘 수행되지 않으면 모델이 과적합되었음을 나타냅니다. 이 기사에서는 과적합 문제의 원인과 해결 방법을 소개하고 구체적인 코드 예제를 제공합니다.
2.1 데이터 확대
데이터 확대란 훈련 세트에 일련의 변환을 수행하여 더 많은 데이터를 생성하는 것을 말합니다. 견본. 예를 들어 이미지 분류 작업에서는 이미지를 회전, 크기 조정, 뒤집기 등을 통해 데이터를 늘릴 수 있습니다. 이렇게 하면 훈련 세트의 크기가 늘어나고 모델이 더 잘 일반화되는 데 도움이 됩니다.
다음은 이미지 데이터 확장을 위해 Keras 라이브러리를 사용하는 샘플 코드입니다.
from keras.preprocessing.image import ImageDataGenerator # 定义数据扩充器 datagen = ImageDataGenerator( rotation_range=20, # 随机旋转角度范围 width_shift_range=0.1, # 水平平移范围 height_shift_range=0.1, # 垂直平移范围 shear_range=0.2, # 剪切变换范围 zoom_range=0.2, # 缩放范围 horizontal_flip=True, # 随机水平翻转 fill_mode='nearest' # 填充模式 ) # 加载图像数据集 train_data = datagen.flow_from_directory("train/", target_size=(224, 224), batch_size=32, class_mode='binary') test_data = datagen.flow_from_directory("test/", target_size=(224, 224), batch_size=32, class_mode='binary') # 训练模型 model.fit_generator(train_data, steps_per_epoch=len(train_data), epochs=10, validation_data=test_data, validation_steps=len(test_data))
2.2 정규화(Regularization)
정규화는 모델의 손실 함수에 정규화 항을 추가하여 모델의 복잡성에 페널티를 주는 것입니다. 모델 과적합 위험. 일반적인 정규화 방법에는 L1 정규화와 L2 정규화가 포함됩니다.
다음은 PyTorch 라이브러리를 사용한 L2 정규화를 위한 샘플 코드입니다.
import torch import torch.nn as nn # 定义模型 class MyModel(nn.Module): def __init__(self): super(MyModel, self).__init__() self.fc1 = nn.Linear(10, 10) self.fc2 = nn.Linear(10, 1) def forward(self, x): x = self.fc1(x) x = nn.ReLU()(x) x = self.fc2(x) return x model = MyModel() # 定义损失函数 criterion = nn.MSELoss() # 定义优化器 optimizer = torch.optim.SGD(model.parameters(), lr=0.01, weight_decay=0.001) # 注意weight_decay参数即为正则化项的系数 # 训练模型 for epoch in range(100): optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step()
2.3 Dropout
Dropout은 훈련 과정에서 일부 뉴런을 무작위로 삭제하여 모델의 과적합을 줄이는 일반적으로 사용되는 정규화 기술입니다. 구체적으로, 각 훈련 반복에서 특정 확률 p로 폐기할 일부 뉴런을 무작위로 선택합니다.
다음은 TensorFlow 라이브러리를 사용하는 Dropout의 샘플 코드입니다.
import tensorflow as tf # 定义模型 model = tf.keras.models.Sequential([ tf.keras.layers.Dense(10, activation=tf.nn.relu, input_shape=(10,)), tf.keras.layers.Dropout(0.5), # dropout率为0.5 tf.keras.layers.Dense(1) ]) # 编译模型 model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True)) # 训练模型 model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
위 내용은 머신러닝 모델의 과적합 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!