データの不均衡を解消するためにオーバーサンプリングを行う

データの不均衡を解消するためにオーバーサンプリングを行うことで、モデルの性能を向上させることができます。以下に、SMOTEを使ってオーバーサンプリングを行う方法を示します。

まず、SMOTEを使うために imbalanced-learn ライブラリをインストールする必要があります。


pip install -U imbalanced-learn

次に、SMOTEを使ってデータをオーバーサンプリングします。

python
from imblearn.over_sampling import SMOTE
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
import pandas as pd
from scipy.sparse import hstack

# データの読み込み
data = pd.read_csv('/home/share/temp/shipping_size_traning_add_category.csv')

# 商品名とカテゴリーIDを特徴量として取得
X_product_name = data['product_name']
X_category_id = data['name']
X_description = data['description']
y = data['size']

# テキストデータを単語の出現回数に変換するCountVectorizerを定義
vectorizer = CountVectorizer()

# 商品名のテキストデータを特徴量に変換
X_product_name_vectorized = vectorizer.fit_transform(X_product_name)

# カテゴリー名のテキストデータを特徴量に変換
X_category_id_vectorized = vectorizer.fit_transform(X_category_id)

# descriptionのテキストデータを特徴量に変換
X_desc_category_id_vectorized = vectorizer.fit_transform(X_description)

# 商品名のテキストデータとカテゴリーIDの特徴量を結合
X_combined = hstack([X_product_name_vectorized, X_category_id_vectorized, X_desc_category_id_vectorized])

# オーバーサンプリングを行う
smote = SMOTE(random_state=42)
X_resampled, y_resampled = smote.fit_resample(X_combined, y)

# データの分割
X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2, random_state=42)

# ナイーブベイズ分類器を定義
nb_classifier = MultinomialNB()

# ナイーブベイズ分類器を訓練
nb_classifier.fit(X_train, y_train)

# テストデータで予測
y_pred = nb_classifier.predict(X_test)

# 分類器の評価
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# 分類器の詳細な評価
print(classification_report(y_test, y_pred))

このコードでは、imbalanced-learnライブラリのSMOTEクラスを使ってオーバーサンプリングを行い、その後にモデルの学習と評価を行っています。これにより、データの不均衡を解消し、モデルの性能を向上させることができるでしょう。

未分類

Posted by ぼっち