Когда использовать какой метод важности функции? - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь найти важные особенности. Я использую разные модели, но каждая из них дает разные результаты, и я не могу понять, почему. Я посмотрел, какие допущения работают для каждой модели, но здесь тоже ничего не могу найти.

Я использую XGBoost, Logisti c Regression, RFE, Permutation Importance и Decision Tree. Как я могу проверить, какой из них лучший? Могу ли я использовать какие-либо показатели качества? Кроме того, для некоторых моделей выходные данные не сопоставляются с фактическим именем функции, а с числами, такими как функция 0, функция 1 и т. Д. c. Как я могу сопоставить их с моими фактическими функциями?

#XG BOOST 

# split data into train and test sets
test_size = 0.3
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=test_size)

#instantiate model and train
model = XGBClassifier(learning_rate = 0.05, n_estimators=200, max_depth=4)
model.fit(X_train, y_train)

# make predictions for test set
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]

accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

# plot feature importance
fig, ax = plt.subplots(figsize=(10,8))
plot_importance(model,ax=ax)


#PERMUTATION IMPORTANCE
train_X, val_X, train_y, val_y = train_test_split(x, y, random_state=1)
my_model = RandomForestClassifier(n_estimators=100,
                                  random_state=0).fit(train_X, train_y)


perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)
eli5.show_weights(perm, feature_names = val_X.columns.tolist())

# RECURSIVE FEATURE ELIMINATION
X = x
Y = y
# feature extraction
model = LogisticRegression(solver='lbfgs')
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Num Features: %d" % fit.n_features_)
print("Selected Features: %s" % fit.support_)
print("Feature Ranking: %s" % fit.ranking_)

# LOG REGRESSION
model = LogisticRegression()
# fit the model
model.fit(x, y)
# get importance
importance = model.coef_[0]
# summarize feature importance
for i,v in enumerate(importance):
    print('Feature: %0d, Score: %.5f' % (i,v))
# plot feature importance
pyplot.bar([x for x in range(len(importance))], importance)
pyplot.show()

# DECISION TREE
model = DecisionTreeClassifier()
# fit the model
model.fit(x, y)
# get importance
importance = model.feature_importances_
# summarize feature importance
for i,v in enumerate(importance):
    print('Feature: %0d, Score: %.5f' % (i,v))
# plot feature importance
pyplot.bar([x for x in range(len(importance))], importance)
pyplot.show()

1 Ответ

1 голос
/ 09 мая 2020

Прежде всего - важно настроить гиперпараметры моделей, значения по умолчанию могут работать во многих случаях.

Во-вторых: важность функции показывает важность функций для модели, она не показывает качество моделей.

Кроме того, для некоторых моделей выходные данные не сопоставляются с фактическим именем функции, а с числами, такими как функция 0, функция 1 и т. д. c.

Цифры относятся к списку функций в ваших данных. Так, если в ваших данных, например, есть столбцы ['age', 'area', 'weather'], то 0 - возраст, 1 - область, 2 - погода.

Что касается сравнения моделей - вы следует использовать метрики: https://scikit-learn.org/stable/modules/model_evaluation.html

Для классификации наиболее часто используются метрики f1-score и точность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...