使用分类数据进行回归时发现未知类别
Found unknown categories when doing regression with categorical data
我正在使用 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
我做错了什么?
我知道问题出在转换上,但我不知道我做错了什么。
有两种可能的解决方案:
- 在 train/test 拆分期间进行 分层 :
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'])
我正在使用 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
我做错了什么? 我知道问题出在转换上,但我不知道我做错了什么。
有两种可能的解决方案:
- 在 train/test 拆分期间进行 分层 :
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'])