大してモデルの精度を向上できない精度60%位までが限界の状態。。どうしたらよいか。
モデルの精度を向上させるためには、いくつかのアプローチを検討することが重要です。以下は、モデルの精度を向上させるための一般的な戦略です。
特徴量エンジニアリング:
より良い特徴量を作成し、モデルに提供することが精度向 ...生成モデルを使用してデータを増やす場合、オーバーサンプリングやアンダーサンプリングと似た結果になるだけだと思うが
確かに、生成モデルを使用してデータを増やす場合、オーバーサンプリングやアンダーサンプリングを行う場合と同様に、その効果が限定される場合があります。生成モデルを使用すると、元のデータと似たような分布を持つ新しいデータが生成されますが、そ ...
生成モデルの利用って、その生成したデータは正しいのか?
生成モデルを使用した場合、生成されたデータが本物のデータと同じように「正しい」と見なされるかどうかは、その生成モデルの性能とデータの特性に依存します。生成モデルは、本物のデータの分布を学習し、それに基づいて新しいデータを生成します。生 ...
クラスの不均衡は、オーバーサンプリングしようがアンダーサンプリングしようが、大して精度に影響はなかった。 そもそものデータ数が少ない事が原因だろうか?
クラスの不均衡は、データ数が少ない場合やクラス間の重要性の違いなどによって引き起こされることがあります。そのため、データ数が少ないことが原因の1つとして考えられます。不均衡なクラス分布を持つデータセットでは、一般的にマイノリティクラス ...
パラメーターチューニングして
パラメーターチューニングを行うためには、LightGBMのハイパーパラメータを調整する必要があります。以下は、LightGBMで一般的に調整される主なハイパーパラメータのいくつかです:
num_leaves:木の最大葉数。モデル ...Precision、Recall、F1 Score、そしてクラスごとの性能を確認
次のコードを使用して、Precision、Recall、F1 Score、およびクラスごとの性能を確認できます。これには、classification_report 関数を使用します。
pythonfrom sklea ...
1次元のものは、標準化してはいけない?
1次元の特徴量(説明変数)を標準化する必要は通常ありません。一般的に、1次元のデータは標準化すると情報が失われる可能性が高くなります。特に、1次元のデータが正規分布に従っている場合、標準化は意味がありません。
標準化は、特 ...
多クラス分類問題としてモデル構築
多クラス分類問題としてモデルを構築します。多クラス分類の場合、出力層の活性化関数はsoftmax関数を使用し、損失関数はsparse_categorical_crossentropyを使用します。以下が修正されたコードです:
p ...Xは説明変数の行列であり、yは目的変数の列ベクトル
提供されたデータのXおよびy配列は次のようになっています:
pythonX = , , , ..., , , ]y = , , , ..., , , ]Xは説明変数の行列であり、yは目的変数の列ベクトルです。それぞれのサン ...
AttributeError: ‘Series’ object has no attribute ‘reshape’
reshapeメソッドをSeriesオブジェクトに適用することができないため、AttributeErrorが発生しています。reshapeメソッドは、NumPy配列にのみ適用できます。
解決策としては、y をNumPy配列 ...
np.unique(y_train) array([ 60, 80, 100, 120, 140, 160])
提供していただいた情報によれば、訓練データの目的変数 y_train には6つの異なるクラスが存在し、それぞれのクラスは のいずれかの値を持っています。
エラーメッセージによると、sparse_categorical_c ...
————————————————————————— InvalidArgumentError Traceback (most recent call last) Cell In[232], line 42 39 model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) 41 # モデルのトレーニング —> 42 model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) 44 # モデルの評価 45 loss, accuracy = model.evaluate(X_test, y_test) File /home/share/temp/venv/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs) 67 filtered_tb = _process_traceback_frames(e.__traceback__) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` —> 70 raise e.with_traceback(filtered_tb) from None 71 finally: 72 del filtered_tb File /home/share/temp/venv/lib/python3.8/site-packages/tensorflow/python/eager/execute.py:53, in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 51 try: 52 ctx.ensure_initialized() —> 53 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, 54 inputs, attrs, num_outputs) 55 except core._NotOkStatusException as e: 56 if name is not None: … File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/backend.py”, line 5762, in sparse_categorical_crossentropy res = tf.nn.sparse_softmax_cross_entropy_with_logits( Node: ‘sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits’ Received a label value of 160 which is outside the valid range of [0, 6). Label values: 100 60 100 100 120 80 60 60 60 120 60 120 160 120 60 60 60 100 60 100 80 100 60 60 100 160 80 100 60 60 160 60 [[{{node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]] [Op:__inference_train_function_166480]
エラーメッセージによると、ラベルの値が有効な範囲外にあることが問題であることが示されています。sparse_categorical_crossentropyのエラーメッセージは、ラベルの値が [0, 6) の範囲外にあることを報告して ...
0 100.0 1 120.0 2 80.0 3 80.0 4 100.0 … 4043 80.0 4044 160.0 4045 120.0 4046 140.0 4047 160.0
提供していただいた目的変数 y の値を見ると、整数値のサイズが含まれています。これらの値は連続的であり、モデルによって予測されるクラスのインデックスと一致するわけではありません。そのため、モデルの出力層の活性化関数と損失関数との整合性 ...
————————————————————————— InvalidArgumentError Traceback (most recent call last) Cell In[227], line 48 45 model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) 47 # モデルのトレーニング —> 48 model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) 50 # モデルの評価 51 loss, accuracy = model.evaluate(X_test, y_test) File /home/share/temp/venv/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs) 67 filtered_tb = _process_traceback_frames(e.__traceback__) 68 # To get the full stack trace, call: 69 # `tf.debugging.disable_traceback_filtering()` —> 70 raise e.with_traceback(filtered_tb) from None 71 finally: 72 del filtered_tb File /home/share/temp/venv/lib/python3.8/site-packages/tensorflow/python/eager/execute.py:53, in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 51 try: 52 ctx.ensure_initialized() —> 53 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, 54 inputs, attrs, num_outputs) 55 except core._NotOkStatusException as e: 56 if name is not None: InvalidArgumentError: Graph execution error: Detected at node ‘sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits’ defined at (most recent call last): File “/usr/lib/python3.8/runpy.py”, line 194, in _run_module_as_main return _run_code(code, main_globals, None, File “/usr/lib/python3.8/runpy.py”, line 87, in _run_code exec(code, run_globals) File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel_launcher.py”, line 18, in <module> app.launch_new_instance() File “/home/share/temp/venv/lib/python3.8/site-packages/traitlets/config/application.py”, line 1075, in launch_instance app.start() File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/kernelapp.py”, line 739, in start self.io_loop.start() File “/home/share/temp/venv/lib/python3.8/site-packages/tornado/platform/asyncio.py”, line 205, in start self.asyncio_loop.run_forever() File “/usr/lib/python3.8/asyncio/base_events.py”, line 570, in run_forever self._run_once() File “/usr/lib/python3.8/asyncio/base_events.py”, line 1859, in _run_once handle._run() File “/usr/lib/python3.8/asyncio/events.py”, line 81, in _run self._context.run(self._callback, *self._args) File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/kernelbase.py”, line 542, in dispatch_queue await self.process_one() File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/kernelbase.py”, line 531, in process_one await dispatch(*args) File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/kernelbase.py”, line 437, in dispatch_shell await result File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/ipkernel.py”, line 359, in execute_request await super().execute_request(stream, ident, parent) File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/kernelbase.py”, line 775, in execute_request reply_content = await reply_content File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/ipkernel.py”, line 446, in do_execute res = shell.run_cell( File “/home/share/temp/venv/lib/python3.8/site-packages/ipykernel/zmqshell.py”, line 549, in run_cell return super().run_cell(*args, **kwargs) File “/home/share/temp/venv/lib/python3.8/site-packages/IPython/core/interactiveshell.py”, line 3009, in run_cell result = self._run_cell( File “/home/share/temp/venv/lib/python3.8/site-packages/IPython/core/interactiveshell.py”, line 3064, in _run_cell result = runner(coro) File “/home/share/temp/venv/lib/python3.8/site-packages/IPython/core/async_helpers.py”, line 129, in _pseudo_sync_runner coro.send(None) File “/home/share/temp/venv/lib/python3.8/site-packages/IPython/core/interactiveshell.py”, line 3269, in run_cell_async has_raised = await self.run_ast_nodes(code_ast.body, cell_name, File “/home/share/temp/venv/lib/python3.8/site-packages/IPython/core/interactiveshell.py”, line 3448, in run_ast_nodes if await self.run_code(code, result, async_=asy): File “/home/share/temp/venv/lib/python3.8/site-packages/IPython/core/interactiveshell.py”, line 3508, in run_code exec(code_obj, self.user_global_ns, self.user_ns) File “/tmp/ipykernel_11711/3802099017.py”, line 48, in <module> model.fit(X_train, y_train, epochs=10, batch_size=32, validation_data=(X_test, y_test)) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/utils/traceback_utils.py”, line 65, in error_handler return fn(*args, **kwargs) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/training.py”, line 1742, in fit tmp_logs = self.train_function(iterator) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/training.py”, line 1338, in train_function return step_function(self, iterator) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/training.py”, line 1322, in step_function outputs = model.distribute_strategy.run(run_step, args=(data,)) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/training.py”, line 1303, in run_step outputs = model.train_step(data) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/training.py”, line 1081, in train_step loss = self.compute_loss(x, y, y_pred, sample_weight) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/training.py”, line 1139, in compute_loss return self.compiled_loss( File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/engine/compile_utils.py”, line 265, in __call__ loss_value = loss_obj(y_t, y_p, sample_weight=sw) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/losses.py”, line 142, in __call__ losses = call_fn(y_true, y_pred) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/losses.py”, line 268, in call return ag_fn(y_true, y_pred, **self._fn_kwargs) File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/losses.py”, line 2354, in sparse_categorical_crossentropy return backend.sparse_categorical_crossentropy( File “/home/share/temp/venv/lib/python3.8/site-packages/keras/src/backend.py”, line 5762, in sparse_categorical_crossentropy res = tf.nn.sparse_softmax_cross_entropy_with_logits( Node: ‘sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits’ Received a label value of 140 which is outside the valid range of [0, 6). Label values: 60 60 60 60 80 60 100 60 60 100 100 60 120 60 120 100 80 140 80 140 140 60 120 120 100 60 80 100 100 60 60 140 [[{{node sparse_categorical_crossentropy/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}}]] [Op:__inference_train_function_164524]
エラーが発生しています。エラーメッセージを見ると、ラベルの値が有効な範囲外であることが原因のようです。具体的には、ラベルの値が [0, 6) の範囲外にあることが示されています。
これは、目的変数 y_train および ...
# 必要なライブラリのインポート import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder from keras.models import Sequential from keras.layers import Dense # データの読み込み # data = pd.read_csv(‘your_data.csv’) # データのファイルパスを指定してください # データの読み込み 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’], axis=1) # 説明変数 y = data[‘size’] # 目的変数 # 訓練データとテストデータに分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) X_train=X_train.astype(float) X_test=X_test.astype(float) y_train=y_train.astype(float) y_test=y_test.astype(float) # モデルの構築 model = Sequential([ Dense(64, activation=’relu’, input_shape=(X_train.shape[1],)), Dense(64, activation=’relu’), Dense(len(np.unique(y)), activation=’softmax’) ]) # モデルのコンパイル model.compile(optimizer=’adam’, loss=’sparse_categorical_crossentropy’, metrics=[‘accuracy’]) # モデルのトレーニング model.fit(X_train, y_train, epochs=10, 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)
このコードは、ニューラルネットワークを使用してサイズを予測するモデルを構築し、トレーニングし、評価します。以下はコードの概要です。
必要なライブラリをインポートします。CSVファイルからデータを読み込みます。
カテ ...
Best Parameters: {‘classifier__alpha’: 0.01, ‘classifier__fit_prior’: False} Accuracy: 0.6734366648850882 precision recall f1-score support 60 0.63 0.70 0.66 303 80 0.61 0.61 0.61 335 100 0.62 0.47 0.54 289 120 0.73 0.69 0.71 326 140 0.64 0.79 0.70 304 160 0.82 0.77 0.80 314 accuracy 0.67 1871 macro avg 0.67 0.67 0.67 1871 weighted avg 0.68 0.67 0.67 1871 Random Forest Accuracy: 0.9706039551042224 Random Forest Classification Report: precision recall f1-score support 60 1.00 1.00 1.00 303 80 0.94 0.98 0.96 335 100 0.99 0.95 0.97 289 120 1.00 0.98 0.99 326 140 0.95 0.95 0.95 304 160 0.95 0.96 0.96 314 … accuracy 0.97 1871 macro avg 0.97 0.97 0.97 1871 weighted avg 0.97 0.97 0.97 1871 こんなに性能よくなるか?
素晴らしい結果ですね!ナイーブベイズとランダムフォレストの両方で非常に高い性能が得られたようです。
ナイーブベイズは、比較的単純なモデルでありながら、テキストデータなどの高次元の特徴量に対しても効果的な性能を発揮することが ...
————————————————————————— ValueError Traceback (most recent call last) Cell In[134], line 111 107 rf_classifier.fit(X_rf, y_test) 110 # テストデータでの予測を取得 –> 111 y_pred_rf = rf_classifier.predict(X_test) 113 # 分類器の評価 114 accuracy_rf = accuracy_score(y_test, y_pred_rf) File /home/share/temp/venv/lib/python3.8/site-packages/sklearn/ensemble/_forest.py:823, in ForestClassifier.predict(self, X) 802 def predict(self, X): 803 “”” 804 Predict class for X. 805 (…) 821 The predicted classes. 822 “”” –> 823 proba = self.predict_proba(X) 825 if self.n_outputs_ == 1: 826 return self.classes_.take(np.argmax(proba, axis=1), axis=0) File /home/share/temp/venv/lib/python3.8/site-packages/sklearn/ensemble/_forest.py:865, in ForestClassifier.predict_proba(self, X) 863 check_is_fitted(self) 864 # Check data –> 865 X = self._validate_X_predict(X) … 416 f”X has {n_features} features, but {self.__class__.__name__} ” 417 f”is expecting {self.n_features_in_} features as input.” 418 ) ValueError: X has 58302 features, but RandomForestClassifier is expecting 58303 features as input.
エラーのメッセージによると、ランダムフォレストの予測時に、入力データの特徴量の数が正しくないようです。具体的には、入力データに期待されている特徴量の数は58303ですが、実際の入力データには58302の特徴量が含まれています。 ...
rf_classifier = RandomForestClassifier() # 必要に応じて適切なハイパーパラメータを設定してください rf_classifier.fit(X_rf, y_test)に対する評価もして
ランダムフォレストの分類器をトレーニングした後に、その性能を評価することは重要です。一般的には、トレーニングデータセットとは別のテストデータセットを使用してモデルを評価します。以下は、トレーニング後にランダムフォレストの性能を評価する ...
X_testは、ナイーブベイス用に下処理されたものを使っているよね。 ランダムフォレストもその特徴量を全て使わないといけないってこと?
そうですね、ご指摘の通りです。ナイーブベイズでの特徴量の前処理は、おそらくテキストデータを単語の出現回数に変換するCountVectorizerを使用して行われているでしょう。そのため、ナイーブベイズ用に前処理された特徴量はテキストデ ...
X_test_with_nb_pred_proba (0, 566)0 (0, 2642)0 (0, 3256)0 (0, 3376)0 (0, 6006)0 (0, 6778)0 (0, 6853)0 (0, 6868)0 (0, 8486)0 (0, 10339)0 (0, 10985)0 (0, 11056)0 (0, 11061)0 (0, 11107)0 (0, 11117)0 (0, 11131)1 (0, 11200)1 (0, 11307)0 (0, 12145)0 (0, 14880)0 (0, 15759)2 (0, 19143)0 (0, 19781)0 (0, 19832)2 (0, 24705)0 … (1870, 53405)1 (1870, 54234)1 (1870, 57675)1 (1870, 58023)1
It looks like you’ve provided a sparse matrix representation where each row represents a document, and the colu ...
じゃあ何が原因だろうか
エラーメッセージから、モデルが期待している特徴量の数と実際の特徴量の数が異なっていることがわかります。これは、モデルに新しいデータを与える際に、特徴量の数が一致しないために生じている可能性があります。
具体的には、学習に使 ...
具体的にどの特徴量が足りていないのか、おおいのか判定できる?
はい、エラーメッセージには具体的な情報が含まれています。エラーメッセージによると、モデルが期待する特徴量の数は88432ですが、提供された特徴量の数は1561560です。この差異から、モデルが予測のために期待している特徴量数よりも、は ...