Ich habe ein Dataset, das ich das Modell SVC
von Sklearn SVM ausführen möchte. Die Größen einiger Werte der Merkmale liegen im Bereich von [0, 1e + 7]. Ich habe versucht, SVC
w/o Preprocessing zu verwenden, und ich bekomme entweder unakzeptabel lange Rechenzeiten oder 0 richtig positive Vorhersagen. Daher versuche ich einen Vorverarbeitungsschritt zu implementieren, insbesondere die MinMaxScaler
.Python, sklearn: Reihenfolge der Pipeline-Betrieb mit MinMaxScaler und SVC
Mein Code so weit:
selection_KBest = SelectKBest()
selection_PCA = PCA()
combined_features = FeatureUnion([("pca", selection_PCA),
("univ_select", selection_KBest)])
param_grid = dict(features__pca__n_components = range(feature_min,feature_max),
features__univ_select__k = range(feature_min,feature_max))
svm = SVC()
pipeline = Pipeline([("features", combined_features),
("scale", MinMaxScaler(feature_range=(0, 1))),
("svm", svm)])
param_grid["svm__C"] = [0.1, 1, 10]
cv = StratifiedShuffleSplit(y = labels_train,
n_iter = 10,
test_size = 0.1,
random_state = 42)
grid_search = GridSearchCV(pipeline,
param_grid = param_grid,
verbose = 1,
cv = cv)
grid_search.fit(features_train, labels_train)
"(grid_search.best_estimator_): ", (grid_search.best_estimator_)
Meine Frage ist spezifisch für Zeile:
pipeline = Pipeline([("features", combined_features),
("scale", MinMaxScaler(feature_range=(0, 1))),
("svm", svm)])
Ich möchte wissen, was die beste Logik für mein Programm ist, und damit die Reihenfolge der features
, scale
, svm
in pipeline
. Konkret kann ich nicht entscheiden, ob und scale
von dem geschaltet werden sollen, was es jetzt ist.
Hinweis 1: Ich möchte grid_search.best_estimator_
als mein Klassifikatormodell verwenden, das für Voraussagen vorwärts geht.
Anmerkung 2: Meine Sorge ist der richtige Weg pipeline
, so dass bei Vorhersage Schritt zu formulieren, die Eigenschaften von der Art und Weise ausgewählt werden, in dem Trainingsschritt und skaliert durchgeführt wurde.
Hinweis 3: Ich merke, dass svm
nicht in meinem grid_search.best_estimator_
Ergebnis erscheint. Bedeutet dies, dass es nicht korrekt aufgerufen wird?
Im Folgenden sind einige Ergebnisse, die zeigen, dass, um Materie kann:
pipeline = Pipeline([("scale", MinMaxScaler(feature_range=(0, 1))),
("features", combined_features),
("svm", svm)]):
Pipeline(steps=[('scale', MinMaxScaler(copy=True, feature_range=(0, 1)))
('features', FeatureUnion(n_jobs=1, transformer_list=[('pca', PCA(copy=True,
n_components=11, whiten=False)), ('univ_select', SelectKBest(k=2,
score_func=<function f_classif at 0x000000001ED61208>))],
transformer_weights=...f', max_iter=-1, probability=False,
random_state=None, shrinking=True, tol=0.001, verbose=False))])
Accuracy: 0.86247 Precision: 0.38947 Recall: 0.05550
F1: 0.09716 F2: 0.06699 Total predictions: 15000
True positives: 111 False positives: 174
False negatives: 1889 True negatives: 12826
pipeline = Pipeline([("features", combined_features),
("scale", MinMaxScaler(feature_range=(0, 1))),
("svm", svm)]):
Pipeline(steps=[('features', FeatureUnion(n_jobs=1,
transformer_list=[('pca', PCA(copy=True, n_components=1, whiten=False)),
('univ_select', SelectKBest(k=1, score_func=<function f_classif at
0x000000001ED61208>))],
transformer_weights=None)), ('scale', MinMaxScaler(copy=True, feature_range=
(0,...f', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False))])
Accuracy: 0.86680 Precision: 0.50463 Recall: 0.05450
F1: 0.09838 F2: 0.06633 Total predictions: 15000
True positives: 109 False positives: 107
False negatives: 1891 True negatives: 12893
EDIT 1 16041310: Anmerkung 3 behoben. Verwenden Sie grid_search.best_estimator_.steps
, um vollständige Schritte zu erhalten.
Der SVM drin ist, scheint aber von was auch immer versteckt werden gestellt, dass '... 'in der Ausgabe. 'max_iter = 1, Wahrscheinlichkeit = Falsch' sind Parameter für' SVC'. – joeln
Danke für den Tipp, @joeln. Wissen Sie, wie Sie den vollständigen, nicht aufgetrennten Ausdruck erhalten? – ximiki
Es gibt derzeit keine Möglichkeit, den vollständigen, nicht abgeschnittenen Ausdruck zu erhalten. Ich habe festgestellt: Er ist in 'BaseEstimator .__ repr__' fest programmiert: https://github.com/scikit-learn/scikit-learn/blob/master/ sklearn/base.py # L148. Natürlich können Sie jeden Schritt allein repr ... – joeln