【问题标题】:Value Error: y contains previously unseen labels:值错误:y 包含以前看不见的标签:
【发布时间】:2021-05-29 11:09:13
【问题描述】:

我使用了Decision Tree Classifier,我想输入我的input string 而不是integer 值,但它给了我error 之类的:

Traceback (most recent call last):
  File "D:/backup code for odoo project/New folder/New folder/main.py", line 38, in <module>
    theme_res = lebel_encoder.transform(theme_input)
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\preprocessing\_label.py", line 277, in transform
    _, y = _encode(y, uniques=self.classes_, encode=True)
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\preprocessing\_label.py", line 121, in _encode
    return _encode_numpy(values, uniques, encode,
  File "C:\Users\Dell\AppData\Local\Programs\Python\Python38\lib\site-packages\sklearn\preprocessing\_label.py", line 50, in _encode_numpy
    raise ValueError("y contains previously unseen labels: %s"
ValueError: y contains previously unseen labels: ['Food', 'cafe', 'sticky'] 

代码:

import pandas as pd
from sklearn.preprocessing import LabelEncoder
from sklearn import tree
df = pd.read_csv("new_data.csv", encoding='latin1')

inputs = df.drop('selected_theme', axis='columns')
target = df['selected_theme']

lebel_encoder = LabelEncoder()

inputs['main_cat_n'] = lebel_encoder.fit_transform(inputs['main_cat'])
inputs['sub_cat_n'] = lebel_encoder.fit_transform(inputs['sub_cat'])
inputs['nav_bar_n'] = lebel_encoder.fit_transform(inputs['nav_bar'])

inputs_n = inputs.drop(['main_cat', 'sub_cat', 'nav_bar'], axis='columns')

 model = tree.DecisionTreeClassifier()
 model.fit(inputs_n, target)
 print(model.score(inputs_n, target))

 theme_input = ['Food', 'cafe', 'sticky']
 theme_res = lebel_encoder.transform(theme_input)
 result_theme = model.predict(theme_res)
 print(result_theme)

【问题讨论】:

    标签: python machine-learning decision-tree label-encoding


    【解决方案1】:

    错误发生在之前分类器,它发生在这一行

     theme_res = lebel_encoder.transform(theme_input)
    

    错误消息告诉您,您的label_encoder 从未见过“食物”、“咖啡馆”、“粘性”等类别。发生这种情况是因为您重写了 LabelEncoders。您应该为不同的功能使用单独的 LabelEncoders,例如:

    categorical_features = ['main_cat', 'sub_cat', 'nav_bar']
    encoders = dict()
    for cat in categorical_features:
        encoders[cat] = LabelEncoder()
        inputs[f'{cat}_n'] = encoders[cat].fit_transform(inputs[cat])
    
    inputs_n = inputs.drop(['main_cat', 'sub_cat', 'nav_bar'], axis='columns')
    ...
    

    【讨论】:

    • 更好的是,一次使用单个 OrdinalEncoderfit_transform 所有这些列。 LabelEncoder 用于标签/目标/因变量。
    猜你喜欢
    • 2021-05-27
    • 2020-02-03
    • 2021-07-07
    • 2016-08-12
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多