I would appreciate if you could let me know how to select features based on feature importance using SelectFromModel. 

I wrote:

    # data
    X = np.array(pd.read_csv('who_X_1.csv',header=None).values)
    y = np.array(pd.read_csv('who_Y_1.csv',header=None).values.ravel())
    indices = np.arange(y.shape[0])
    
    # # Divide Data into Train and Test
    X_train, X_test, y_train, y_test,idx_train,idx_test = train_test_split(X, yy,indices,stratify=yy,test_size=0.3, random_state=42)
    
    
    scaler = StandardScaler()
    
    # # Compute Cohen's Kappa or Auc as scoring criterion due to imbalanced data set
    kappa_scorer = make_scorer(cohen_kappa_score)
    auc_scorer=make_scorer(roc_auc_score)
    F_measure_scorer = make_scorer(f1_score)
    
    ##hyperparameter
    
    param_grid = {
        'clf__colsample_bytree': [i/10.0 for i in range(7,10)],
        #"clf__subsample"  : [i/10.0 for i in range(5,10)],
        #'clf__max_depth':range(5,15,1),
        #'clf__gamma':[i/10.0 for i in range(0,5)],
        #'clf__reg_alpha':[1e-5, 1e-2, 0.1, 1, 100]
    
                }
    
    ##Classifier
    xg=XGBClassifier(max_depth=3,
                     learning_rate=0.05,
                     n_estimators=350,
                     objective="binary:logistic",
                     booster="gbtree",
                     gamma=0,
                     min_child_weight=0.8,
                     subsample=1,
                     colsample_bylevel=1,
                     colsample_bytree=0.6,
                     reg_alpha=0.001,
                     reg_lambda=1,
                     scale_pos_weight=22,
                     random_state=4,n_jobs=-1)
    pipe=Pipeline(steps=[('pre',scaler),
                        ('clf',xg)])
    
    rg_cv = GridSearchCV(pipe, param_grid, cv=5, scoring = 'f1')
    rg_cv.fit(X_train, y_train)
    print("Tuned rf best params: {}".format(rg_cv.best_params_))
    
    # Use SelectFromModel
    thresholds = np.sort(rg_cv.best_estimator_.named_steps["clf"].feature_importances_)
    for thresh in thresholds:
        # select features using threshold
        selection = SelectFromModel(rg_cv, threshold=thresh, prefit=True)
        select_X_train = selection.transform(X_train)
    
        # train model
        selection_model = rg_cv
        selection_model.fit(select_X_train, y_train)
    
        # eval model
        select_X_test = selection.transform(X_test)
        y_pred = selection_model.predict(select_X_test)
        predictions = [round(value) for value in y_pred]
        accuracy = accuracy_score(y_test, predictions)
        print("Thresh=%.3f, n=%d, Accuracy: %.2f%%" % (thresh, select_X_train.shape[1], accuracy * 100.0))
        print(confusion_matrix(y_test, predictions))
        print(classification_report(y_test, predictions))

However, the following error occurred:

    ValueError: The underlying estimator GridSearchCV has no `coef_` or `feature_importances_` attribute. Either pass a fitted estimator to SelectFromModel or call fit before calling transform.