0
Я хочу подать трубопровод с числовыми & категориальными переменными, как показано нижеКатегориальных переменные в трубопроводе
import numpy as np
import pandas as pd
from sklearn import linear_model, pipeline, preprocessing
from sklearn.feature_extraction import DictVectorizer
df = pd.DataFrame({'a':range(12), 'b':[1,2,3,1,2,3,1,2,3,3,1,2], 'c':['a', 'b', 'c']*4, 'd': ['m', 'f']*6})
y = df['a']
X = df[['b', 'c', 'd']]
создать индексы для числового
numeric = ['b']
numeric_indices = np.array([(column in numeric) for column in X.columns], dtype = bool)
& для категориальных переменных
categorical = ['c', 'd']
categorical_indices = np.array([(column in categorical) for column in X.columns], dtype = bool)
Затем я создаю конвейер
regressor = linear_model.SGDRegressor()
encoder = DictVectorizer(sparse = False)
estimator = pipeline.Pipeline(steps = [
('feature_processing', pipeline.FeatureUnion(transformer_list = [
#numeric
('numeric_variables_processing', pipeline.Pipeline(steps = [
('selecting', preprocessing.FunctionTransformer(lambda data: data[:, numeric_indices])),
('scaling', preprocessing.StandardScaler(with_mean = 0.))
])),
#categorical
('categorical_variables_processing', pipeline.Pipeline(steps = [
('selecting', preprocessing.FunctionTransformer(lambda data: data[:, categorical_indices])),
('DictVectorizer', encoder)
])),
])),
('model_fitting', regressor)
]
)
и я получаю
estimator.fit(X, y)
ValueError: could not convert string to float: 'f'
Я знаю, что я должен применить encoder.fit() в трубопроводе, но не понимаю, как применять его Или мы ненавидим использовать предварительной обработки .OneHotEncoder(), но снова нам нужно преобразовать строку в float
Как его улучшить?