Дать свой первый трубопровод для sklearn я наткнулся на некоторые вопросы, когда только подмножество столбцов помещается в трубопровод:sklearn в трубопроводе
mydf = pd.DataFrame({'classLabel':[0,0,0,1,1,0,0,0],
'categorical':[7,8,9,5,7,5,6,4],
'numeric1':[7,8,9,5,7,5,6,4],
'numeric2':[7,8,9,5,7,5,6,"N.A"]})
columnsNumber = ['numeric1']
XoneColumn = X[columnsNumber]
Я использую functionTransformer
как:
def extractSpecificColumn(X, columns):
return X[columns]
pipeline = Pipeline([
('features', FeatureUnion([
('continuous', Pipeline([
('numeric', FunctionTransformer(columnsNumber)),
('scale', StandardScaler())
]))
], n_jobs=1)),
('estimator', RandomForestClassifier(n_estimators=50, criterion='entropy', n_jobs=-1))
])
cv.cross_val_score(pipeline, XoneColumn, y, cv=folds, scoring=kappaScore)
Это приводит к: TypeError: 'list' object is not callable
при включенном функциональном трансформаторе.
редактировать:
Если я экземпляр ColumnExtractor
, как показано ниже не возвращается никакой ошибки. Но разве это не functionTransformer
означает просто для простых случаев, подобных этому, и должен просто работать?
class ColumnExtractor(TransformerMixin):
def __init__(self, columns):
self.columns = columns
def transform(self, X, *_):
return X[self.columns]
def fit(self, *_):
return self
не должен 'XoneColumn = X [columnsNumber]' be 'XoneColumn = mydf [columnsNumber]'? – EdChum
, также рассматривающий вопрос 2 в вашем github, индексы, возвращаемые из 'train_test_split', являются порядковыми значениями индекса, поэтому я предлагаю использовать' .iloc' в dfs 'X_train = X.iloc [train_index] X_test = X.iloc [ test_index] y_train = y.iloc [train_index] y_test = y.iloc [test_index] ' – EdChum
Код sklearn предполагает, что все является массивом np, поэтому у вас есть выбор либо преобразовать ваш pandas df в массив np, используя атрибут' .values' или использовать индексы 'pandas', такие как' iloc', 'loc' и' ix' – EdChum