tôi đã sử dụng đường ống và grid_search để chọn các thông số tốt nhất và sau đó sử dụng các thông số này để phù hợp với đường ống tốt nhất ('best_pipe'). Tuy nhiên, kể từ khi feature_selection (SelectKBest) là trong các đường ống đã không có phù hợp áp dụng cho SelectKBest.lựa chọn tính năng python trong đường ống: cách xác định tên đối tượng địa lý?
Tôi cần biết tên đối tượng địa lý của các đối tượng địa lý được chọn 'k'. Bất kỳ ý tưởng làm thế nào để lấy chúng? Cảm ơn bạn trước
from sklearn import (cross_validation, feature_selection, pipeline,
preprocessing, linear_model, grid_search)
folds = 5
split = cross_validation.StratifiedKFold(target, n_folds=folds, shuffle = False, random_state = 0)
scores = []
for k, (train, test) in enumerate(split):
X_train, X_test, y_train, y_test = X.ix[train], X.ix[test], y.ix[train], y.ix[test]
top_feat = feature_selection.SelectKBest()
pipe = pipeline.Pipeline([('scaler', preprocessing.StandardScaler()),
('feat', top_feat),
('clf', linear_model.LogisticRegression())])
K = [40, 60, 80, 100]
C = [1.0, 0.1, 0.01, 0.001, 0.0001, 0.00001]
penalty = ['l1', 'l2']
param_grid = [{'feat__k': K,
'clf__C': C,
'clf__penalty': penalty}]
scoring = 'precision'
gs = grid_search.GridSearchCV(estimator=pipe, param_grid = param_grid, scoring = scoring)
gs.fit(X_train, y_train)
best_score = gs.best_score_
scores.append(best_score)
print "Fold: {} {} {:.4f}".format(k+1, scoring, best_score)
print gs.best_params_
best_pipe = pipeline.Pipeline([('scale', preprocessing.StandardScaler()),
('feat', feature_selection.SelectKBest(k=80)),
('clf', linear_model.LogisticRegression(C=.0001, penalty='l2'))])
best_pipe.fit(X_train, y_train)
best_pipe.predict(X_test)
Một điều trị thực sự để nhận được giải pháp từ bạn Jake, bạn thực sự đã giúp tôi tìm hiểu python với video hướng dẫn pycon của bạn. Tuy nhiên, tôi nhận được lỗi "không thể chuyển đổi chuỗi thành float: score_575-600" (score_575-600 là tên của một trong các cột) cách này có thể được giải quyết? – figgy
Ah - Tôi quên rằng bộ chọn đối tượng địa lý không hoạt động trên chuỗi. Thử phiên bản cập nhật ở trên. Vui mừng khi biết các video hữu ích! – jakevdp
vẫn không chắc chắn cách tránh lỗi ở trên, nhưng giải pháp bước đôi này ít nhất đã cho tôi tên cột cho k các tính năng tốt nhất: tính năng = best_pipe.named_steps ['feat']. Get_support() x_cols = X.columns .values [features == True] x_cols – figgy