【发布时间】:2021-11-04 20:28:10
【问题描述】:
我正在使用 ColumnTransformer 为模型构建管道。这就是我的管道的样子,
from sklearn.preprocessing import StandardScaler
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder,OrdinalEncoder,MinMaxScaler
from sklearn.impute import KNNImputer
imputer_transformer = ColumnTransformer([
('knn_imputer',KNNImputer(n_neighbors=5),[0,3,4,6,7])
],remainder='passthrough')
category_transformer = ColumnTransformer([
("kms_driven_engine_min_max_scaler",MinMaxScaler(),[0,6]),
("owner_ordinal_enc",OrdinalEncoder(categories=[['fourth','third','second','first']],handle_unknown='ignore',dtype=np.int16),[3]),
("brand_location_ohe",OneHotEncoder(sparse=False,handle_unknown='ignore'),[2,5]),
],remainder='passthrough')
def build_pipeline_with_estimator(estimator):
return Pipeline([
('imputer',imputer_transformer),
('category_transformer',category_transformer),
('estimator',estimator),
])
这就是我的数据集的样子,
kms_driven owner location mileage power brand engine age
34000.0 first other NaN 12.0 Yamaha 150.0 9
28000.0 first other 72.0 7.0 Hero 100.0 16
5947.0 first other 53.0 19.0 Bajaj NaN 4
11000.0 first delhi 40.0 19.8 Royal Enfield 350.0 7
13568.0 first delhi 63.0 14.0 Suzuki 150.0 5
这就是我在管道中使用 LinearRegression 的方式。
linear_regressor = build_pipeline_with_estimator(LinearRegression())
linear_regressor.fit(X_train,y_train)
print('Linear Regression Train Performance.\n')
print(model_perf(linear_regressor,X_train,y_train))
print('Linear Regression Test Performance.\n')
print(model_perf(linear_regressor,X_test,y_test))
现在,每当我尝试对管道应用线性回归时,都会出现此错误,
ValueError: 无法将字符串转换为浮点数:'bangalore'
“banglore”是位置功能中的价值之一,我正在尝试一次性编码,但它失败了,我无法弄清楚这里出了什么问题。任何帮助将不胜感激。
【问题讨论】:
-
@MichaelSzczesny,正如你所说,我已经更新了我的问题。管道之间没有任何转换后的数据。我只在管道中做所有事情。请原谅我的错误,我正在努力学习这些东西。
-
@MichaelSzczesny 我不确定该链接是否是我正在寻找的。我想要的一件事是这是将 OneHotEncoding 与管道一起使用的方式?Sklearn 的文档对此不是很好。
标签: python scikit-learn one-hot-encoding