Найдены неизвестные категории при выполнении регрессии с категориальными данными - PullRequest
0 голосов
/ 01 ноября 2019

Я делаю линейную регрессию с ScikitLearn и Python. Мои данные имеют категориальные значения, поэтому я использовал кодировку.

df = df[['Lokacija','Kvadratura', 'Stanje', 'Kategorija',
         'Grejanje', 'Ukupno spratova','Sprat','Ukupna cena']]

encoder = ColumnTransformer(transformers=[
    ('onehot', OneHotEncoder(), ['Lokacija', 'Stanje', 'Grejanje']),
    ('scale', StandardScaler(), ['Kvadratura','Kategorija', 'Ukupno spratova', 'Sprat'])],
     remainder='passthrough')

x = df.iloc[:,:-1]
x = encoder.fit_transform(x)
y = df.iloc[:,-1]

Я хотел найти оптимальное количество функций, поэтому я использовал RFE

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)

for i in range(1,5):
    final_rfe = RFE(LinearRegression(), i)
    model = final_rfe.fit(x_train, y_train)

#ERROR IN LINE BELOW!

    input_par = encoder.transform(pd.DataFrame([{
                                                "Lokacija": 'Vracar', 
                                                'Kvadratura': 56,
                                                'Stanje': 'Novogradnja',
                                                'Grejanje': 'Centralno grejanje',
                                                'Ukupno spratova': 6,
                                                'Sprat': 3}]))

    my_prediction = model.prediction(input_par)
    reg_score = model.score(x_test, y_test)
    print(my_prediction[0], reg_score)

Но когда я сделал это, Я получил эту ошибку:

ValueError: Found unknown categories ['Vracar'] in column 0 during transform

Что я делаю не так? Я знаю, что проблема в трансформации, но я не знаю, что я делаю не так.

1 Ответ

1 голос
/ 01 ноября 2019

Существует два возможных решения:

  • Do стратификация во время разделения поезда / теста: x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, stratify=df[['Lokacija', 'Stanje', 'Grejanje']], random_state=42)
  • Изменить способ обработки неизвестная категориальная особенность : ('onehot', OneHotEncoder(handle_unknown='ignore'), ['Lokacija', 'Stanje', 'Grejanje'])
...