Сейчас я пытаюсь предсказать возникновение определенного явления, используя данные около 9500 человек с 36-37 элементами предикторов, используя sklearn (машинное обучение) в Python. Это проблема двоичной классификации, и моя целевая переменная имеет 2 класса (встречаются или не встречаются). В конечном итоге я хочу предсказать, произойдет ли это с этим человеком, используя эти 36-37 предикторов.
Данные были разделены на 80% обучающих данных и 20% тестовых данных и обучены с использованием модели случайного леса, а затем оценены с использованием тестовые данные и гиперпараметры были скорректированы с помощью Gridsearch CV.
Наконец, когда я попытался визуализировать (построить график) влияние каждой переменной признака (из предикторов) на прогноз с использованием значений Шепли, программа внезапно остановилась во время расчета «значения Shap» с сообщением об ошибке «Ядро остановлено». В нашей программе мы использовали Tree SHAP.
Я пробовал писать код и добавлять обработку исключений, а также исследовал ситуацию в режиме отладки с помощью Spyder, но не смог найти никаких подробностей об остановке ядра, кроме той, что она остановилась в библиотеке shap_value. Такая же остановка ядра произошла и в JupyterLab.
Изначально при запуске программы с 37 предикторами расчет shap-значения и последующий график значений shap выполнялся/генерировался без каких-либо проблем. Мы могли бы построить сводку SHAP, графики пчелиного рая, силы, водопада и зависимости. Это похоже не на глюк программы или нехватку памяти. Когда я сократил один элемент до 36 элементов (независимо от того, какой предиктор я уменьшаю), начала возникать описанная выше ошибка остановки ядра.
Не могли бы вы дать мне несколько советов, как устранить эту ошибку? Пожалуйста, дайте мне знать, если для понимания проблемы требуются дополнительные подробности.
ps
[*]Только один предиктор является количественным ( числовая) переменная, а все остальные являются категориальными (номинальными/порядковыми) переменными.
[*]Целевая переменная также является (двоичным) категориальным предиктором.
[*]Питон (3.11.11), Scikit-learn (1.5.1) и shap (0.46.0) были установлены вместе с Anaconda 3.
[*]В качестве ОС используется Windows 11
Код: Выделить всё
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42, test_size=0.2)
Length of X_train: 7516
Length of X_test: 1880
(Omitted)
rf_classifier = best_rf_gs.named_steps['randomforestclassifier']
# Create a SHAP explainer
explainer = shap.TreeExplainer(rf_classifier)
try:
shap_values = explainer(X_test, check_additivity=False) #Kernel stop error here
except:
traceback.print_exc()
print(explainer)
type(shap_values)
print(np.shape(shap_values))
#shap bar plot
clustering = shap.utils.hclust(X_test, y_test) shap.plots.bar(shap_values[:,:,0], max_display=40, clustering=clustering, clustering_cutoff= 0.5 )
Я поискал в Интернете и попробовал следующие меры, но ни одна из них не привела к какому-либо улучшению.
- Я ввел обработку исключений, но нам не удалось получить никакой информации, когда и где возникла проблема.
- Я попробовал обновить версии shap, scikit-learn и Python последней версии, но ошибки все равно были.
- Я пробовал уменьшить размер данных (до половины количества людей), но улучшения не было.
Кроме того, изменение количества предикторов с 36 на 30 или 20 не улучшило ситуацию. - Я учел возможность нехватки памяти, поэтому проверил использование в диспетчере задач. Я попробовал запустить программу с проверкой отладчиком, но никакой полезной информации получить не удалось. Так как с 37 элементами программа работает хорошо, то вряд ли просто не хватает памяти или это единственная причина последующих ошибок.
- Я также проверял ошибки в кодировании с помощью отладчика , операторы печати и т. д. Как и в случае с вышеуказанными элементами, были случаи, когда программа работала хорошо, поэтому это не похоже на простую ошибку кодирования.
Подробнее здесь: https://stackoverflow.com/questions/793 ... alculation
Мобильная версия