У меня есть фрейм данных со всеми категориальными столбцами, которые я кодирую, используя oneHotEncoder
из sklearn.preprocessing
. Мой код, как показано ниже:
from sklearn.preprocessing import OneHotEncoder
from sklearn.pipeline import Pipeline
steps = [('OneHotEncoder', OneHotEncoder(handle_unknown ='ignore')) ,('LReg', LinearRegression())]
pipeline = Pipeline(steps)
Как видно из OneHotEncoder
, параметр handle_unknown принимает либо error
, либо ignore
. Я хочу знать, если есть способ выборочно игнорировать неизвестные категории для определенных столбцов, тогда как дать ошибку для других столбцов?
import pandas as pd
df = pd.DataFrame({'Country':['USA','USA','IND','UK','UK','UK'],
'Fruits':['Apple','Strawberry','Mango','Berries','Banana','Grape'],
'Flower': ['Rose','Lily','Orchid','Petunia','Lotus','Dandelion'],
'Result':[1,2,3,4,5,6,]})
from sklearn.preprocessing import OneHotEncoder
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
steps = [('OneHotEncoder', OneHotEncoder(handle_unknown ='ignore')) ,('LReg', LinearRegression())]
pipeline = Pipeline(steps)
from sklearn.model_selection import train_test_split
X = df[["Country","Flower","Fruits"]]
Y = df["Result"]
X_train, X_test, y_train, y_test = train_test_split(X,Y,test_size=0.3, random_state=30, shuffle =True)
print("X_train.shape:", X_train.shape)
print("y_train.shape:", y_train.shape)
print("X_test.shape:", X_test.shape)
print("y_test.shape:", y_test.shape)
pipeline.fit(X_train,y_train)
y_pred = pipeline.predict(X_test)
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
#Mean Squared Error:
MSE = mean_squared_error(y_test,y_pred)
print("MSE", MSE)
#Root Mean Squared Error:
from math import sqrt
RMSE = sqrt(MSE)
print("RMSE", RMSE)
#R-squared score:
R2_score = r2_score(y_test,y_pred)
print("R2_score", R2_score)
В этом случае для всех столбцов, которые равны Country
, Fruits
и Flowers
, если появляется новое значение, модель все равно сможет предсказать вывод.
Я хочу знать, есть ли способ игнорировать неизвестные категории для Fruits
и Flowers
, но, тем не менее, вызвать ошибку для неизвестного значения в столбце Country
?