Можно вычислить значения Шепли для модели машинного обучения с помощью shapley
объект. Используйте значения для интерпретации вкладов отдельных функций в модели в предсказание для точки запроса. Существует два способа вычисления значений Шепли:
Создайте shapley
объект для модели машинного обучения с заданной точкой запроса при помощи shapley
функция. Функция вычисляет значения Shapley всех функций в модели для точки запроса.
Создайте shapley
объект для модели машинного обучения при помощи shapley
и затем вычислите значения Shapley для заданной точки запроса с помощью fit
функция.
Эта тема определяет значения Шепли, описывает два доступных алгоритма для вычисления значений Шепли, приводит примеры для каждого и показывает, как уменьшить затраты на вычисление значений Шепли.
В теории игр значение Шепли игрока является средним предельным вкладом игрока в кооперативную игру. То есть, значения Шепли являются справедливыми распределениями, для отдельных игроков, из общего усиления, полученного от кооперативной игры. В контексте предсказания машинного обучения значение Шепли функции для точки запроса объясняет вклад функции в предсказание (ответ на регрессию или счет каждого класса для классификации) в заданной точке запроса. Значение Шепли соответствует отклонению предсказания для точки запроса от среднего предсказания из-за функции. Для каждой точки запроса сумма значений Shapley для всех функций соответствует общему отклонению предсказания от среднего значения.
Значение Shapley i-й функции для x точек запроса определяется функцией ценности v:
(1) |
M - это количество всех функций.
- набор всех функций.
|<reservedrangesplaceholder2>| - это величина заданного S или количество элементов в заданном S.
vx (S) является функцией ценности функций в наборе S для x точек запроса. Значение функции указывает на ожидаемый вклад функций в S в предсказание для x точки запроса.
shapley
предлагает два алгоритма: kernelSHAP [1], который использует интервенционные распределения для функции ценности, и расширение до kernelSHAP [2], которое использует условные распределения для функции ценности. Можно задать алгоритм, который будет использоваться, установив 'Method'
аргумент имя-значение shapley
функцию или fit
функция.
Различие между этими двумя алгоритмами является определением функции ценности. Оба алгоритма определяют функцию ценности таким образом, что сумма значений Shapley точки запроса по всем функциям соответствует общему отклонению предсказания для точки запроса от среднего значения.
Поэтому функция ценности vx (S) должен соответствовать ожидаемому вкладу функций в S предсказания (f) для x точки запроса. Два алгоритма вычисляют ожидаемый вклад с помощью искусственных выборок, созданных из заданных данных (X). Вы должны предоставить X
через модель машинного обучения входа или отдельный входной параметр данных, когда вы создаете shapley
объект. В искусственных выборках значения функций в S поступают из точки запроса. Для остальных функций (функций в Sc, дополнение S), алгоритм kernelSHAP генерирует выборки с помощью интервенционных распределений, в то время как расширение алгоритма kernelSHAP генерирует выборки с помощью условных распределений.
'Method','interventional-kernel'
)shapley
использует алгоритм kernelSHAP по умолчанию.
Алгоритм kernelSHAP определяет функцию ценности функций в S в точке запроса x как ожидаемое предсказание относительно интервенционного D распределения, которое является совместным распределением функций в Sc:
где xS - значение точки запроса для функций в S и XSc являются функциями в Sc.
Чтобы вычислить функцию ценности vx (S) в x точки запроса с предположением, что функции не сильно коррелированы, shapley
использует значения в X данных в качестве выборок интервенционного D распределения для функций в Sc:
где N - количество наблюдений, и (XSc) j содержит значения функций в Sc для j-го наблюдения.
Например, предположите, что у Вас есть три функции в X и четыре наблюдения: (x11, x12, x13), (x21, x22, x23), (x31, x32, x33), и (x41, x42, x43). Предположим, что S включает в себя первую функцию, и Sc rest. В этом случае функция ценности первого признака, оцененного в точке запроса (x41, x42, x43), является
Алгоритм kernelSHAP в вычислительном отношении дешевле, чем расширение алгоритма kernelSHAP, поддерживает упорядоченные категориальные предикторы и может обрабатывать отсутствующие значения в X. Однако алгоритм требует функции предположения независимости и использует выборки вне распределения [3]. Искусственные выборки, созданные с помощью смеси точки запроса и X данных, могут содержать нереалистичные наблюдения. Для примера (x41, x12, x13) может быть выборкой, которая не происходит в полном совместном распределении трёх функций.
'Method','conditional-kernel'
)Задайте 'Method','conditional-kernel'
использовать расширение алгоритма kernelSHAP.
расширение алгоритма kernelSHAP определяет функцию ценности функций в S в точке запроса x используя условное распределение XSc, учитывая, что XS имеет значения точек запроса:
Чтобы вычислить функцию ценности vx (S) в x точек запроса, shapley
использует ближайшие соседи точки запроса, которые соответствуют 10% наблюдений в X данных. Этот подход использует более реалистичные выборки, чем алгоритм kernelSHAP, и не требует предположения независимости функций. Однако этот алгоритм является в вычислительном отношении более дорогим, не поддерживает упорядоченные категориальные предикторы и не может обрабатывать NaN
s в непрерывных функциях. Кроме того, алгоритм может назначить ненулевое значение Шепли фиктивной функции, который не способствует предсказанию, если фиктивная функция коррелирует с важной функцией [3].
Этот пример обучает линейную модель классификации и вычисляет значения Шепли, используя оба алгоритма kernelSHAP ('Method','interventional-kernel'
) и расширение алгоритма kernelSHAP ('Method','conditional-kernel'
).
Обучите линейную модель классификации
Загрузите ionosphere
набор данных. Этот набор данных имеет 34 предиктора и 351 двоичный ответ для радиолокационных возвратов, либо плохо ('b'
) или хорошо ('g'
).
load ionosphere
Обучите линейную классификационную модель. Задайте метод минимизации целевой функции ('Solver'
аргумент имя-значение) в качестве алгоритма Бройдена-Флетчера-Голдфарба-Шанно квази-Ньютона с ограниченной памятью ('lbfgs'
) для лучшей точности линейных коэффициентов.
Mdl = fitclinear(X,Y,'Solver','lbfgs')
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: {'b' 'g'} ScoreTransform: 'none' Beta: [34x1 double] Bias: -3.7100 Lambda: 0.0028 Learner: 'svm' Properties, Methods
Значения Shapley с интервенционным распределением
Вычислите значения Шепли для первого наблюдения с помощью алгоритма kernelSHAP, который использует интервенционное распределение для оценки функции ценности. Вы не должны указывать 'Method'
значение из-за 'interventional-kernel'
является значением по умолчанию.
queryPoint = X(1,:);
explainer1 = shapley(Mdl,X,'QueryPoint',queryPoint);
Для классификационной модели shapley
вычисляет значения Шепли, используя предсказанный счет класса для каждого класса. Постройте график значений Шепли для предсказанного класса с помощью plot
функция.
plot(explainer1)
Горизонтальный столбчатый график показывает значения Шепли для 10 наиболее важных переменных, отсортированных по их абсолютным значениям. Каждое значение Шепли объясняет отклонение счета для точки запроса от среднего счета предсказанного класса из-за соответствующей переменной.
Для линейной модели, где вы предполагаете, что функции независимы друг от друга, можно вычислить интервенционные значения Шепли для положительного класса (или второго класса в Mdl.ClassNames
, 'g'
) из предполагаемых коэффициентов (Mdl.Beta
) [1].
linearSHAPValues = (Mdl.Beta'.*(queryPoint-mean(X)))';
Составьте таблицу, содержащую значения Шепли, вычисленные из алгоритма kernelSHAP, и значения из коэффициентов.
t = table(explainer1.ShapleyValues.Predictor,explainer1.ShapleyValues.g,linearSHAPValues, ... 'VariableNames',{'Predictor','KernelSHAP Value','LinearSHAP Value'})
t=34×3 table
Predictor KernelSHAP Value LinearSHAP Value
_________ ________________ ________________
"x1" 0.28789 0.28789
"x2" -3.5258e-16 0
"x3" 0.20822 0.20822
"x4" -0.01998 -0.01998
"x5" 0.20872 0.20872
"x6" -0.076991 -0.076991
"x7" 0.19188 0.19188
"x8" -0.64386 -0.64386
"x9" 0.42348 0.42348
"x10" -0.030049 -0.030049
"x11" -0.23132 -0.23132
"x12" 0.1422 0.1422
"x13" -0.045973 -0.045973
"x14" -0.29022 -0.29022
"x15" 0.21051 0.21051
"x16" 0.13382 0.13382
⋮
Значения Shapley с условным распределением
Вычислите значения Шепли для первого наблюдения с помощью расширения к алгоритму kernelSHAP, который использует условное распределение для оценки функции ценности.
explainer2 = shapley(Mdl,X,'QueryPoint',queryPoint,'Method','conditional-kernel');
Постройте график значений Шепли.
plot(explainer2)
Эти два алгоритма идентифицируют различные наборы для 10 наиболее важных переменных. Только эти две переменные x8
и x22
являются общими для обоих наборов.
Вычислительная стоимость значений Шепли увеличивается, если количество наблюдений или функций велико.
Вычисление функции ценности (v) может быть вычислительно дорогим, если у вас есть большое количество наблюдений, для примера - более 1000. Для более быстрых расчетов используйте меньшую выборку наблюдений, когда вы создаете shapley
объект, или вычислить значения Шепли параллельно путем определения 'UseParallel'
как true
при вычислении значений с помощью shapley
или fit
функция. Для параллельных вычислений требуется Parallel Computing Toolbox™.
Вычисление суммирования в Уравнении 1 для всех доступных подмножеств S может быть вычислительно дорогим, когда M (количество функций) большое. Общее количество подмножеств, которые нужно учесть, составляет 2M. Вместо вычисления суммирования для всех подмножеств можно задать максимальное количество подмножеств для расчета значения Шепли при помощи 'MaxNumSubsets'
аргумент имя-значение. shapley
выбирает подмножества для использования на основе их значений веса. Вес подмножества пропорционален 1/( знаменатель суммирования), что соответствует 1 по биномиальному коэффициенту :. Поэтому подмножество с высоким или низким значением кардинальности имеет большое значение веса. shapley
сначала включает подмножества с наивысшим весом, а затем включает другие подмножества в порядке убывания на основе их значений веса.
Этот пример показывает, как уменьшить вычислительные затраты для значений Шепли, когда у вас есть большое количество наблюдений и функций.
Обучите регрессионный ансамбль
Загрузите набор выборочных данных NYCHousing2015
.
load NYCHousing2015
Набор данных включает 55 246 наблюдений 10 переменных с информацией о продажах недвижимости в Нью-Йорке в 2015 году. Этот пример использует эти переменные для анализа продажных цен (SALEPRICE
).
Предварительно обработайте набор данных. Преобразуйте datetime
массив (SALEDATE
) к номерам месяцев.
NYCHousing2015.SALEDATE = month(NYCHousing2015.SALEDATE);
Обучите регрессионный ансамбль.
Mdl = fitrensemble(NYCHousing2015,'SALEPRICE');
Вычисление значений Shapley с опциями по умолчанию
Вычислите значения Шепли всех переменных предиктора для первого наблюдения. Измерьте время, необходимое для вычисления значений Шепли при помощи tic
и toc
.
tic
explainer1 = shapley(Mdl,'QueryPoint',NYCHousing2015(1,:));
Warning: Computation can be slow because the predictor data has over 1000 observations. Use a smaller sample of the training set or specify 'UseParallel' as true for faster computation.
toc
Elapsed time is 492.365307 seconds.
Как указывает предупреждающее сообщение, расчет может быть медленным, потому что данные предиктора имеют более 1000 наблюдений.
Задайте опции для снижения вычислительных затрат
shapley
предоставляет несколько опций, чтобы уменьшить вычислительные затраты, когда у вас есть большое количество наблюдений или функций.
Большое количество наблюдений - используйте меньшую выборку обучающих данных и вычислите значения Шепли параллельно путем определения 'UseParallel'
как true
.
Большое количество функций - Задайте 'MaxNumSubsets'
аргумент имя-значение, чтобы ограничить количество подмножеств, включенных в расчет.
Снова вычислите значения Шепли с помощью меньшей выборки обучающих данных и опции параллельных вычислений. Кроме того, задайте максимальное количество подмножеств как 2^5
.
NumSamples = 5e2; Tbl = datasample(NYCHousing2015,NumSamples,'Replace',false); tic explainer2 = shapley(Mdl,Tbl,'QueryPoint',NYCHousing2015(1,:), ... 'UseParallel',true,'MaxNumSubsets',2^5);
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 6).
toc
Elapsed time is 52.183287 seconds.
Установка дополнительных опций сокращает время, необходимое для вычисления значений Шепли.
[3] Kumar, I. Elizabeth, Suresh Venkatasubramanian, Carlos Scheidegger, and Sorelle Friedler. «Проблемы с объяснениями, основанными на Шепли-ценности, как меры важности функций». arXiv:2002.11097 (2020).