コードちょうだい
以下は、SMOTEとTomekリンクを組み合わせたアンダーサンプリングとオーバーサンプリングの例です。imbalanced-learnパッケージを使用しています。
python
from imblearn.combine import SMOTETomek from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler import pandas as pd # データの読み込み data = pd.read_csv('/home/share/temp/shipping_size_traning.csv') # 欠損値の削除 data = data.dropna(subset=["original_product_code"]) # 特徴量と目的変数の分割 X = data.drop(columns=['size']) y = data['size'] # データをトレーニングセットとテストセットに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # データの標準化 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # オーバーサンプリングとアンダーサンプリングを組み合わせる smt = SMOTETomek(random_state=42) X_train_resampled, y_train_resampled = smt.fit_resample(X_train_scaled, y_train) # ランダムフォレストモデルの作成とトレーニング rf_model = RandomForestClassifier(n_estimators=100, random_state=100) rf_model.fit(X_train_resampled, y_train_resampled) # テストセットでの予測 y_pred = rf_model.predict(X_test_scaled) # モデルの評価 accuracy = accuracy_score(y_test, y_pred) precision = precision_score(y_test, y_pred, average='weighted') recall = recall_score(y_test, y_pred, average='weighted') f1 = f1_score(y_test, y_pred, average='weighted') roc_auc = roc_auc_score(y_test, rf_model.predict_proba(X_test_scaled), multi_class='ovr') print("Accuracy:", accuracy) print("Precision:", precision) print("Recall:", recall) print("F1 Score:", f1) print("ROC AUC Score:", roc_auc)
このコードでは、SMOTETomekクラスを使用してオーバーサンプリングとアンダーサンプリングを組み合わせています。不均衡なクラスを適切に補正した後、ランダムフォレストモデルをトレーニングし、テストセットでの性能を評価しています。

ディスカッション
コメント一覧
まだ、コメントがありません