我正在嘗試使用線性回歸來預測USD的薪水。我有以下資料:
![ValueError:在轉換期間在第 3 列中發現未知類別 ['IR'、'HN'、'MT'、'PH'、'NZ'、'CZ'、'MD']](https://i.stack.imgur.com/TTzcv.png)
資料:
- 607條記錄
- 數值列: year、salary、salary in USD
- 分類欄目: 經驗、型別、居住地、貨幣、遠程作業、公司所在地、公司規模。
- 目標: 美元工資
預處理資料集:
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.compose import ColumnTransformer
# Columns to drop:
drop_cols = ['Currency', 'Company location', 'Salary', 'Title']
# Attributes of interest
num_attributes = ['Year']
one_hot_attributes = ['Experience', 'Type', 'Remote work', 'Residence', 'Company size']
# Drop columns:
data.drop(drop_cols, 1, inplace=True)
# Setup transformer for column:
preprocessor = ColumnTransformer([
('nums', StandardScaler(), num_attributes),
('one_hot', OneHotEncoder(drop='first', sparse=False), one_hot_attributes)],
remainder='passthrough')
管道:
from sklearn.pipeline import Pipeline
pipe = Pipeline(steps =[
('preprocessor', preprocessor),
('model', LinearRegression()),
])
pipe.fit(X_train, y_train)
執行預測:
prediction = pipe.predict(X_test)
錯誤:
ValueError: Found unknown categories ['IR', 'HN', 'MT', 'PH', 'NZ', 'CZ', 'MD'] in column 3 during transform
uj5u.com熱心網友回復:
您的測驗資料包含訓練期間從未見過的位置,但您使用的是 OneHotEncoder。您想如何表示這些從未見過的位置?
您需要在https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.htmlhandle_unknown中設定引數。默認情況下,它設定為。相反,您可以選擇,例如,您可以將其設定為(將其編碼為 0)或創建一個虛擬類別(然后您需要進行設定,以便將訓練資料中的稀有值映射到那里)OneHotEncoder errorignoreinfrequent_if_existmin_frequency
例如
# Setup transformer for column:
preprocessor = ColumnTransformer([
('nums', StandardScaler(), num_attributes),
('one_hot', OneHotEncoder(drop='first',
sparse=False,
handle_unknown='ignore'), one_hot_attributes)],
remainder='passthrough')
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516938.html
上一篇:dtreeviz框架的可視化問題
