ホームページ  >  記事  >  テクノロジー周辺機器  >  機械学習モデルの過学習問題

機械学習モデルの過学習問題

王林
王林オリジナル
2023-10-08 16:06:22739ブラウズ

機械学習モデルの過学習問題

機械学習モデルの過学習問題とその解決策

機械学習の分野では、モデルの過学習は一般的かつ困難な問題です。モデルがトレーニング セットでは良好なパフォーマンスを示しても、テスト セットではパフォーマンスが低い場合、モデルが過剰適合していることを示します。この記事では、過学習問題の原因とその解決策を紹介し、具体的なコード例を示します。

  1. 過学習問題の原因
    過学習問題は主に、モデルが複雑すぎてパラメータが多すぎることが原因で発生します。モデルのパラメーターが多すぎると、モデルはトレーニング セット内のノイズと外れ値に過度の注意を払うことになり、新しいデータのパフォーマンスが低下します。さらに、不十分なデータも過学習問題の原因の 1 つです。トレーニング セット内のサンプルが少ない場合、モデルは各サンプルの詳細を記憶する傾向があり、目に見えないデータに一般化できません。
  2. 過学習を解決する方法
    過学習問題を解決するには、次の方法が考えられます。

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 正則化 (正則化)
正則化は、モデルの損失関数に正則化項を追加することによって行われます。 、モデルの複雑さにペナルティを与え、それによってモデルの過剰適合のリスクを軽減します。一般的な正則化方法には、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))
  1. 概要
    過学習は機械学習モデルでよくある問題ですが、いくつかの方法を採用できます。それを解決してください。データ拡張、正則化、およびドロップアウトはすべて、過学習問題を解決するために一般的に使用される方法です。特定のアプリケーション シナリオに応じてオーバーフィッティングの問題に対処する適切な方法を選択し、パラメーターやその他の方法を調整することでモデルのパフォーマンスをさらに最適化できます。

以上が機械学習モデルの過学習問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。