多クラス分類問題としてモデル構築
多クラス分類問題としてモデルを構築します。多クラス分類の場合、出力層の活性化関数はsoftmax関数を使用し、損失関数はsparse_categorical_crossentropyを使用します。以下が修正されたコードです:
python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler, LabelEncoder
from keras.models import Sequential
from keras.layers import Dense
# データの読み込み
data = pd.read_csv(r'/home/share/temp/shipping_size_traning.csv')
# カテゴリカル変数のエンコード
category_label_encoder = LabelEncoder()
data['category_encoded'] = category_label_encoder.fit_transform(data['category'])
product_name_label_encoder = LabelEncoder()
data['product_name_encoded'] = product_name_label_encoder.fit_transform(data['product_name'])
product_maker_number_label_encoder = LabelEncoder()
data['product_maker_number_encoded'] = product_maker_number_label_encoder.fit_transform(data['product_maker_number'])
# 目的変数と説明変数の分割
X = data.drop(['size', 'product_name', 'product_maker_number', 'original_product_code', 'category'], axis=1) # 説明変数
y = data['size'] # 目的変数
# データの標準化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# カテゴリカル変数をエンコードした結果の次元数を取得
num_categories = len(category_label_encoder.classes_)
num_product_names = len(product_name_label_encoder.classes_)
num_product_makers = len(product_maker_number_label_encoder.classes_)
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデルの構築
model = Sequential([
Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
Dense(64, activation='relu'),
Dense(num_categories + num_product_names + num_product_makers, activation='softmax') # クラスの総数に合わせる
])
# モデルのコンパイル
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# モデルのトレーニング
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
# モデルの評価
loss, accuracy = model.evaluate(X_test, y_test)
print("Test Loss:", loss)
print("Test Accuracy:", accuracy)
この修正により、多クラス分類の問題に適したモデルが構築されます。

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