前提・実現したいこと
マルチクラスの分類問題において、
例えば、取りうるラベルは0~4の5種類で既知とします。
手元のデータを分割して検討する場合、分割した学習データが03の4ラベルになった場合、4分類されます。4の5種のラベルが存在しているので、評価ができません。
分割した残りを評価データとした場合、こちらには0
逆に学習した結果は5分類の確率を返し、評価データ内に4分類しか存在しない場合もあると思います。
こういったケースの場合は評価方法で悩んでいます。
皆様はどうやって解決していますか、ご教授ください。
発生している問題・エラーメッセージ
ValueError: y_true and y_pred contain different number of classes 5, 4. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [0 1 2 3 4]
該当のソースコード
python
1import pandas as pd 2import numpy as np 3 4from sklearn import linear_model 5from sklearn.metrics import log_loss 6 7 8LR_type_param = { 9 "random_state":0, 10 "solver":"saga", 11 "multi_class":"auto", 12 "penalty":"l2", 13 "C":2, 14 15} 16#評価データが5種のラベルを持ち、学習データ上に4種しか存在しない場合 17X_train = pd.DataFrame(np.arange(16).reshape(4, 4)) 18y_train=pd.Series([0,1,2,3]) 19X_eval = pd.DataFrame(np.arange(20).reshape(5, 4)) 20y_eval = pd.Series([0,1,2,3,4]) 21 22model_1 = linear_model.LogisticRegression(**LR_type_param) 23pred=model_1.fit(X_train, y_train).predict_proba(X_eval) 24logloss = log_loss(y_eval,pred) #これがエラーになります。 25 26#評価データが4種のラベルを持ち、学習データ上に5種存在する場合 27X_train = pd.DataFrame(np.arange(20).reshape(5, 4)) 28y_train=pd.Series([0,1,2,3,4]) 29X_eval = pd.DataFrame(np.arange(16).reshape(4, 4)) 30y_eval = pd.Series([0,1,2,3]) 31 32model_1 = linear_model.LogisticRegression(**LR_type_param) 33pred=model_1.fit(X_train, y_train).predict_proba(X_eval) 34logloss = log_loss(y_eval,pred) #これがエラーになります。
試したこと
「評価データが5種のラベルを持ち、学習データ上に4種しか存在しない場合」
のケースでは、予測値の4種の確率に対して0埋めしたデータを結合して、5種の分類に拡張すれば良いと考えました。
「評価データが5種のラベルを持ち、学習データ上に4種しか存在しない場合」
のケースでは、(このテストコードの場合)4のデータを足せば出来そうですが、その分誤差も出ると思うので、
いい方法が分からない状態です。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/26 05:23