Я анализирую различные биомаркеры на основе данных ЭЭГ с помощью разных алгоритмов машинного обучения, различных этапов предварительной обработки и т. д. В результате получается несколько моделей для каждой комбинации этап и алгоритм предварительной обработки.
Каждая модель обучается с использованием StratifiedGroupKFold, всего 6 сгибов.
Каждый сгиб сохраняется в виде библиотеки заданий под именем .joblib
Биомаркеры:
Каждая полоса сигнала ЭЭГ имеет ряд биомаркеров. Эти биомаркеры, в свою очередь, состоят из всех сигналов со всех электродов ЭЭГ. Таким образом, биомаркер состоит из нескольких функций, которые нельзя разделять (каждый биомаркер должен содержать все данные электрода).
Что я хотел бы сделать:
В моем первом подходе я обучил каждую модель всем биомаркерам. Теперь я хотел бы использовать важность функции, чтобы выяснить, можно ли опустить некоторые из них.
Для этого я хотел бы рассмотреть каждый шаг предварительной обработки и каждую модель.
Мне рекомендовали SHAP, но моя проблема в том, что я не знаю, как суммировать складки и каналы каждого биомаркера.
Вот моя первая попытка хотя бы суммировать складки (для примера я только используя все складки одной модели):
Код: Выделить всё
for i, (train_index, test_index) in enumerate(sgkf.split(X, y, groups)):
X_test, y_test = X.iloc[test_index], y.iloc[test_index]
# Modell
fold_file = fold_files[i]
clf = joblib.load(fold_file)
# SHAP-Explainer
explainer = shap.LinearExplainer(clf, X_test)
shap_values = explainer.shap_values(X_test)
sv = explainer(X_test)
all_shap_values.append(shap_values)
shap_values_stacked = np.vstack([sv[1] for sv in all_shap_values])
shap_values_mean = np.abs(shap_values_stacked).mean(0)
importance_df = pd.DataFrame({
"feature": columns,
"shap_values": shap_values_mean
})
Мой вопрос разделен на 2 части:
- как суммировать складки? (среднее значение?)
- как сгруппировать каналы каждого биомаркера? Могу ли я добавить значения или исказлю результат?
Заранее спасибо!
Подробнее здесь: https://stackoverflow.com/questions/785 ... importance