meine erste Pipeline für sklearn Schreiben ich auf einige Probleme gestoßen, wenn nur eine Teilmenge der Spalten in eine Rohrleitung gelegt wird:sklearn Funktion Transformator in Pipeline
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]
Ich benutze die functionTransformer
wie:
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)
Ergebnis: TypeError: 'list' object is not callable
wenn der Funktionsumwandler aktiviert ist.
edit:
Wenn ich ein ColumnExtractor
wie instanziiert unten kein Fehler zurückgegeben. Aber ist das functionTransformer
nicht nur für einfache Fälle wie dieses gedacht und sollte einfach funktionieren?
class ColumnExtractor(TransformerMixin):
def __init__(self, columns):
self.columns = columns
def transform(self, X, *_):
return X[self.columns]
def fit(self, *_):
return self
sollte nicht 'XoneColumn = X [columnsNumber]' sei 'XoneColumn = mydf [columnsNumber]'? – EdChum
auch Blick auf Frage 2 in Ihrem GitHub die Indizes, die von 'train_test_split' zurückgegeben werden, sind die Ordnungsindexwerte, so empfehle ich' .iloc' auf dem 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
der sklearn-code geht davon aus, dass alles ein np-array ist, also hast du die wahl, entweder dein pandas df in ein np-array umzuwandeln .Werte 'oder um die' Pandas' Indexer wie 'iloc',' loc' und 'ix' – EdChum