ホームページ >テクノロジー周辺機器 >AI >不均衡なデータセットに対処するための分類方法は何ですか?

不均衡なデータセットに対処するための分類方法は何ですか?

王林
王林転載
2024-01-24 15:00:051271ブラウズ

不均衡なデータセットに対処するための分類方法は何ですか?

#機械学習の分野では、不均衡なデータセットが一般的な問題です。これは、トレーニング データセット内のさまざまなカテゴリのサンプル数に大きな差があることを指します。たとえば、バイナリ分類問題では、正のサンプルの数は負のサンプルの数よりもはるかに少なくなります。これにより、トレーニングされたモデルはより多くのカテゴリを予測し、より少数のカテゴリを無視する傾向が強まり、モデルのパフォーマンスに影響を与えます。したがって、モデルのパフォーマンスを向上させるには、不均衡なデータセットを分類する必要があります。

この記事では、特定の例を使用して、不均衡なデータ セットを分類する方法を説明します。正のサンプルの数が 100、負のサンプルの数が 1000、特徴ベクトルの次元が 10 であるバイナリ分類問題があるとします。不均衡なデータ セットに対処するには、次の手順を実行できます。 1. SMOTE アルゴリズムなど、アンダーサンプリングまたはオーバーサンプリング手法を使用してデータのバランスをとります。 2. 精度、精度、再現率などの適切な評価指標を使用して、モデルのパフォーマンスを評価します。 3. 分類子のしきい値を調整して、少数クラスに対するモデルのパフォーマンスを最適化します。 4. ランダム フォレストや勾配ブースティング ツリーなどのアンサンブル学習手法を使用して、モデルの汎化パフォーマンスを向上させます

1. データ セットを理解する: データ セットを分析し、陽性サンプルの数は陰性サンプルの数よりもはるかに少ないです。

2. 適切な評価指標を選択する: データセットの不均衡のため、評価指標として精度、再現率、F1 値を選択します。

SMOTE アルゴリズムを使用して、少数派クラスのサンプルを合成し、データ セットのバランスをとることができます。これは imblearn ライブラリを使用して実装できます。

from imblearn.over_sampling import SMOTE
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, recall_score, f1_score

# 加载数据集并划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用SMOTE算法进行数据重采样
smote = SMOTE(random_state=42)
X_train_resampled, y_train_resampled = smote.fit_resample(X_train, y_train)

# 训练逻辑回归模型
model = LogisticRegression(random_state=42)
model.fit(X_train_resampled, y_train_resampled)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print("Accuracy: {:.2f}%, Recall: {:.2f}%, F1: {:.2f}%".format(accuracy*100, recall*100, f1*100))

4. 分類アルゴリズムの調整: モデルをトレーニングするときに、データ セットのバランスをとるためにカテゴリの重みを設定できます。たとえば、ロジスティック回帰アルゴリズムでは、class_weight パラメーターを設定して、さまざまなカテゴリのサンプル数のバランスをとることができます。

# 训练逻辑回归模型并设置类别权重
model = LogisticRegression(random_state=42, class_weight="balanced")
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print("Accuracy: {:.2f}%, Recall: {:.2f}%, F1: {:.2f}%".format(accuracy*100, recall*100, f1*100))

5. アンサンブル学習アルゴリズム: アンサンブル学習にはランダム フォレスト アルゴリズムを使用できます。具体的には、Python の sklearn ライブラリを使用して実装できます。

from sklearn.ensemble import RandomForestClassifier

# 训练随机森林模型
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)

# 在测试集上进行预测
y_pred = model.predict(X_test)

# 计算评估指标
accuracy = accuracy_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

print("Accuracy: {:.2f}%, Recall: {:.2f}%, F1: {:.2f}%".format(accuracy*100, recall*100, f1*100))

要約すると、不均衡なデータセットに対処する方法には、データのリサンプリング、分類アルゴリズムの調整、アンサンブル学習アルゴリズムが含まれます。特定の問題に基づいて適切な方法を選択する必要があり、より良いパフォーマンスを達成するためにモデルを評価および調整する必要があります。

以上が不均衡なデータセットに対処するための分類方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は163.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。