Как использовать значения SHAP для ЭЭГ-биомаркеров и важности признаков?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать значения SHAP для ЭЭГ-биомаркеров и важности признаков?

Сообщение Anonymous »

Чем я занимаюсь:
Я анализирую различные биомаркеры на основе данных ЭЭГ с помощью разных алгоритмов машинного обучения, различных этапов предварительной обработки и т. д. В результате получается несколько моделей для каждой комбинации этап и алгоритм предварительной обработки.
Каждая модель обучается с использованием 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
})
Сначала я попробовал это с помощью объяснения.shap_values, потому что это показалось мне самым простым способом. Но тогда я не могу это построить, мне нужен sv = expalliner(X).
Мой вопрос разделен на 2 части:
  • как суммировать складки? (среднее значение?)
  • как сгруппировать каналы каждого биомаркера? Могу ли я добавить значения или исказлю результат?
(Биомаркеры названы таким образом, что я могу легко идентифицировать каналы )
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/785 ... importance
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»