kaggleの雑記

LightGBMが動かない時のTipsを集めました

lightgbm tips

Label must be in [0, x), but found y in label

LightGBMError: Label must be in [0, x), but found y in labelが出た時の対処法LightGBMError: Label must be in ....と言われて嵌った話 lightgbmを初めて使った頃に下記のよ...

multiclass(多分類問題)を解くように設定しているのに、指定した分類数よりも実際に読み込ませたデータの分類数が多い時のエラー。

たとえば犬と猫とウサギを3種類見分ける分類問題だと、LightGBM.trainに読み込ませるパラメータは

params = {"objective": "multiclass", "num_class": 3, ...<etc>}

と書ける。しかし実際のデータが犬・猫・うさぎ・豚など4種類のデータが読み込まれた時に発生するエラー

ValueError: DataFrame.dtypes for data must be int, float or bool. Did not expect the data types in fields

pandas.DataFrameの値がLightGBMでは取り込めない文字列型になっている時に発生するエラー。

StandardScalerなどで文字列を数字に変換し、データ型をカテゴリに変更するとエラーは発生しなくなる。

scalar = StandardScaler()
scalar.fit(X[num_features])
for df in [X, test]:
  df[num_features] = scalar.transform(df[num_features])
  le = preprocessing.LabelEncoder()
  for column in cat_features:
    le.fit(df[column])
    label_encoded_column = le.transform(df[column])
    df[column] = pd.Series(label_encoded_column).astype('category')
ABOUT ME
hirayuki
今年で社会人3年目になります。 日々体当たりで仕事を覚えています。 テーマはIT・教育です。 少しでも技術に親しんでもらえるよう、noteで4コマ漫画も書いています。 https://note.mu/hirayuki