データの不均衡を解消するためにオーバーサンプリングを行う
データの不均衡を解消するためにオーバーサンプリングを行うことで、モデルの性能を向上させることができます。以下に、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クラスを使ってオーバーサンプリングを行い、その後にモデルの学習と評価を行っています。これにより、データの不均衡を解消し、モデルの性能を向上させることができるでしょう。

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