Как интегрировать SMOTE передискретизацию и выбор функций в RFECV

#python #python-3.x #classification

#python #python-3.x #классификация

Вопрос:

Я работаю над набором данных shape (41188, 58), чтобы создать двоичный классификатор. Данные сильно несбалансированы. Первоначально я намеревался выполнить выбор функций с помощью RFECV, и это код, который я использую, который был заимствован отсюда:

 # Create the RFE object and compute a cross-validated score.
svc = SVC(kernel="linear")

# The "accuracy" scoring is proportional to the number of correct classifications
min_features_to_select = 1  # Minimum number of features to consider
rfecv = RFECV(estimator=svc, step=1, cv=StratifiedKFold(5),
              scoring='accuracy',
              min_features_to_select=min_features_to_select)
rfecv.fit(X, y)

print("Optimal number of features : %d" % rfecv.n_features_)

# Plot number of features VS. cross-validation scores
plt.figure()
plt.plot(range(min_features_to_select, len(rfecv.grid_scores_)  
                  min_features_to_select), rfecv.grid_scores_)
plt.show()
 

Я получил следующий результат:
введите описание изображения здесь

затем я изменил код на cv=StratifiedKFold(2) и min_features_to_select = 20 и на этот раз я получил:

введите описание изображения здесь

Ни в одном из приведенных выше случаев повторная выборка не выполнялась. Поскольку повторная выборка должна применяться к обучающим данным, и здесь я использую перекрестную проверку, следовательно, каждое сгибание обучающих данных также должно быть передискретизировано (например, SMOTE). Интересно, как интегрировать передискретизацию и выбор функций в RFECV?