Я пытаюсь предсказать заболеваемость диабетом у скикитов у питона.Мои данные были крайне несбалансированными, поэтому я пересэмплировал данные с использованием SMOTE на 100%, уравновешивая выборки.Я использую случайный лес для классификации, и я хотел импортировать важность функций после того, как построил модель.Однако наборы данных с передискретизацией теперь находятся в numpy.ndarray
, и я не могу видеть результаты важности функций.Пожалуйста помоги!
диабетик (1) = 704 и недиабетик (0) = 4777 в полном наборе данных, я пересэмплировал набор данных, используя SMOTE на 100%, уравновешивая класс меньшинства к большинству класса обучающей выборки, который я нашел лучшимпараметры при поиске по сетке и 5-кратной перекрестной проверке, когда я пытался увидеть важность функции, я получил следующую ошибку:
AttributeError: у объекта 'numpy.ndarray' нет атрибута 'columns'
Итак, я понимаю, что, как только я пересэмплировал данные, они преобразуются в ndarray, но я не знаю, что делать дальше.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
sm = SMOTE(random_state=2)
X_res, y_res = sm.fit_sample(X_train, y_train.ravel())
cl = RandomForestClassifier()
params = {
'n_estimators': [100, 300, 500, 800, 1000],
'criterion': ['gini', 'entropy'],
'bootstrap': [True, False],
'max_features': ['auto', 'sqrt', 'log2'],
'max_depth' : [4,5,6,7,8],
}
clf = GridSearchCV(estimator=cl, param_grid=params, cv=5, verbose=0)
bestmodel= clf.fit(X_res, y_res)
cl = RandomForestClassifier(bootstrap=False, criterion='gini',
max_depth=8, max_features='sqrt', n_estimators= 300)
forestSMOTE= cl.fit(X_res, y_res)
feature_importances = pd.DataFrame(forestSMOTE.feature_importances_,
index = X_res.columns, columns=
['importance']).sort_values('importance',
ascending=False)
Если у кого-то есть предложения о том, что нужно сделать, чтобы иметь возможность наносить на карту важные функции, когда я использую сэмплированные наборы, дайте мне знать, ПОЖАЛУЙСТА.