#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?