Python ValueError: 不明なラベル タイプ: 'continuous'

Salman Mehmood 2023年6月21日
  1. Python での ValueError: Unknown label type: 'continuous' の原因
  2. Scikit の LabelEncoder() 関数を使用して ValueError: Unknown label type: 'continuous' を修正する
  3. データを評価して修正する ValueError: Unknown label type: 'continuous'
Python ValueError: 不明なラベル タイプ: 'continuous'

この記事では、Python の ValueError: Unknown label type: 'continuous' エラーの原因と解決策に取り組みます。

Python での ValueError: Unknown label type: 'continuous' の原因

Python インタープリターは、sklearn インポートされた分類子を連続ターゲット変数でトレーニングしようとすると、このエラーをスローします。

K Nearest Neighbor、デシジョン ツリー、ロジスティック回帰などの分類子は、入力変数のクラスを予測します。 クラス変数は、0 または 1True or FalsePass or Fail などの離散形式またはカテゴリ形式です。

sklearn インポートされた分類アルゴリズム、つまりロジスティック回帰が連続ターゲット変数でトレーニングされている場合、ValueError: Unknown label type:'continuous' がスローされます。

コード:

import numpy as np
from sklearn.linear_model import LogisticRegression

input_var = np.array([[1.1, 1.2, 1.5, 1.6], [0.5, 0.9, 0.6, 0.8]])
target_var = np.array([1.4, 0.4])
classifier_logistic_regression = LogisticRegression()
classifier_logistic_regression.fit(input_var, target_var)

出力:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Input In [6], in <module>
----> 1 lr.fit(x,y)

File c:\users\hp 840 g3\appdata\local\programs\python\python39\lib\site-packages\sklearn\linear_model\_logistic.py:1516, in LogisticRegression.fit(self, X, y, sample_weight)
   1506     _dtype = [np.float64, np.float32]
   1508 X, y = self._validate_data(
   1509     X,
   1510     y,
   (...)
   1514     accept_large_sparse=solver not in ["liblinear", "sag", "saga"],
   1515 )
-> 1516 check_classification_targets(y)
   1517 self.classes_ = np.unique(y)
   1519 multi_class = _check_multi_class(self.multi_class, solver, len(self.classes_))

File c:\users\hp 840 g3\appdata\local\programs\python\python39\lib\site-packages\sklearn\utils\multiclass.py:197, in check_classification_targets(y)
    189 y_type = type_of_target(y)
    190 if y_type not in [
    191     "binary",
    192     "multiclass",
   (...)
    195     "multilabel-sequences",
    196 ]:
--> 197     raise ValueError("Unknown label type: %r" % y_type)

ValueError: Unknown label type: 'continuous'

ターゲット ラベル y としての浮動小数点値は、ロジスティック回帰分類器に渡されます。この分類器は、カテゴリカルまたは離散クラス ラベルを受け入れます。 その結果、コードは lr.fit() 関数でエラーをスローし、モデルは指定されたデータでのトレーニングを拒否します。

Scikit の LabelEncoder() 関数を使用して ValueError: Unknown label type: 'continuous' を修正する

LabelEncoder() 関数は、連続ターゲット変数を離散またはカテゴリ ラベルにエンコードします。

分類子はこれらの値を受け入れるようになりました。 分類器は、指定されたデータでトレーニングし、出力クラスを予測します。

コード:

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import preprocessing
from sklearn import utils

input_var = np.array([[1.1, 1.2, 1.5, 1.6], [0.5, 0.9, 0.6, 0.8]])
target_var = np.array([1.4, 0.4])
predict_var = np.array([[1.3, 1.7, 1.8, 1.4], [0.2, 0.6, 0.3, 0.4]])
encoded = preprocessing.LabelEncoder()
encoded_target = encoded.fit_transform(target_var)
print(encoded_target)
classifier_logistic_regression = LogisticRegression()
classifier_logistic_regression.fit(input_var, encoded_target)
predict = classifier_logistic_regression.predict(predict_var)
print(predict)

出力:

[1 0]
[1 0]

ターゲット変数 target_var の浮動小数点値は、LabelEncoder() 関数を使用して離散またはカテゴリ、つまり encoded_target 値にエンコードされます。

分類子はこれらの値を受け入れるようになりました。 分類子は、predict_var で示される新しいデータのクラスを予測するようにトレーニングされます。

データを評価して修正する ValueError: Unknown label type: 'continuous'

場合によっては、データを注意深く調べて、問題が回帰の問題なのか分類の問題なのかを判断する必要があります。 住宅価格などの一部の出力変数は、分類または離散化できません。

このような場合、問題は回帰の 1つです。 回帰モデルは連続ターゲット変数を受け入れるため、ターゲット変数をエンコードする必要はありません。

コード:

import numpy as np
from sklearn.linear_model import LinearRegression

input_var = np.array([[1.1, 1.2, 1.5, 1.6], [0.5, 0.9, 0.6, 0.8]])
target_var = np.array([1.4, 0.4])
predict_var = np.array([[1.3, 1.7, 1.8, 1.4], [0.2, 0.6, 0.3, 0.4]])
linear_Regressor_model = LinearRegression()
linear_Regressor_model.fit(input_var, target_var)
predict = linear_Regressor_model.predict(predict_var)
print(predict)

出力:

[ 1.6        -0.05263158]

出力変数 target_var の浮動小数点値は、問題が回帰であることを示しています。 モデルは、クラスではなく入力変数の値を予測する必要があります。

線形回帰モデルがトレーニングされ、新しいデータの結果値が予測されます。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Python Error